如何找出你性能最差的SQL Server查询

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: 原文:如何找出你性能最差的SQL Server查询我经常会被反复问到这样的问题:”我有一个性能很差的SQL Server。我如何找出最差性能的查询?“。因此在今天的文章里一些让你很容易找到问题答案的信息和向导。
原文: 如何找出你性能最差的SQL Server查询

我经常会被反复问到这样的问题:”我有一个性能很差的SQL Server。我如何找出最差性能的查询?“。因此在今天的文章里一些让你很容易找到问题答案的信息和向导。

问SQL Server!

SQL Server的一个优点是它本身能回答几乎所有你的问题,因为SQL Server在各个DMV和DMF里存储了很多故障排除信息。另一方面这也是个缺点,因为你必须知道各个DMV/DMF,还有如何把它们解释和关联在一起。

至于你的最差性能SQL Server查询的一个最重要的DMV是sys.dm_exec_query_stats。对于每个缓存的执行计划,SQL Server存储了这个执行计划在运行时的详细信息。另外SQL Server告诉你这个查询消耗的CPU时间和I/O读取。当我对性能很差的SQL Server进行故障排除时,这是我经常使用的基本DMV之一。

让我们进入sys.dm_exec_query_stats!

当你对sys.dm_exec_query_stats进行一个简单的SELECT查询,你会得到有很多不同列的一个非常广泛的记录集——有大量的不同数字。

 

我们来仔细看下它们。对于每个缓存的执行计划,SQL Server给你下列度量的信息:

  • Worker Time (columns …_工作者时间)
  • Physical Reads (columns …_物理读)
  • Logical Writes (columns …_逻辑写)
  • Logical Reads (columns …_逻辑读)
  • SQLCLR Time (columns …_公共语言运行时间)
  • Elapsed Time (columns …_运行时间)
  • Row Count (columns …_行数)

对于每个度量,你得到4个集合信息的不同列:

  • 总值(Total value)
  • 上个值(Last value)
  • 最小值(Min value)
  • 最大值(Max value)

手上有了这些信息找出你性能最差的查询是什么。但首先你要知道什么是你的性能瓶颈——CPU还是I/O限制?如果你的性能瓶颈是CPU限制,你可以用下列查询问SQL Server根据CPU消耗列出前5个最差性能的查询:

-- Worst performing CPU bound queries
SELECT TOP 5
    st.text,
    qp.query_plan,
    qs.*
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.plan_handle) st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY total_worker_time DESC
GO

你可以看到这里我使用了简单的ORDER BY total_worker_time DESC来返回CPU密集的查询。另外也通过调用sys.dm_exec_sql_textsys.dm_exec_query_plan DMF来抓取SQL语句和执行计划本身。下列代码显示如何依据I/O消耗来找出你性能最差的查询。 

 1 -- Worst performing I/O bound queries
 2 SELECT TOP 5
 3     st.text,
 4     qp.query_plan,
 5     qs.*
 6 FROM sys.dm_exec_query_stats qs
 7 CROSS APPLY sys.dm_exec_sql_text(qs.plan_handle) st
 8 CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
 9 ORDER BY total_logical_reads DESC
10 GO

当在你面前有SQL语句和执行计划时,你可以进一步分析查询找出是什么引起高CPU或I/O消耗。

小结

SQL Server是个惊艳的产品:它可以立即给你问题的很好答案。你只要知道在哪里找你的答案。至于性能很差的查询,你总应该通过分析DMV sys.dm_exec_query_stats开始,在这里SQL Server保存里你执行计划运行时统计信息。

感谢关注!

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
15天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
52 10
|
17天前
|
SQL
sql语句加正则 简化查询
sql语句加正则 简化查询
15 0
sql语句加正则 简化查询
|
1月前
|
SQL
sql server链接查询
sql server链接查询
18 1
|
1月前
|
SQL
sql server简单查询
sql server简单查询
14 1
|
25天前
|
SQL 关系型数据库 MySQL
mysql一条sql查询出多个统计结果
mysql一条sql查询出多个统计结果
15 0
|
25天前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
17 0
|
15天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
88 6
|
2天前
|
SQL 数据管理 关系型数据库
如何在 Windows 上安装 SQL Server,保姆级教程来了!
在Windows上安装SQL Server的详细步骤包括:从官方下载安装程序(如Developer版),选择自定义安装,指定安装位置(非C盘),接受许可条款,选中Microsoft更新,忽略警告,取消“适用于SQL Server的Azure”选项,仅勾选必要功能(不包括Analysis Services)并更改实例目录至非C盘,选择默认实例和Windows身份验证模式,添加当前用户,最后点击安装并等待完成。安装成功后关闭窗口。后续文章将介绍SSMS的安装。
5 0
|
2天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
|
10天前
|
SQL 安全 网络安全
IDEA DataGrip连接sqlserver 提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法
IDEA DataGrip连接sqlserver 提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法
22 0