- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 香精研制年度岗位绩效考核表.docx VIP
- 麦克维尔MDM组合式空气处理机.pdf VIP
- 各种岩石矿物地球物理物性参数总结.pdf VIP
- 月饼课件介绍.pptx VIP
- 中国人炒中国股主力思维做主升_笔记.docx VIP
- 2024国有企业公司治理与合规管理课件PPT.pptx VIP
- 传祺-传祺GA3S PHEV-产品使用说明书-传祺GA3S PHEV 精英版-GAC7150CHEVA5A-GA3SPHEV用户手册_201903071.pdf VIP
- 慢性乙肝防治治疗课件.pptx VIP
- 溃疡性结肠炎中医诊疗专家共识(2023).pptx VIP
- dewinter综合征医学课件.ppt VIP
文档评论(0)