资源描述
SQLSQL也许能跑得更快也许能跑得更快SQL语句优化SQL Server的构成T-SQL语句的执行过程评估T-SQL数据库负载的关键指标索引对查询的影响查看并利用T-SQL的执行计划常见的SQL效率杀手目录目录SQL Server的构成T-SQL语句的执行过程评估T-SQL数据库负载的关键指标索引对查询的影响查看并利用T-SQL的执行计划常见的SQL效率杀手目录目录SQL ServerSQL Server的构的构成成SQL ServerSQL ServerSQL ServerSQL Server的构成的构成的构成的构成数据库引擎关系引擎查询优化器数据库管理器命令解析器SQL管理器查询执行器SNI协议层存储引擎事务管理器存取方法-行操作索引页面版本分配缓冲区管理器-执行计划缓冲区数据缓冲区缓冲池死锁监视器资源管理器延迟写入器调度器监视器SQL OS内存管理器调度服务同步锁管理器I/OSQL OS:向操作系统申请内存,分配、调度资源、管理进程和线程以及同步对象。协议层:主要负责向应用程序提供访问SQL SERVER的接口。关系引擎:负责向存储引擎请求数据时查询的执行,并处理返回的结果。存储引擎:负责向存储引擎请求数据时查询的执行,并处理返回的结果。APPDBOSSQL Server的构成T-SQL语句的执行过程评估T-SQL数据库负载的关键指标索引对查询的影响查看并利用T-SQL的执行计划常见的SQL效率杀手目录目录T-SQLT-SQL的执行过程的执行过程关系引擎查询优化器数据库管理器命令解析器SQL管理器查询执行器SNI协议层存储引擎事务管理器存取方法-行操作索引页面版本分配缓冲区管理器-执行计划缓冲区数据缓冲区缓冲池死锁监视器资源管理器延迟写入器调度器监视器SQL OS内存管理器调度服务同步锁管理器I/OAPPDBOSSQL Server的构成T-SQL语句的执行过程评估T-SQL数据库负载的关键指标索引对查询的影响查看并利用T-SQL的执行计划常见的SQL效率杀手目录目录评估评估评估评估T-SQLT-SQLT-SQLT-SQL数据库负载的关键指标数据库负载的关键指标数据库负载的关键指标数据库负载的关键指标内存Page/Sec负载高服务器内存2GBSQL内部内存压力服务器内存=服务目标内存激活内存扩展优化应用程序或升级内存打开PAE开关可用内存高高级内存管理已经设置MSSQL最大内存服务器内存服务目标内存提高服务最大内存打开/3GB,/AWE,/PAE你就慢慢爽吧!NOYESYESYESYESYESYESYESYESNONONONO评估评估评估评估T-SQLT-SQLT-SQLT-SQL数据库负载的关键指标数据库负载的关键指标数据库负载的关键指标数据库负载的关键指标监控指标n%Disk Time:磁盘的平均繁忙时间(85%)nCurrent Disk Queue Length:当前硬盘的队列(2)nAvg.Disk Queue Length:平均硬盘队列(2)nDisk Transfers/sec:每秒读写操作(100)nDisk Bytes/sec:每秒读写数量(10M)nAvg.Disk Sec/Read:平均每次读时间(10)nAvg.Disk Sec/write:平均每次写时间(10)硬盘I/O解决之道n优化应用程序负载n磁盘阵列n加入缓存n使用更快的磁盘n为一个数据库添加多个文件或文件组n将表与索引存在不同的磁盘上n将日志文件存在不同的磁盘上、n使用表分区n加入表压缩机制n调整磁盘的分配单元大小n为服务器添加内存nSAN(Storage area networks)File System评估评估评估评估T-SQLT-SQLT-SQLT-SQL数据库负载的关键指标数据库负载的关键指标数据库负载的关键指标数据库负载的关键指标监控指标nProcessor:%Processor Time:处理器处于繁忙的百分比(80%)nProcessor:%Privileged Time:处理器处理特权时间的百分比(10%)nSystem:Processor Queue Length:请求排队数(2)nSystem:Context Switches/Sec:进程切换的时间(1000)nSQL SERVER:SQL Statistics:Batch Requests/Sec:每秒向SQL Server发起的请求nSQL Server:SQL Statistics:Batch Compilations/Sec:每秒编译的请求nSQL Server:SQL Statistics:Batch Recompilations/Sec:每秒重新编译的请求CPU解决之道n优化应用程序负载n减小编译的次数n增加处理器数量n使用更快的处理器n使用更大的L2/L3缓存n不要运行不需要的软件n提高SQL Server进程的优先级评估评估评估评估T-SQLT-SQLT-SQLT-SQL数据库负载的关键指标数据库负载的关键指标数据库负载的关键指标数据库负载的关键指标监控指标nNetwork Interface:Bytes Total/Sec:网卡每秒传输的字节(平均值网卡能力/2)nNetwork Segment:%Net utilization:网段中网络平均繁忙时间(0 and t_a_cityarea_id0 and ta.t_a_cityarea_id0 and ta.t_a_cityarea_id0 and t_a_cityarea_id2011-11-1select bt.name,bs.name,isnull(allowselltime,isnull(opentime,bt.updatetime)from t_p_batchinfo btinner join t_p_baseinfo bs on bt.t_p_baseinfo_id=bs.t_p_baseinfo_idwhereisnull(allowselltime,isnull(opentime,bt.updatetime)2011-11-1select bt.name,bs.name,isnull(allowselltime,isnull(opentime,bt.updatetime)from t_p_batchinfo btinner join t_p_baseinfo bs on bt.t_p_baseinfo_id=bs.t_p_baseinfo_idwhereallowselltime2011-11-1select COUNT(1)from t_p_rooms where DATEADD(DAY,-1,state2date)2011-11-1and DATEADD(DAY,-1,state2date)DATEADD(DAY,1,2011-11-1)andstate2dateDATEADD(DAY,1,2011-11-30)set statistics profile off在过滤条件中对字段进行计算常见的常见的常见的常见的SQLSQLSQLSQL效率杀效率杀效率杀效率杀手手手手效率过低的Function常见的常见的常见的常见的SQLSQLSQLSQL效率杀效率杀效率杀效率杀手手手手对非数值型字段使用聚合操作常见的常见的常见的常见的SQLSQLSQLSQL效率杀效率杀效率杀效率杀手手手手将业务层的东西强加至数据库常见的常见的常见的常见的SQLSQLSQLSQL效率杀效率杀效率杀效率杀手手手手select name,t_a_cityarea_id from t_p_baseinfowhere t_a_cityarea_id=1unionselect name,t_a_cityarea_id from t_p_baseinfowhere t_a_ring_id=1select name,t_a_cityarea_id from t_p_baseinfowhere t_a_cityarea_id=1union allselect name,t_a_cityarea_id from t_p_baseinfowhere t_a_ring_id=1select name,t_a_cityarea_id from t_p_baseinfowhere t_a_cityarea_id=1 or t_a_ring_id=1 Union对效率的影响禁止使用第一类子查询禁止在字段上进行计算的查询禁止使用NOT操作能用inner join绝不用outer join尽量使用Exists代替in注意分解SQL语句注意创建与维护索引注意观察性能曲线,找到硬件瓶颈注意观察查询计划减少每次查询的数据才是王道总结总结一切理论都是浮云实际的性能调试才是王道如何进行性能调试?请使用查看查询计划!
展开阅读全文