博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql server08 查询优化系列 1
阅读量:4982 次
发布时间:2019-06-12

本文共 893 字,大约阅读时间需要 2 分钟。

sql server 性能杀手:

  • 低质量的索引
  • 不精确的统计
  • 过多的阻塞和死锁
  • 不基于数据集的操作,通常是 游标
  • 低质量的查询设计
  • 低质量的数据库设计
  • 过多的碎片
  • 不可重用的执行计划
  • 低质量的查询计划,通常是因为 参数嗅探 所导致的。
  • 执行计划频繁重编译
  • 游标的错误使用
  • 数据库日志的错误配置
  • 过多使用或者错误配置 tempdb

阻塞和死锁:

因为sql server 的 ACID特性,所以数据库引擎确保并发事务 被正确的互相隔离.

默认情况下,一个是所看见的数据 是另一个事务修改之前或之后的状态--不会看到中间状态的.

 

因为这种隔离性,当多个事务尝试 以一种不兼容的方法 并发访问公共资源时,数据库中发生阻塞.

当两个资源尝试升级或者拓展加锁的资源并且与另一个冲突时,就会发生死锁.

查询引擎确定回滚开销最低的进程 并选择 其为 死锁牺牲品.

为了得到可伸缩的多用户数据库应用程序性能,正确地空值查询的隔离级别和 事务范围 以最小化 阻塞和死锁是很关键的.

 

数据集:

t-sql是一种基于数据集的脚本语言,意味着他在数据集上操作.这就强迫你 从列的方面而不是从行的方面考虑.

不基于数据集的思路导致 过多的使用游标 和循环 而不是研究更有效的 连接和子查询,

 

低质量的查询设计:

索引的有效性完全取决于 查询的方法.

 

低质量的数据库设计

数据库应该充分的规范化以增加数据检索的性能并减少阻塞.

例如 有一个不规范的数据库, 将客户订单和客户信息存储在一张表里. 那么客户信息 在所有客户订单上都要重复.

这将 增加读取 客户订单 的I/O操作,  于此同时, 当 添加 插入一个订单时,因为订单包含客户信息,那么僵组织其他数据

写入程序/读取程序 访问这些客户的资料.

过分的规范化,也是不行的.将产生过多的 连接查询,

过多的碎片

如果 数据页 包含了 不按顺序的碎片,或者由于频繁页面分割而包含少量的数据,那么数据检索操作 将会扫描更多的页面.

转载于:https://www.cnblogs.com/Mr-Joe/archive/2012/05/11/2495457.html

你可能感兴趣的文章