02-如何优化数据库查询脚本剖析.doc

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

如何优化数据库查询脚本 1. 目的 1 2. 查找数据库的压力点 2 2.1. SQL Server Profiler 2 2.1.1. 跟踪事件 2 2.1.2. 事情的数据列 3 2.1.3. 参考 4 2.2. 监控脚本执行 4 3. 分析SQL脚本 4 3.1. 索引 5 3.1.1. 聚集索引 5 3.1.2. 非聚集索引 6 3.1.3. 索引统计信息 8 3.1.4. 参考 8 3.2. 数据查询方式 8 3.3. 执行计划 8 3.3.1. 显示执行计划 9 3.3.2. 了解执行计划 9 3.4. 分析SQL语句 11 3.4.1. 分析执行计划 11 3.4.2. IO选项 12 4. 优化SQL脚本 13 4.1. 优化索引 13 4.2. 调整脚本结构 14 5. 附件 15 修订日期 修订内容 修订者 版本 目的 Smartlearning系统在客户的应用过程中,引起性能瓶颈的最大压力点在于数据库。有很多数据库脚本在执行过程中占用了太多的CPU及I/O资源,引起系统性能底下。本文档主要讨论一些常见的数据库性能优化方法。 数据库优的方法有很多种(如:数据库配置及内存优化、数据库分表/分区优化等等),本文档只讨论最基本的数据库查询脚本优化。 查找数据库的压力点 引起数据库瓶颈的一般现象是数据库进程长时间占用大量的CPU。一般来说数据库进程长时间占CPU超过20%,则表明数据库存在瓶颈需要进行优化。 如果要优化数据库,那么需要先找到引起数据库压力的查询脚本,这就需要我们使用到SQL Server Profiler工具监控脚本的执行情况。 SQL Server Profiler SQL Server Profiler 是用于从服务器捕获 SQL Server事件的工具。可以监控数据库的连接、断开、脚本执行等事件。我们主要使用它查找运行慢的查询语句。 SQL Server Profiler的执行界面如下所示: 跟踪事件 SQL Server Profiler中的EventClass表示跟踪事件,SQL Server Profiler主要可以跟踪以下几个数据库事件: SQL:BatchStarting 用于记录数据库查询执行的开始事件 SQL:BatchCompleted 用于记录数据库查询执行完成事件 Audit Login 表示与数据库建立连接的事件 Audit Logout 表示数据库关闭连接的事件 事情的数据列 下表列出了常用的几个Microsoft SQL Server Profiler数据列(这些数据列与 SQL 跟踪使用的数据列相同)。 数据列 说明 ApplicationName 与 SQL Server 实例建立连接的客户端应用程序的名称。此列由该应用程序传递的值填充,而不是由程序名填充的。 ClientProcessID 由主机分配给正在运行客户端应用程序的进程的 ID。如果客户端提供了客户端进程 ID,则填充此数据列。 CPU 事件使用的 CPU 时间(毫秒)。 Database ID USE database_name 语句指定的数据库的 ID;如果未对给定实例执行 USE database_name 语句,则为默认数据库的 ID。如果在跟踪中捕获到 ServerName 数据列并且服务器可用,SQL Server Profiler将显示数据库的名称。若要确定数据库的值,请使用 DB_ID 函数。 DatabaseName 正在运行用户语句的数据库的名称。 DBUserName 客户端的 SQL Server 用户名。 Duration 事件的持续时间()。 EndTime 事件的结束时间。对指示事件开始的事件类(例如 SQL:BatchStarting 或SP:Starting)将不填充此列。 EventClass 捕获的事件类的类型。 HostName 正在运行客户端程序的计算机的名称。如果客户端提供了主机名,则填充此数据列。若要确定主机名,请使用 HOST_NAME 函数。 LoginName 用户的登录名(SQL Server 安全登录名或 Windows 登录凭据,格式为“域/用户名”)。 LoginSid 已登录用户的安全标识符 (SID)。您可以在 master 数据库的 sys.server_principals 视图中找到此信息。服务器中的每个登录名都具有唯一的 ID。 MethodName OLEDB 方法的名称。 Mode 一个整数,各种事件都使用它来描述事件要请求或已接收的状态。 NestLeve 一个整数,表示 @@NESTLEVEL 返回的数据。 NTD

文档评论(0)

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

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档