SQL性能调优概要1.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SQL性能调优概要1

SQL 性能调优;Agenda;我又要买硬件了?;谁动了我的数据库?;影响SQL性能的因素;;现在SQL服务器在干啥?;SQL最近一周还好吗?;我金光闪闪的SQL语句怎么这么慢?;武器架;性能计数器 SQL Server Profier DMV 统计信息 执行计划;SQL server OS;跑起来;Scheduler: 相当于SQL server中的CPU Worker: 相当于thread;SQL Server数据存储;页结构;Database Caching;检查系统资源瓶颈;From the system point: there is no difference between SQL Server and other application.;内存;SQLServer:Buffer Manager – Lazy writes/sec SQL Server:Buffer Manager – Page Life expectancy SQL Server:Buffer Manager – Page reads/sec ;CPU;硬盘Input/output;网络;结论;利其器:查看SQL 语句执行过程;;聚集索引和非聚集索引;聚集索引存储;非聚集索引存储;无索引查找;堆表中使用非聚集索引查找;聚集索引查找;聚集+非聚集索引查找;从索引的角度来看,怎样判断一条查询语句的好坏?;统计信息;SQL语句执行过程;DEMO:从Sys.syscacheobjects查询;防止重编译和执行计划重用;Comments:;其他SQL语法注意事项:;Use join 代替exists SELECT?ENAME??FROM?EMP?E???WHERE?EXISTS?(SELECT?’X’???FROM?DEPT???WHERE?DEPT_NO?=?E.DEPT_NO?AND?DEPT_CAT?=?’A’);??(incorrect) SELECT?ENAME???FROM?DEPT?D,?EMP?E??WHERE?E.DEPT_NO?=?D.DEPT_NO?? AND?DEPT_CAT?=?’A’;??(correct) Use exists 代替distinct ?SELECT?DISTINCT?DEPT_NO,?DEPT_NAME??FROM?DEPT?D,?EMP?E???WHERE?D.DEPT_NO?=?E.DEPT_NO??(incorrect) ?SELECT?DEPT_NO,?DEPT_NAME???FROM?DEPT?D???WHERE?EXISTS?(SELECT?’X’???FROM?EMP?E?? ?WHERE?E.DEPT_NO?=?D.DEPT_NO);??(correct) 不要在SQL语句中使用数据类型转换!! DATEDIFF(DAY,LogTime,2012-01-01)=0(incorrect!!!) 除非极端情况,不要使用游标!! ;锁和阻塞;可重复读(REPEATABLE READ) 指定语句不能读取已由其他事务修改但尚未提交的行,并且指定,其他任何事务都不能在当前事务完成之前修改由当前事务读取的数据。 在这个隔离级别上,对事务中的每个语句所读取的全部数据都设置了共享锁,并且该共享锁一直保持到事务完成为止。这样可以防止其他事务修改当前事务读取的任何行。其他事务可以插入与当前事务所发出语句的搜索条件相匹配的新行。如果当前事务??后重试执行该语句,它会检索新行,从而产生幻读。 由于共享锁一直保持到事务结束,而不是在每个语句结束时释放,所以并发性低于默认的 READ COMMITTED 隔离级别。此选项只在必要时使用。 ?可序列化(SERIALIZABLE) 可序列化的要求是: 语句不能读取已由其他事务修改但尚未提交的数据。 任何其他事务都不能在当前事务完成之前修改由当前事务读取的数据。 在当前事务完成之前,其他事务不能使用当前事务中任何语句读取的键值插入新行。 SQL Server通过加范围锁的方式来实现可序列化。范围锁处于与事务中执行的每个语句的搜索条件相匹配的键值范围之内。这样可以阻止其他事务更新或插入任何行,从而限定当前事务所执行的任何语句。这意味着如果再次执行事务中的任何语句,则这些语句便会读取同一组行。在事务完成之前将一直保持范围锁。 这是限制最多的隔离级别,因为它锁定了键的整个范围,并在事务完成之前一直保持范围锁。因为并发级别最低,所以应只在必要时才使用该选项。该选项的作用与在事务内所有 SELECT 语句中的所有表上设置 HOLDLOCK 相同。 ;隔离级别 ;避免死锁的建议:;DMV视图:;应用层:数据访问级别优化;总结;Thank you!

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档