首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >记录所有Server查询的持续时间

记录所有Server查询的持续时间
EN

Database Administration用户
提问于 2018-03-27 01:58:55
回答 2查看 2.3K关注 0票数 0

是否有方法记录在特定服务器上执行的所有Microsoft查询及其各自的持续时间?

我希望能够分析所有的查询,比如PGBADGER为PostgreSQL做了什么。我们在做的时候:你知道有这样的工具吗?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2018-03-27 04:56:05

你的实际目标是什么?您是试图跟踪一个麻烦的查询,性能调优您的整个环境,还是只是出于好奇?

最后,我不建议尝试跟踪和记录所有查询。我怀疑您只关心性能不佳的查询,这是实际的业务影响。

在大多数生产服务器上,您将有更多的查询,这些查询要么运行得足够快,以至于10-20%的性能增益几乎不明显,要么已经进行了足够好的优化,使任何性能调优都不能充分利用您的时间。

因此,我建议将您的性能调优定位到实际需要它的查询。

无论如何,您有几种选择:

查询存储

如果您正在运行SQL 2016或更高版本,查询存储是我的首选方法。这是非常低的开销,并提供了一些整洁的方法来跟踪查询性能随时间推移。网上书籍有一篇关于如何使用这里的好文章。请注意,每个数据库都需要启用它,并且只会在启用后捕获信息。

DMVs

sys.dm_exec_查询_统计数据存储围绕查询执行的聚合状态(按查询计划)。这对于查询消耗服务器上最多资源的高级别视图非常有用。您将不会获得单独的执行统计数据(除非只运行一次),因此它并不适合在正常行为良好的查询中识别“一次性”性能问题。

它不包括语句文本,但是您可以使用sys.dm_exec_sql_text DMF获得它。例如:

代码语言:javascript
复制
select top 100 
    qt.text
    , qs.execution_count
    , qs.total_worker_time
    , qs.total_physical_reads
    , qs.total_logical_reads
    , qs.total_physical_writes
    , qs.total_logical_writes
    , qs.creation_time
    , qs.last_execution_time
from
    sys.dm_exec_query_stats as qs
cross apply 
    sys.dm_exec_sql_text(qs.sql_handle) as qt
order by 
    total_worker_time desc

扩展事件

如果您真的打算捕获每个查询,最好的选择是使用be。要知道,如果沿着这条路线走(特别是在捕获诸如调用堆栈之类的东西,或者做一些疯狂的事情,比如使用谓词通过sql文本进行过滤),那么就会有很大的性能开销,这不是我建议采取的任何方法。

如果您设置了这样的东西,我建议您非常小心,不要让它在不监视其影响的情况下运行。

票数 6
EN

Database Administration用户

发布于 2018-03-27 09:29:16

了解PGBadger的特性,使用这些特性,Query无疑是可行的,我只需要添加一些来自Dan的答案。

无论出于何种原因,当服务器重新启动时,DMV中的数据将被重置。QueryStore的情况并非如此,这是它的主要特性之一。同样对于DMV sys.dm_exec_query_stats,如果服务器受到内存压力,可以刷新一些数据。

在最新的CU SqlServer 2017中,查询存储还包含等待统计数据,您需要这些统计数据来帮助您理解为什么查询正在回归。

在SqlServer 2016中,情况并非如此(希望将来的SP会包括它),因此您必须自行设置一些等待统计记录。我从本文构建了一个代码版本来实现这一点:http://www.patrickkeisler.com/2013/12/collecting-historical-wait-statistics_10.html (一定要阅读他链接到的文章)

如果您使用的是Server的早期版本,则需要在繁忙的服务器上自己收集查询统计信息(来自sys.dm_exec_query_stats的数据),这需要非常频繁地进行,因为正如我提到的那样,在压力情况下可以刷新数据。

作为Dan,我不确定您想要使用“持续时间”用于什么,但是如果是用于查找重新源/查询问题,则需要监视更多的数字和数字的变化,如I/O统计、等待统计、内存使用情况等等。

在讲到更多细节之前,很高兴听到你到底想达到什么目的。

要想获得一个完整的开箱即用工具,可以交付PGBadger交付的所有东西,您必须获得一个商业产品,比如来自Idera、RedGate和其他方面的产品。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/202357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档