性能优化的重点在于识别定位问题,预先了解主要的性能杀手,能够更快的定位到问题并将工作集中在可能的原因之上。

SQL SERVER性能杀手主要集中在如下几类:

1.1   低质量的索引

低质量的索引通常是SQL SERVER最大的性能杀手,对于一个缺乏索引的查询,SQL SERVER 需要处理大量的读取和计算;这样导致磁盘、内存、CUP上有很大的开销,并且会显著的增加了查询执行时间。

1.2   不精确的统计信息

统计信息是谓词引用的列中的数据分布,其存储的方式为柱状图;柱状图是显示数据分布于不同分类中频度的一种统计结构。索引的有效性完全取决于索引列的统计信息,如有没有统计信息,SQL SERVER 内建的查询优化器就不能精确的估计查询影响的行数,此时查询优化器就非常的低效。

1.3   过多的阻塞与死锁

SQL SERVER 完全兼用于原子性、一致性、隔离性、永久性,所以数据库引擎会确保并发事务被正确的互相隔离。默认情况下,一个事务所看见的数据是另一个事务修改之前或者修改之后的状态—它不会看到中间状态。

因为这种隔离性,当多个事务以一种兼容的方法并发访问公用资源时,数据库中会发生阻塞。当两个资源尝试升级或扩展加锁的资源并且与另一个冲突时,就会发生死锁。查询引擎确定回滚开销最低的进程并选择其为死锁牺牲品。牺牲品需要再次提交请求才能正常执行完成。这就导致开销时间较长。

1.4   不基于数据集的操作

T-SQL是一种数据集的脚本语言,操作数据是在数据集上进行。这需要我们从数据列上考虑问题而不是从数据行上思考问题。避免在操作中使用游标和循环,而是需要多使用连接于子查询。

1.5   低质量的查询设计

索引的有效性取决于编写的SQL 查询语句;如果SQL从一个表中读取了过多的行或者指定的过滤条件返回了超过所需要的大结果集,都将使索引变得无效。为了能更好的使用索引,必须编写高质量的SQL查询语句并做到按需取数。

1.6   低质量的数据库设计

数据库应该合理的规范化以增进数据库检索的性能并减少阻塞。一个不合理的设计会导致数据的重复存储,一个过渡规范化的数据库会导致读取数据所需的连接非常多;一个合理规范化的数据库是高质量查询的基石。

1.7   过多的碎片

数据存储的基本单位是页,由于频繁的页分割使得页中包括了无法存储数据的空白区域称为碎片;碎片会引起读操作次数的增加而影响性能(一次读取的是一个页)。

1.8   不可重用的执行计划

为了有效的执行查询,SQL SERVER 会在编译的时候生成一个优化的执行计划,该执行计划会缓存在内存中,因而其可以重用。但是如果该查询设计为不能插入变量值,相同的查询以不同的变量值重新提交时,SQL SERVER会重新生成新的执行计划,这个过程会耗掉一线性能。因此SQL SERVER 缓存或重用执行计划的方式提交SQL查询会对性能有一定的优化。

1.9   低质量的执行计划

一个不好的执行计划有时可能是一个真正的杀手,不好的计划常常是由被称为参数嗅探的进程造成的,这个进程来自于查询优化器用于根据统计确定最佳计划的过程。理解统计信息是很重要的。

1.10     频繁重编译计划

存储过程的重新编译会导致执行计划的重复生成,该过程很耗费性能,所以一般情况下不要将存储过程设计为重编译。

1.11     游标的错误使用

游标是一种非集合的操作,会给SQL SERVER 增加大量的开销;尽可能使用基于数据集的操作。

1.12     错误配置数据库日志

为了达到最佳的性能,SQL SERVER 很大程度上依赖于对数据库日志的高效访问。因此合理的日志配置方法也很重要。

1.13     过多使用或者错误配置TEMPDB

每一个SQL SERVER 实例都只有一个tempdb,因为涉及用户对象(如临时表与表变量)、系统对象(如游标或用于连接的hash表)的操作,以及排序和行版本控制等操作都使用tempdb数据库,所以tempdb有时候也可能成为一个瓶颈。所有这些操作和其他可能使用的操作都可能导致tempdb中的空间、I/0和争用问题。因此tempdb的正确配置对于查询性能也有较大的影响。

识别SQL Server 性能杀手的更多相关文章

  1. 如何识别SQL Server中的CPU瓶颈

    原文:如何识别SQL Server中的CPU瓶颈 原文出自: http://www.mssqltips.com/sqlservertip/2316/how-to-identify-sql-server ...

  2. 如何识别SQL Server中的IO瓶颈

    原文:如何识别SQL Server中的IO瓶颈 原文出自: http://www.mssqltips.com/sqlservertip/2329/how-to-identify-io-bottlene ...

  3. 影响Sql server性能的因素

    目前本人在看<SQL Server性能调优实战> ,以下内容是本人看书笔记 数据库性能取决于各方面综合因素: 硬件,操作系统,软件 硬件:内存,CPU,磁盘 当服务器的物理内存不足时,会产 ...

  4. SQL Server 性能优化详解

    故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性能表现不错,但随着注册用户的增多,访问速度开始变慢,一些用户开始发来邮件表示抗议,事情变得越来越糟,为了留住用户, ...

  5. 【SQL Server性能优化】运用SQL Server的全文检索来提高模糊匹配的效率

    原文:[SQL Server性能优化]运用SQL Server的全文检索来提高模糊匹配的效率 今天去面试,这个公司的业务需要模糊查询数据,之前他们通过mongodb来存储数据,但他们说会有丢数据的问题 ...

  6. 初涉SQL Server性能问题(4/4):列出最耗资源的会话

    在上3篇文章里,我们讨论了列出反映服务器当前状态的不同查询. 初涉SQL Server性能问题(1/4):服务器概况 初涉SQL Server性能问题(2/4):列出等待资源的会话 初涉SQL Ser ...

  7. 初涉SQL Server性能问题(3/4):列出阻塞的会话

    在 初涉SQL Server性能问题(2/4)里,我们讨论了列出等待资源或正运行的会话脚本.这篇文章我们会看看如何列出包含具体信息的话阻塞会话清单. /************************ ...

  8. 初涉SQL Server性能问题(2/4):列出等待资源的会话

    在初涉SQL Server性能问题(1/4)里,我们知道了如何快速检查服务器实例上正运行的任务数和IO等待的任务数.这个是轻量级的脚本,不会给服务器造成任何压力,即使服务器在高负荷下,也可以正常获得结 ...

  9. SQL Server 性能调优培训引言

    原文:SQL Server 性能调优培训引言 大家好,这是我在博客园写的第一篇博文,之所以要开这个博客,是我对MS SQL技术学习的一个兴趣记录. 作为计算机专业毕业的人,自己对技术的掌握总是觉得很肤 ...

随机推荐

  1. ios调试技巧

    一.概述1.掌握调试技巧,调试技术最基本,最重要的调试手段包括:单步跟踪,断点,变量观察等.单步跟踪(Step)所谓单步跟踪是指一行一行地执行程序,每执行一行语句后就停下来等待指示,这样你就能够仔细了 ...

  2. Linux进程通信之共享内存实现生产者/消费者模式

    共享内存 共享内存是内核为进程创建的一个特殊内存段,它将出现在进程自己的地址空间中,其它进程可以将同一段共享内存连接(attach)到自己的地址空间.这是最快的进程间通信方式,但是不提供任何同步功能( ...

  3. modelsim安装调试

    modelsim,debug:“unable to checkout a viewer license necessary for use of the modelsim graphical user ...

  4. python爬虫(爬取视频)

    爬虫爬视频 爬取步骤 第一步:获取视频所在的网页 第二步:F12中找到视频真正所在的链接 第三步:获取链接并转换成机械语言 第四部:保存 保存步骤代码 import re import request ...

  5. 前端,字体图标,盒子显隐,2d形变,盒子阴影

    ---恢复内容开始--- 字体图标 1.将font-awesome-4.7.0文件夹放入项目内 2.在html head中连接 3.在body中导入 盒子显隐 1.使用高度显隐 <p>-- ...

  6. cs229_part5

    这部分主要补充一些cs229没涉及到,但是实际上非常重要,而且是实际中真正会用的一些算法,即集成学习. 集成学习 问题背景 既然我们已经知道了很多学习算法,这些算法最终会输出一个结果.能不能把这些结果 ...

  7. js php 互调

    1 JS方式调用PHP文件并取得php中的值 举一个简单的例子来说明: 如在页面a.html中用下面这句调用: <! DOCTYPE HTML><html><head&g ...

  8. SQL server游标基本结构

    简单游标遍历数据: BEGIN DECLARE QZ_cursor CURSOR SCROLL FOR /*创建游标*/ SELECT NAME FROM USERINFO/*要遍历的数据*/ OPE ...

  9. 九度oj 题目1467:二叉排序树

    题目描述: 二叉排序树,也称为二叉查找树.可以是一颗空树,也可以是一颗具有如下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均不大于根节点的关键字值:        2. 若右子树 ...

  10. 如果您无法使用Docker的存储库来安装Docker CE

    如果您无法使用Docker的存储库来安装Docker CE,则可以下载.deb适用于您的发行版的 文件并手动安装.每次要升级Docker CE时都需要下载新文件. 转到https://download ...