原文:SQL2005性能分析一些细节功能你是否有用到?

我相信很多朋友对现在越来越大的数据量而感到苦恼,可是总要面对现实啊,包括本人在内的数据库菜鸟们在开发B/S程序时,往往只会关心自己的数据是否正确的查询出来,一旦自己写的程序哪天要花上十秒或者是一分种才会出来,此时就技穷了.如何优化成为菜鸟们的难题.本人不才,最近看了些园友关于数据库优化的文章,觉的有必要总结下,让更多像我一样只关心结果,并不关心质量的朋友少走些弯路.

本文主旨:本文并非大谈高深技术(也没这本事),只是想总结一些数据库性能分析最基本的方法,有时候往往就是这些看似平常的功能能解决大问题.起码我工作三年差点,很少关心这些性能分析方法,我想目前也有很多朋友和我以前一样.

第一: 您在执行SQL的时候是否对下图特别熟悉:图一

一般根据大众分析SQL性能的基本方法:首先是看此SQL的执行IO成本,其次是看执行计划.

图一就是SQL执行时的IO等统计信息.包括本人在内的数据库菜鸟对于这种IO信息一般都不太关注,我们更加关注的时把查询的数据查询出来就OK,至于这些内部的执行情况我们并不关心.以至于在看到园友的相关数据库文章后,就会有如下问题:

Q:你这些信息是从哪得来的,有什么用,各参数都怎么去理解,对我们开发有什么帮助.

要想让SQL把这些IO统计信息显示出来,我们要在执行的SQL前面显示调用如下命令SET STATISTICS IO ON, 本人现在就厚着脸皮贴下MSDN的说明:

定义: SET STATISTICS IO { ON | OFF }如果 STATISTICS IO 为 ON,则显示统计信息。如果为 OFF,则不显示统计信息。如果将此选项设置为 ON,则所有后续的 Transact-SQL 语句将返回统计信息,直到将该选项设置为 OFF 为止。

参数说明:

Table

 表的名称。

 

scan count

 执行的扫描次数。

 

logical reads

 从数据缓存读取的页数。

 

physical reads

 从磁盘读取的页数。

 

read-ahead reads

 为进行查询而放入缓存的页数。

 

lob logical reads

 从数据缓存读取的 text、ntext、image 或大值类型 (varchar(max)、nvarchar(max)、varbinary(max)) 页的数目。

 

lob physical reads

 从磁盘读取的 text、ntext、image 或大值类型页的数目。

 

lob read-ahead reads

 为进行查询而放入缓存的 text、ntext、image 或大值类型页的数目。

 

    权限 :若要使用 SET STATISTICS IO,用户必须具有执行 Transact-SQL 语句的适当权限。SHOWPLAN 权限不是必需的。

第二:执行计划图:如图二:

它是分析SQL性能的重要指标,里面一般会包含执行语句的各部分开销占用比例情况.拿查询来说,它会非常清晰的显示出各种查询算法,查找索引,排序等占用的比例.开发员就可以根据这些参数来做些适当的优化方案.

如何实现:

第一:在执行语句前,按快捷键:Ctrl+M;

        第二:在菜单栏中点击图三中间的按钮即可.

第三:如何解决SQL中的共享锁产生的死锁.

定义: S(共享锁):在执行查询数据时,SQL server会将行锁定,这时只能查询数据,删,改被阻塞。

有的时候,在一个复杂的查询事务中由于种种原因可能非常耗时,这里我说下我理解的可能原因:

原因一:数据量实在太多.

原因二:查询语句本身有严重的性能问题.例如不合理的嵌套查询,子查询,不能充分利用索引等.

所以在查询中出现的死锁,我们一般会在查询的表名后面加上(nolock)的参数,但是总觉的这样做不爽,既不美观,也好像不治本,难免下次又忘记了,所以本人推荐以下解决方案:引用下MSDN

    

    推荐方案:使用基于行版本控制的隔离级别



         行版本控制框架在 Microsoft SQL Server 中始终处于启用状态,并被多个功能使用。它除了提供基于行版本控制的隔离级别之外,还用于支持对触发器和多个活动结果集 (MARS) 会话的修改,以及 ONLINE 索引操作的数据读取。

基于行版本控制的隔离级别是在数据库级别上启用的。访问已启用数据库的对象的任何应用程序可以使用以下隔离级别运行查询:已提交读隔离级别,通过将 READ_COMMITTED_SNAPSHOT 数据库选项设置为 ON 来使用行版本控制,如下面的代码示例所示:

ALTER DATABASE AdventureWorks

       SET READ_COMMITTED_SNAPSHOT ON;




       为 READ_COMMITTED_SNAPSHOT 启用数据库后,在已提交读隔离级别下运行的所有查询将使用行版本控制,这意味着读取操作不会阻止更新操作。

总结:虽然明白了这些基本的方法不一定能让你马上成为非常出色的数据库优化员,起码我们有了这个基础.天空任鸟飞,但我已飞过.重要的是过程,是分析问题的方法和理论.数据库优化的面太广,并非几篇短文就说的清的,本文的目的在于提醒现在还不关心SQL性能基本分析方法的朋友,知道总比不知道强.

注:

本文引用: MSDN

http://www.51cto.com/art/200707/52480.htm

SQL2005性能分析一些细节功能你是否有用到?的更多相关文章

  1. SQL2005性能分析一些细节功能你是否有用到?(三)

    原文:SQL2005性能分析一些细节功能你是否有用到?(三) 继上篇: SQL2005性能分析一些细节功能你是否有用到?(二) 第一: SET STATISTICS PROFILE ON 当我们比较查 ...

  2. SQL2005性能分析一些细节功能你是否有用到?(二)

    原文:SQL2005性能分析一些细节功能你是否有用到?(二) 上一篇:SQL2005性能分析一些细节功能你是否有用到? 我简单的提到了些关于SQL性能分析最基本的一些方法,下面的文章我会陆续补充.前面 ...

  3. 「功能笔记」性能分析工具gprof使用笔记

    根据网上信息整理所成. 功能与优劣 gprof实际上只是一个用于读取profile结果文件的工具.gprof采用混合方法来收集程序的统计信息,它使用检测方法,在编译过程中在函数入口处插入计数器用于收集 ...

  4. 系统级性能分析工具perf的介绍与使用

    测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...

  5. SQL查询性能分析

    http://blog.csdn.net/dba_huangzj/article/details/8300784 SQL查询性能的好坏直接影响到整个数据库的价值,对此,必须郑重对待. SQL Serv ...

  6. PHP 性能分析第三篇: 性能调优实战

    注意:本文是我们的 PHP 性能分析系列的第三篇,点此阅读 PHP 性能分析第一篇: XHProf & XHGui 介绍 ,或  PHP 性能分析第二篇: 深入研究 XHGui. 在本系列的 ...

  7. CLR Profiler 性能分析工具 (转)

    原文地址:http://www.cnblogs.com/kevinlzf/archive/2010/11/12/1876066.html 下载地址:http://www.microsoft.com/e ...

  8. chrome使用Timeline做性能分析

    使用Timeline做性能分析 Timeline面板记录和分析了web应用运行时的所有活动情况,这是研究和查找性能问题的最佳途径.###Timeline面板概览 Timeline面板主要有三个部分构成 ...

  9. 系统级性能分析工具perf的介绍与使用[转]

    测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...

随机推荐

  1. 惠普4431s 笔记本配置

    hp-4431s驱动精灵硬件检测报告 版本:2015.3.26.1363(8.1.326.1363)================================================== ...

  2. sqlite 中文排序

    看 http://www.cnblogs.com/08shiyan/archive/2012/05/11/2496491.html 这个方法 不太好用 最好的办法是 表添加pinyin字段. 插入数据 ...

  3. 在Sql中使用Try Catch

    原文:在Sql中使用Try Catch 今天在写sql中出现了!我想在sql使用trycatch吧! 哎..但是语法又记不住了! 那就清楚我们的google大师吧! 嘿,网上关于在sql中使用Try ...

  4. 【转】Robot Framework 快速入门

    目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键词 用户定义关键词 变量 定义变量 使用变 ...

  5. STL--F - Sequence(n*m->之前的最低要求m个月)

    F - Sequence Time Limit:6000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit ...

  6. 第二章_session管理

    2.1 URL重写 URL重写是Session追踪技术.须要将一个或多个token做为一个查询字符串加入到一个URL中. Token的格式通常是键=值. Url?key-1=value-1&k ...

  7. Swift学习 --- 2.3和字符串

    1.创建一个空字符串,并通过推理的字符串是空的 <span style="font-size:18px;"> var str = "" var st ...

  8. nginx 1.4.2 安装笔记

    顺便吐槽一下,有道笔记的排版太难用了, 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 ========================================== ...

  9. Cocos2d:使用 CCCamera 做滚动效果 (Four Ways of Scrolling with Cocos2D)

    原版的:http://www.koboldtouch.com/display/IDCAR/Four+Ways+of+Scrolling+with+Cocos2D There are two class ...

  10. PL/SQL编程(1) - 存储过程,函数以及参数

    存储过程 PROCEDURE [schema.]name[( parameter[, parameter...] ) ] [AUTHID DEFINER | CURRENT_USER ] [ACCES ...