数据库性能模型与容量规划   张瑞  @ Alibaba
问题与挑战 <ul><li>硬件设备选型 </li></ul><ul><ul><li>硬件选型 </li></ul></ul><ul><ul><li>性能评估 </li></ul></ul><ul><li>数据库性能模型 </li></ul><...
硬件测试与选型
硬件性能 -CPU <ul><li>Alibaba TPC-C 测试模型 </li></ul>* 以上数据针对 Alibaba 特定场景测试,不能作为普遍数据反映硬件的性能
测试模型设计 <ul><li>数据规模 </li></ul><ul><ul><li>缓存命中 </li></ul></ul><ul><ul><li>避免物理 IO </li></ul></ul><ul><li>数据分布 </li></ul><u...
硬件性能 -IO <ul><li>存储性能指标   </li></ul><ul><ul><li>IOPS  </li></ul></ul><ul><ul><li>吞吐量 </li></ul></ul><ul><ul><li>延迟时间 </li>...
磁盘性能分析 <ul><li>IOPS </li></ul><ul><ul><li>转速,寻道延时, </li></ul></ul><ul><li>吞吐量 </li></ul><ul><ul><li>转速,接口类型,内部 / 接口传输率 </l...
存储性能分析 <ul><li>IOPS </li></ul><ul><ul><li>磁盘数量 </li></ul></ul><ul><ul><li>缓存命中率 </li></ul></ul><ul><ul><li>存储划分 </li></ul>...
正确使用存储 <ul><li>存储层   </li></ul><ul><ul><li>存储架构 </li></ul></ul><ul><ul><li>存储划分 </li></ul></ul><ul><ul><li>Raid 类型 </li></...
硬件容量模型 <ul><li>主机 </li></ul><ul><ul><li>TPC-C  </li></ul></ul><ul><ul><li>CPU 使用率 </li></ul></ul><ul><ul><li>每秒逻辑读 </li></...
数据库性能模型
响应时间为中心的优化方法 <ul><li>优化的目标是降低响应时间 </li></ul><ul><ul><li>响应时间是用户体验第一要素 </li></ul></ul><ul><ul><li>响应时间是性能问题的直接表现 </li></ul>...
关键设备的响应延迟 L1 cache reference  0.5 ns Branch mispredict  5 ns L2 cache reference  7 ns Mutex lock/unlock  25 ns Main memory...
ORACLE 时间模型 <ul><li>服务时间 </li></ul><ul><ul><li>后台进程 </li></ul></ul><ul><ul><li>前台进程 </li></ul></ul><ul><li>等待时间 </li></ul>...
ORACLE 中的时间信息 <ul><li>SQL exetute time </li></ul><ul><li>SQL 服务时间 + 等待时间 </li></ul><ul><li>DB CPU </li></ul><ul><li>CPU 资源...
AWR 等待时间分类 <ul><li>DB CPU </li></ul><ul><ul><li>logical read </li></ul></ul><ul><li>User IO </li></ul><ul><ul><li>sequenti...
数据库 IO 特点分析 <ul><li>日志文件顺序写 </li></ul><ul><ul><li>同步写入 </li></ul></ul><ul><ul><li>连续位置的随机 IO  </li></ul></ul><ul><ul><li>响...
物理 IO 响应时间 <ul><li>Cache 对物理 IO 响应的影响 </li></ul><ul><li>Sequential read 与 Scattered read </li></ul><ul><li>Log file sync 与...
逻辑 IO 响应时间 <ul><li>逻辑读是性能度量的重要指标 </li></ul><ul><ul><li>衡量 SQL 所耗费的系统资源 </li></ul></ul><ul><ul><li>包含 CPU ,物理 IO…… </li></u...
数据库类型与响应时间 <ul><li>CPU 密集型 </li></ul><ul><ul><li>CPU time   85% </li></ul></ul><ul><ul><li>User IO     10% </li></ul></ul>...
基于响应时间的优化原则 <ul><li>减少物理 IO </li></ul><ul><ul><li>增大 buffer cache </li></ul></ul><ul><ul><li>缓存对象 </li></ul></ul><ul><li>提...
消除热点 <ul><li>消除存储热点 </li></ul><ul><ul><li>数据分散在更多磁盘上 </li></ul></ul><ul><ul><li>redo log 单独存放 </li></ul></ul><ul><ul><li>减...
容量规划与风险预测
容量规划 <ul><li>主机容量 </li></ul><ul><ul><li>DB CPU TIME <  主机 CPU 数量  ×  时间 </li></ul></ul><ul><ul><li>逻辑 IO 数量  <  主机容量 </li>...
其他风险因素 <ul><li>数据库 </li></ul><ul><ul><li>除 IO 以外的等待时间小于 5% </li></ul></ul><ul><ul><li>CPU 消耗 </li></ul></ul><ul><ul><ul><l...
软硬件发展方向 <ul><li>硬件技术发展 </li></ul><ul><ul><li>CPU 性能巨大飞跃 </li></ul></ul><ul><ul><li>SMP , NUMA , MPP  </li></ul></ul><ul><u...
Q&A <ul><li>blog : www.HelloDBA.net </li></ul><ul><li>email : [email_address] </li></ul><ul><li>twitter : hellodba </li></...
Upcoming SlideShare
Loading in...5
×

数据库性能模型与容量规划

4,555

Published on

Published in: Technology
0 Comments
13 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,555
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
136
Comments
0
Likes
13
Embeds 0
No embeds

No notes for slide

数据库性能模型与容量规划

  1. 1. 数据库性能模型与容量规划 张瑞 @ Alibaba
  2. 2. 问题与挑战 <ul><li>硬件设备选型 </li></ul><ul><ul><li>硬件选型 </li></ul></ul><ul><ul><li>性能评估 </li></ul></ul><ul><li>数据库性能模型 </li></ul><ul><ul><li>评估应用对数据库的影响 </li></ul></ul><ul><ul><li>响应时间为中心的优化方法 </li></ul></ul><ul><li>数据库容量规划 </li></ul><ul><ul><li>容量规划 </li></ul></ul><ul><ul><li>预测风险 </li></ul></ul>
  3. 3. 硬件测试与选型
  4. 4. 硬件性能 -CPU <ul><li>Alibaba TPC-C 测试模型 </li></ul>* 以上数据针对 Alibaba 特定场景测试,不能作为普遍数据反映硬件的性能
  5. 5. 测试模型设计 <ul><li>数据规模 </li></ul><ul><ul><li>缓存命中 </li></ul></ul><ul><ul><li>避免物理 IO </li></ul></ul><ul><li>数据分布 </li></ul><ul><ul><li>减少热点 </li></ul></ul><ul><li>数据操作 </li></ul><ul><ul><li>读写比例 </li></ul></ul><ul><ul><li>典型操作 </li></ul></ul><ul><li>减少等待 </li></ul><ul><ul><li>IO , Latch </li></ul></ul>
  6. 6. 硬件性能 -IO <ul><li>存储性能指标 </li></ul><ul><ul><li>IOPS </li></ul></ul><ul><ul><li>吞吐量 </li></ul></ul><ul><ul><li>延迟时间 </li></ul></ul><ul><li>存储测试工具 </li></ul><ul><ul><li>Oracle Orion </li></ul></ul><ul><ul><li>Oracle calibration_io(11g) </li></ul></ul><ul><li>测试方案 </li></ul><ul><ul><li>小 IO 测试 IOPS </li></ul></ul><ul><ul><li>大 IO 测试吞吐量 </li></ul></ul>
  7. 7. 磁盘性能分析 <ul><li>IOPS </li></ul><ul><ul><li>转速,寻道延时, </li></ul></ul><ul><li>吞吐量 </li></ul><ul><ul><li>转速,接口类型,内部 / 接口传输率 </li></ul></ul>
  8. 8. 存储性能分析 <ul><li>IOPS </li></ul><ul><ul><li>磁盘数量 </li></ul></ul><ul><ul><li>缓存命中率 </li></ul></ul><ul><ul><li>存储划分 </li></ul></ul><ul><li>吞吐量 </li></ul><ul><ul><li>端口数量 </li></ul></ul><ul><ul><li>系统架构 </li></ul></ul><ul><ul><li>串行 - 并行 </li></ul></ul>
  9. 9. 正确使用存储 <ul><li>存储层 </li></ul><ul><ul><li>存储架构 </li></ul></ul><ul><ul><li>存储划分 </li></ul></ul><ul><ul><li>Raid 类型 </li></ul></ul><ul><li>OS 层 </li></ul><ul><ul><li>LVM </li></ul></ul><ul><li>数据库 </li></ul><ul><ul><li>Raw device </li></ul></ul><ul><ul><li>File system </li></ul></ul><ul><ul><li>ASM </li></ul></ul>
  10. 10. 硬件容量模型 <ul><li>主机 </li></ul><ul><ul><li>TPC-C </li></ul></ul><ul><ul><li>CPU 使用率 </li></ul></ul><ul><ul><li>每秒逻辑读 </li></ul></ul><ul><li>存储 </li></ul><ul><ul><li>IOPS </li></ul></ul><ul><ul><li>吞吐量 </li></ul></ul><ul><ul><li>响应时间 </li></ul></ul><ul><ul><li>性能拐点 </li></ul></ul><ul><li>硬件容量模型是容量规划的前提 </li></ul>
  11. 11. 数据库性能模型
  12. 12. 响应时间为中心的优化方法 <ul><li>优化的目标是降低响应时间 </li></ul><ul><ul><li>响应时间是用户体验第一要素 </li></ul></ul><ul><ul><li>响应时间是性能问题的直接表现 </li></ul></ul><ul><li>影响数据库响应时间的因素 </li></ul><ul><ul><li>CPU </li></ul></ul><ul><ul><li>IO </li></ul></ul><ul><ul><li>Memory </li></ul></ul><ul><ul><li>Network </li></ul></ul>
  13. 13. 关键设备的响应延迟 L1 cache reference 0.5 ns Branch mispredict 5 ns L2 cache reference 7 ns Mutex lock/unlock 25 ns Main memory reference 100 ns Compress 1K bytes with Zippy 3,000 ns Send 2K bytes over 1 Gbps network 20,000 ns Read 1 MB sequentially from memory 250,000 ns Round trip within same datacenter 500,000 ns Disk seek 10,000,000ns Read 1 MB sequentially from disk 20,000,000ns Send packet CA->Netherlands->CA 150,000,000ns 1s=1000ms=1000000us=1000000000ns * 数据来自于 Google Jeff Dean 的资料
  14. 14. ORACLE 时间模型 <ul><li>服务时间 </li></ul><ul><ul><li>后台进程 </li></ul></ul><ul><ul><li>前台进程 </li></ul></ul><ul><li>等待时间 </li></ul><ul><ul><li>IO 等待 </li></ul></ul><ul><ul><li>并发等待 </li></ul></ul><ul><li>SQL 执行时间 </li></ul><ul><ul><li>服务时间 + 等待时间 </li></ul></ul><ul><li>用户响应时间 </li></ul><ul><ul><li>SQL 执行时间 + 网络传输 </li></ul></ul>
  15. 15. ORACLE 中的时间信息 <ul><li>SQL exetute time </li></ul><ul><li>SQL 服务时间 + 等待时间 </li></ul><ul><li>DB CPU </li></ul><ul><li>CPU 资源的消耗量 </li></ul><ul><li>DB TIME </li></ul><ul><li>前台进程消耗时间的总和 </li></ul>
  16. 16. AWR 等待时间分类 <ul><li>DB CPU </li></ul><ul><ul><li>logical read </li></ul></ul><ul><li>User IO </li></ul><ul><ul><li>sequential read </li></ul></ul><ul><ul><li>scattered read </li></ul></ul><ul><li>Commit </li></ul><ul><ul><li>log file sync </li></ul></ul><ul><li>Concurrency </li></ul><ul><ul><li>latch </li></ul></ul><ul><ul><li>buffer busy waits </li></ul></ul><ul><ul><li>library cache lock/pin </li></ul></ul><ul><li>Application </li></ul><ul><ul><li>enqueue </li></ul></ul>
  17. 17. 数据库 IO 特点分析 <ul><li>日志文件顺序写 </li></ul><ul><ul><li>同步写入 </li></ul></ul><ul><ul><li>连续位置的随机 IO </li></ul></ul><ul><ul><li>响应延时 <5ms </li></ul></ul><ul><li>数据文件读写 </li></ul><ul><ul><li>异步写入 </li></ul></ul><ul><ul><li>随机读与顺序读 </li></ul></ul><ul><ul><li>响应延时 <10ms </li></ul></ul><ul><li>瓶颈分析 </li></ul><ul><ul><li>IOPS :小 IO ,数据文件随机读,随机写,日志文件写 </li></ul></ul><ul><ul><li>吞吐量:大 IO ,数据文件连续读 </li></ul></ul>
  18. 18. 物理 IO 响应时间 <ul><li>Cache 对物理 IO 响应的影响 </li></ul><ul><li>Sequential read 与 Scattered read </li></ul><ul><li>Log file sync 与 log file parallel write </li></ul>
  19. 19. 逻辑 IO 响应时间 <ul><li>逻辑读是性能度量的重要指标 </li></ul><ul><ul><li>衡量 SQL 所耗费的系统资源 </li></ul></ul><ul><ul><li>包含 CPU ,物理 IO…… </li></ul></ul><ul><li>逻辑 IO 的响应延时 </li></ul>204800 5us 逻辑 IO ,单块读 2GHz CPU 102400 10us 逻辑 IO ,单块读 1GHz CPU 50000 20us 逻辑 IO ,单块读 500MHz CPU 每秒处理次数 响应延迟 事件名称
  20. 20. 数据库类型与响应时间 <ul><li>CPU 密集型 </li></ul><ul><ul><li>CPU time   85% </li></ul></ul><ul><ul><li>User IO     10% </li></ul></ul><ul><ul><li>Logical IO : 0.005 - 0.01ms </li></ul></ul><ul><li>混合型 </li></ul><ul><ul><li>User I/O     60% </li></ul></ul><ul><ul><li>CPU time    20% </li></ul></ul><ul><ul><li>Logical IO : 0.05 - 0.1ms </li></ul></ul><ul><li>IO 密集型 </li></ul><ul><ul><li>User IO     85% </li></ul></ul><ul><ul><li>CPU time     5% </li></ul></ul><ul><ul><li>Logical IO : 0.1 - 0.5ms  </li></ul></ul>
  21. 21. 基于响应时间的优化原则 <ul><li>减少物理 IO </li></ul><ul><ul><li>增大 buffer cache </li></ul></ul><ul><ul><li>缓存对象 </li></ul></ul><ul><li>提高 IO 响应 </li></ul><ul><ul><li>Sequential/scattered read </li></ul></ul><ul><ul><li>Log file sync/log file parallel write </li></ul></ul><ul><li>减少并发等待 </li></ul><ul><ul><li>Latch </li></ul></ul><ul><ul><li>Lock </li></ul></ul><ul><li>减少逻辑 IO </li></ul><ul><ul><li>SQL 优化 </li></ul></ul>
  22. 22. 消除热点 <ul><li>消除存储热点 </li></ul><ul><ul><li>数据分散在更多磁盘上 </li></ul></ul><ul><ul><li>redo log 单独存放 </li></ul></ul><ul><ul><li>减少 checkpoint 次数 </li></ul></ul><ul><li>消除数据库热点 </li></ul><ul><ul><li>latch:cache buffer chain </li></ul></ul><ul><ul><li>library cache pin </li></ul></ul><ul><ul><li>buffer busy wait </li></ul></ul><ul><li>消除应用热点 </li></ul><ul><ul><li>enqueue TX </li></ul></ul><ul><ul><li>数据密集修改 / 查询 </li></ul></ul>
  23. 23. 容量规划与风险预测
  24. 24. 容量规划 <ul><li>主机容量 </li></ul><ul><ul><li>DB CPU TIME < 主机 CPU 数量 × 时间 </li></ul></ul><ul><ul><li>逻辑 IO 数量 < 主机容量 </li></ul></ul><ul><ul><li>CPU 利用率分析: </li></ul></ul><ul><ul><ul><li>Load </li></ul></ul></ul><ul><ul><ul><li>Sys </li></ul></ul></ul><ul><ul><ul><li>User </li></ul></ul></ul><ul><ul><ul><li>IO </li></ul></ul></ul><ul><li>存储容量 </li></ul><ul><ul><li>物理 IO 数量 < 存储容量 </li></ul></ul><ul><ul><li>物理 IO 响应时间 </li></ul></ul>
  25. 25. 其他风险因素 <ul><li>数据库 </li></ul><ul><ul><li>除 IO 以外的等待时间小于 5% </li></ul></ul><ul><ul><li>CPU 消耗 </li></ul></ul><ul><ul><ul><li>Hard parse </li></ul></ul></ul><ul><ul><ul><li>Latch spin </li></ul></ul></ul><ul><ul><ul><li>Shared pool </li></ul></ul></ul><ul><ul><ul><li>频繁函数调用 </li></ul></ul></ul><ul><ul><ul><li>大量逻辑读 </li></ul></ul></ul><ul><li>主机 </li></ul><ul><ul><li>硬件性能拐点 </li></ul></ul><ul><ul><li>内存使用量过度 </li></ul></ul><ul><ul><li>硬件损坏,性能降级 </li></ul></ul>
  26. 26. 软硬件发展方向 <ul><li>硬件技术发展 </li></ul><ul><ul><li>CPU 性能巨大飞跃 </li></ul></ul><ul><ul><li>SMP , NUMA , MPP </li></ul></ul><ul><ul><li>Flash 存储技术 </li></ul></ul><ul><li>软件架构改进 </li></ul><ul><ul><li>集中式 - 分布式 </li></ul></ul><ul><ul><ul><li>Scale up-Scale out </li></ul></ul></ul><ul><ul><li>Disk based-SSD based </li></ul></ul><ul><li>未来发展趋势 </li></ul><ul><ul><li>高密度多核 CPU </li></ul></ul><ul><ul><li>SSD 大规模普及 </li></ul></ul><ul><ul><li>大型软硬件一体机 </li></ul></ul>
  27. 27. Q&A <ul><li>blog : www.HelloDBA.net </li></ul><ul><li>email : [email_address] </li></ul><ul><li>twitter : hellodba </li></ul><ul><li>技术领域:数据库高可用,分布式架构 </li></ul>

×