Microsoft SQL Server性能调校

来源:互联网 发布:linux mediainfo 命令 编辑:程序博客网 时间:2024/04/27 19:14
  • 转.. 
  •  【书名 】:Microsoft SQL Server性能调校 
  • 【出版社 】:电子工业出版社 
  • 【作者 】:胡百敬 
  • 【评价 】:★★★☆☆☆☆☆☆☆ 

【正文 】: 

0001: 判断力。

 

0002: 技术可以教,而艺术不能教。

 

0003: 性能问题的症结通常不是表象所显示出来的。从不同的方面去看,往往会有不同的解释。最简单的例子,当你看到CPU很忙,长时间处于百分之百的使用率,可能直觉就是CPU性能不足。但其实可能是硬盘性能不足,或是内存容量不够,让CPU一直忙于I/O。

 

0004: 要有好的开发团队绝非一蹴而就,需要有长时间的培养,每个成员都有充足的培训训练,彼此有充分的合作默契,如此才能产生出有效的系统。

 

0005: 数据库不应该让前端程序代码直接存取数据表,而要通过视图,存储过程或用户自定义函数来存储,这样可以提高数据表重新设计的自由度。

 

0006: 做性能调校的第一项工作应该是建立性能的基线,它可能代表着调校前系统的各种数据,或是用户希望达到的基本目标值,也可能是昔日系统正常运行时的某些数据值。基线就是用来做比较的,任何性能调校的动作都应该是做数据的比较,不要诉诸情绪。

 

0007: 成本意识。

 

0008: 事前的整体评估很重要。

 

0009: 最怕的就是像无头苍蝇盲目的错误尝试(trial and error)。0010: 判断专业与否就是看你是否可以立刻问到重点,而不是来来回回,反反复复问相同的问题。

 

0011: 若无法简明的描述问题,代表你尚不了解问题,或者是没有抓到重点。

 

0012: 最早开始的,最晚结束。

 

0013: 谋定而后动。

 

0014: 花现在的时间可以节省未来的时间(spend time now to save time later)。

 

0015: 压垮骆驼的最后一根稻草。

 

0016: 头痛医头,脚痛医脚。

 

0017: 虽然我们要三思而行,但你依然要顾及到用户的感受,否则迟迟没有行动,甚至是搜集了太多的信息反而不知道从哪里开始,用户在找你一段时间之后仍不见改善,会失去耐心。因此你要在取得信息、信息分析、构想计划、谨慎执行、反省接口,以及安抚用户中取得平衡,这是很困难的一件事。

 

0018: 尽量不要让数据库的文件与操作系统交换文件放在同一个物理硬盘上,这样容易抢硬盘。

 

0019: “事件探查器”可以用来跟踪SQL语句的执行情况,包括执行时的各种数据。

 

0020: DBCC:Database Console Command

 

0021: 同步服务器与计算机的时间:net time //服务器IP /set0022: 清除共享连接:net use * /del

 

0023: UNION ALL:不删除重复行,UNION的列中可以是大数据类型。 UNION:删除重复行,UNION的列中不能是text、image等大数据类型。

 

0024: 大量批处理数据操作时,若采用没有log行为一定比逐条数据由两次写入,先记录log后再写到数据库的操作为快;因此将数据放入到新的数据表,SELECT...INTO一定比逐条做INSERT快;清空数据表TRUNCATE TABLE也一定比DELETE快。

 

0025: 调用存储过程时,如果指定了存储过程的所有者,则能节省搜索存储过程的时间。

 

0026: 列出当前数据中各数据表的数据量:

 

 

0027: Northwind..sp_Rebuild:注意..是不能省略一个的(数据库名..对象名)

 

 

0028: 重新建立索引:DBCC DBREINDEX([tblA])

 

0029: 一般来说,存储过程会放在某个用户自定义的数据库中,供使用该数据库数据的连接可以存取,或是命名存储过程时,以“SP_”开头放在master系统数据库中,则所有的用户不管连接落在哪一个数据库,都可以调用(注意,并不是以“SP_”就是全局存储过程,还必须放在master数据库中)。

 

0030: 假设客户数据表中有一百万记录,而我们需要找寻: SELECT * FROM Customer WHERE CustomerID = 1 若没有索引,则需要比较一百万次,若有以CustomerID字段建立的索引,则因为索引键值数据都必定以B-Tree结构有顺序的摆放,所以可采用二分查找法找数据。也就是2的n次方大于记录数,就可以找到该笔数据。而2的20次方大于一百万,因此最多20次查找就能找到。索引和非索引的性能的差距就非常大了。

 

0031: 选择性:代表符合你查询条件的记录占总记录的百分比。选择性越高(也就是这个比例越小),越适合采用索引。在选择性比较低的时候,通过非聚集索引存储是非常没有效率的存储方式,还不如直接做数据表扫描。

 

0032: 在连接两个表时,选择性高的数据库适合做内表,选择性低的适合做外表。

 

0033: 视图也可以建立索引,但是必须先有一个聚集索引,才能建立非聚集索引。且删除聚集索引的时候,同时删除非聚集索引。

 

0034: 含有不确定数值的列(视图中),不能建立索引,例如有GetDate()函数的列。

 

0035: 执行事务之前,应该先设置锁超时(防止死锁): SET LOCK_TIMEOUT 500 --单位是ms

 

0036: 要有习惯重新察看原先的代码,才能精益求精。

 

0037: 重构是提高的很好方式。

 

0038: 在开发过程中就应当考虑性能问题,而不是马后炮。

 

0039: sp_executesql存储过程与EXECUTE语法的功能相似。但sp_executesql可以缓存执行计划,供多人使用,性能会高一些。