Tony.He , http://weibo.com/taozhuy 早期从事嵌入式开发 及山寨通信产品 目前从事网络开发及团队管理
Sql Server  优化工作点 <ul><li>性能分析 </li></ul><ul><ul><li>应用程序 </li></ul></ul><ul><ul><li>数据库设计 </li></ul></ul><ul><ul><li>Sql ...
系统性能分析工具 <ul><li>性能监视器工具 </li></ul><ul><ul><li>Performance Monitor ( windows 2008 servers  自带) </li></ul></ul><ul><ul><li>...
系统性能分析工具 <ul><li>动态管理视图( DMV )和动态管理函数( DMF ) </li></ul><ul><ul><li>Sys.dm_os_performance_counters </li></ul></ul><ul><li>示...
内存性能分析 <ul><li>内存性能计数器 </li></ul><ul><ul><li>Available bytes ( 系统中的空闲物理内存) </li></ul></ul><ul><ul><li>Page/Sec ( 每秒从磁盘读写以解...
内存性能优化配置 <ul><li>增加系统内存 </li></ul><ul><li>更换系统为 64 位 CPU </li></ul><ul><li>启用 3GB 进程空间 </li></ul><ul><li>在 32 位系统中使用 4GB 以...
磁盘性能分析 <ul><li>%Disk Time  磁盘繁忙时间百分比 </li></ul><ul><li>Current Disk Queue Length  当前磁盘队列长度 </li></ul><ul><li>Avg. Disk Que...
磁盘性能优化 <ul><li>使用更快的磁盘驱动器 </li></ul><ul><li>使用 RAID 阵列 </li></ul><ul><li>使用 SAN 系统 </li></ul><ul><li>对齐磁盘(关键是对齐分区) </li></...
处理器性能分析 <ul><li>%processor Time  处理器繁忙百分比 </li></ul><ul><li>%privileged Time  特权模式时间百分比 </li></ul><ul><li>Processor queue ...
处理器瓶颈优化 <ul><li>优化应用程序工作负载 </li></ul><ul><li>消除或减少过多的编译重编译 </li></ul><ul><li>使用更快的 CPU </li></ul><ul><li>使用大的二级或三级缓冲 </li>...
Sql 查询性能分析 <ul><li>使用 Sql Profiler 工具 </li></ul><ul><li>跟踪( sp_trace_create) </li></ul><ul><li>事件 (sp_trace_setevent) </li...
识别开销大的查询 <ul><li>单次执行开销大 </li></ul><ul><li>多次执行开销大 </li></ul><ul><li>运行缓慢 </li></ul>
SqlSever 性能杀手 <ul><li>低质量的索引 </li></ul><ul><li>不精确的统计 </li></ul><ul><li>过多的阻塞和死锁 </li></ul><ul><li>不基于数据集的操作 </li></ul><ul...
Upcoming SlideShare
Loading in …5
×

Sql优化

5,419 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,419
On SlideShare
0
From Embeds
0
Number of Embeds
3,634
Actions
Shares
0
Downloads
9
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • 特权模式时间百分比过高意味正在进行大量 IO 操作,一般建议不超过 5%-10%
  • Sql优化

    1. 1. Tony.He , http://weibo.com/taozhuy 早期从事嵌入式开发 及山寨通信产品 目前从事网络开发及团队管理
    2. 2. Sql Server 优化工作点 <ul><li>性能分析 </li></ul><ul><ul><li>应用程序 </li></ul></ul><ul><ul><li>数据库设计 </li></ul></ul><ul><ul><li>Sql Server </li></ul></ul><ul><ul><li>OS </li></ul></ul><ul><ul><li>硬件 </li></ul></ul>先分析 Sql Server 效率低下的瓶颈所在,再决定工作重点
    3. 3. 系统性能分析工具 <ul><li>性能监视器工具 </li></ul><ul><ul><li>Performance Monitor ( windows 2008 servers 自带) </li></ul></ul><ul><ul><li>监视系统的硬件和软件,如处理器、进程、线程的性能数据,由此跟踪资源状态 </li></ul></ul><ul><ul><li>在 cmd 命行键入 perfmon 执行监视器 </li></ul></ul><ul><ul><li>或者右键我的电脑展开诊断,然后展开可靠性和性能监视器 </li></ul></ul>
    4. 4. 系统性能分析工具 <ul><li>动态管理视图( DMV )和动态管理函数( DMF ) </li></ul><ul><ul><li>Sys.dm_os_performance_counters </li></ul></ul><ul><li>示例 </li></ul><ul><ul><li>Select top (10) *from sys.dm_os_wait_stats </li></ul></ul><ul><ul><li>order by wait_time_ms desc </li></ul></ul><ul><ul><li>通过这种分析工具判断硬件资源上的瓶颈 </li></ul></ul><ul><ul><li>内存、 IO 、处理器、网络 </li></ul></ul>
    5. 5. 内存性能分析 <ul><li>内存性能计数器 </li></ul><ul><ul><li>Available bytes ( 系统中的空闲物理内存) </li></ul></ul><ul><ul><li>Page/Sec ( 每秒从磁盘读写以解决硬页面错误的次数) </li></ul></ul><ul><ul><ul><li>Pages input/sec Pages output/sec </li></ul></ul></ul><ul><ul><li>Page Fault/Sec( 每秒处理的总页面错误数量—硬页面错误加上软页面错误) </li></ul></ul><ul><ul><li>Buffer cache hit ratio 缓冲区请求百分比 </li></ul></ul><ul><ul><li>Page life expectancy 页面在缓冲中花费的时间 </li></ul></ul><ul><ul><li>Target Server Memory 当前 SQL 所能消费的最大物理内存 </li></ul></ul><ul><ul><li>Total Server Memory 当前分配给 sql 的物理内存 </li></ul></ul>
    6. 6. 内存性能优化配置 <ul><li>增加系统内存 </li></ul><ul><li>更换系统为 64 位 CPU </li></ul><ul><li>启用 3GB 进程空间 </li></ul><ul><li>在 32 位系统中使用 4GB 以上内存 </li></ul><ul><li>在 boot.ini 中增加相应开关 </li></ul><ul><li>使用 Sp_configure 为分配更多内存或优化相关配置 </li></ul><ul><li>比如: sp_configure ‘max server memory’,5120 </li></ul><ul><li>reconfigure </li></ul><ul><li>go </li></ul>
    7. 7. 磁盘性能分析 <ul><li>%Disk Time 磁盘繁忙时间百分比 </li></ul><ul><li>Current Disk Queue Length 当前磁盘队列长度 </li></ul><ul><li>Avg. Disk Queue Length </li></ul><ul><li>Disk Transfer/sec 磁盘读写操作速率 </li></ul><ul><li>Disk Bytes/sec 每秒每个磁盘数据传输量 </li></ul><ul><li>Avg. Disk Sec/Read 磁盘读速度 </li></ul><ul><li>Avg. Disk Sec/Write 写速度 </li></ul>
    8. 8. 磁盘性能优化 <ul><li>使用更快的磁盘驱动器 </li></ul><ul><li>使用 RAID 阵列 </li></ul><ul><li>使用 SAN 系统 </li></ul><ul><li>对齐磁盘(关键是对齐分区) </li></ul><ul><li>使用电池后备的控制器缓存 </li></ul><ul><li>添加系统内存 </li></ul><ul><li>创建多个文件和文件组 </li></ul><ul><li>将表和索引放在不同的磁盘上 </li></ul><ul><li>将日志保存在独立的物理磁盘 </li></ul><ul><li>将表分区 </li></ul>
    9. 9. 处理器性能分析 <ul><li>%processor Time 处理器繁忙百分比 </li></ul><ul><li>%privileged Time 特权模式时间百分比 </li></ul><ul><li>Processor queue length </li></ul><ul><li>Context Switches/sec 上下文切换速度 </li></ul><ul><li>Batch requests/sec 每秒 sql 命令批数 </li></ul><ul><li>SQL Compilations/sec 每秒 SQL 编译次数 </li></ul><ul><li>SQL RECompilations/sec 每秒 SQL 重编译次数 </li></ul>
    10. 10. 处理器瓶颈优化 <ul><li>优化应用程序工作负载 </li></ul><ul><li>消除或减少过多的编译重编译 </li></ul><ul><li>使用更快的 CPU </li></ul><ul><li>使用大的二级或三级缓冲 </li></ul><ul><li>使用更高效的驱动程序 </li></ul><ul><li>停掉不必要的软件 </li></ul>
    11. 11. Sql 查询性能分析 <ul><li>使用 Sql Profiler 工具 </li></ul><ul><li>跟踪( sp_trace_create) </li></ul><ul><li>事件 (sp_trace_setevent) </li></ul><ul><li>事件用不同的数据列来展现 </li></ul><ul><li>过滤器 (sp_trace_setfilter) </li></ul><ul><li>跟踪模板 </li></ul><ul><li>自动化跟踪 </li></ul>
    12. 12. 识别开销大的查询 <ul><li>单次执行开销大 </li></ul><ul><li>多次执行开销大 </li></ul><ul><li>运行缓慢 </li></ul>
    13. 13. SqlSever 性能杀手 <ul><li>低质量的索引 </li></ul><ul><li>不精确的统计 </li></ul><ul><li>过多的阻塞和死锁 </li></ul><ul><li>不基于数据集的操作 </li></ul><ul><li>低质量的查询设计 </li></ul><ul><li>过多的碎片 </li></ul><ul><li>不可重用的执行计划 </li></ul><ul><li>低质量的执行计划 </li></ul><ul><li>频繁重编译计划 </li></ul><ul><li>游标的不当使用 </li></ul><ul><li>错误配置日志 </li></ul><ul><li>不当使用临时表 </li></ul>

    ×