MSSQL通过sys.dm_exec_procedure_stats得到存储过程的执行信息

0    115    2

Tags:

👉 本文共约5568个字,系统预计阅读时间或需21分钟。

简介

很多DBA都希望能够得到某个存储过程的执行信息,比如:

\1) 执行了多少次

\2) 执行的执行计划如何

\3) 执行的平均读写如何

\4) 执行平均需要多少时间

sys.dm_exec_procedure_stats返回缓存存储过程的聚合性能统计信息。 该视图为每个缓存的存储过程计划都返回一行,行的生存期与存储过程保持缓存状态的时间一样长。 在从缓存中删除存储过程时,也将从该视图中删除对应行。 此时,将引发类似于 sys.dm_exec_query_stats 的 Performance Statistics SQL 跟踪事件。

在 Azure SQL 数据库中,动态管理视图不能公开会影响数据库包含的信息,也不能公开用户有权访问的其他数据库的相关信息。 为了避免公开此信息,将筛选出包含不属于已连接租户的数据的每一行。

sys.dm_exec_procedure_stats的结果可能因每次执行而异,因为数据仅反映已完成的查询,而不是仍在执行的查询。

若要从 Azure Synapse Analytics 或 Analytics Platform System (PDW) 调用此功能,请使用名称 sys.dm_pdw_nodes_exec_procedure_stats。 Azure Synapse Analytics 中的无服务器 SQL 池不支持此语法。

列名称数据类型说明
database_idint存储过程所在的数据库 ID。
object_idint存储过程的对象标识号。
typechar(2)对象的类型:
P = SQL 存储过程
PC = 程序集 (CLR) 存储过程
X = 扩展存储过程
type_descnvarchar(60)对对象类型的说明:
SQL_STORED_PROCEDURE
CLR_STORED_PROCEDURE
EXTENDED_STORED_PROCEDURE
sql_handlevarbinary(64)这可用于与从此存储过程内执行的 sys.dm_exec_query_stats 中的查询相关联。
plan_handlevarbinary(64)内存中计划的标识符。 该标识符是瞬态的,仅当计划保留在缓存中时,它才保持不变。 此值可与 sys.dm_exec_cached_plans 动态管理视图一起使用。 当本机编译的存储过程查询内存优化的表时,此项将始终为 0x000。
cached_timedatetime存储过程添加到缓存的时间。
last_execution_timedatetime上次执行存储过程的时间。
execution_countbigint自上次编译以来执行存储过程的次数。
total_worker_timebigint自编译以来,执行此存储过程所消耗的总 CPU 时间(以微秒为单位)。 对于本机编译的存储过程,如果许多执行所用的时间都不到 1 毫秒,则 total_worker_time 可能不精确。
last_worker_timebigint上次执行存储过程所用的 CPU 时间(微秒)。 1
min_worker_timebigint此存储过程在单个执行期间消耗的最小 CPU 时间(以微秒为单位)。 1
max_worker_timebigint此存储过程在单个执行期间消耗的最长时间 CPU 时间(以微秒为单位)。 1
total_physical_readsbigint自编译以来,此存储过程的执行所执行的物理读取总数。 当查询内存优化的表时,此项将始终为 0。
last_physical_readsbigint上次执行存储过程时执行的物理读取次数。 当查询内存优化的表时,此项将始终为 0。
min_physical_readsbigint此存储过程在单个执行期间执行的最小物理读取次数。 当查询内存优化的表时,此项将始终为 0。
max_physical_readsbigint此存储过程在单个执行期间执行的物理读取的最大次数。 当查询内存优化的表时,此项将始终为 0。
total_logical_writesbigint自编译以来,此存储过程的执行执行的逻辑写入总数。 当查询内存优化的表时,此项将始终为 0。
last_logical_writesbigint上次执行计划时弄脏的缓冲池页数。 如果页已变脏(已修改),则不计入写次数。 当查询内存优化的表时,此项将始终为 0。
min_logical_writesbigint此存储过程在单个执行期间执行的最小逻辑写入次数。 当查询内存优化的表时,此项将始终为 0。
max_logical_writesbigint此存储过程在单个执行期间执行的最大逻辑写入数。 当查询内存优化的表时,此项将始终为 0。
total_logical_readsbigint此存储过程自编译以来执行所执行的逻辑读取总数。 当查询内存优化的表时,此项将始终为 0。
last_logical_readsbigint上次执行存储过程时执行的逻辑读取次数。 当查询内存优化的表时,此项将始终为 0。
min_logical_readsbigint此存储过程在单个执行过程中执行的最小逻辑读取次数。 当查询内存优化的表时,此项将始终为 0。
max_logical_readsbigint此存储过程在单个执行过程中执行的最大逻辑读取数。 当查询内存优化的表时,此项将始终为 0。
total_elapsed_timebigint此存储过程的已完成执行的总已用时间(以微秒为单位)。
last_elapsed_timebigint最近完成的此存储过程执行的已用时间(以微秒为单位)。
min_elapsed_timebigint此存储过程的任何已完成执行的最短运行时间(以微秒为单位)。
max_elapsed_timebigint此存储过程的任何已完成执行的最长运行时间(以微秒为单位)。
total_spillsbigint自编译以来,执行此存储过程溢出的总页数。 适用于:从 2017 SQL Server (14.x) CU3 开始
last_spillsbigint上次执行存储过程时溢出的页数。 适用于:从 2017 SQL Server (14.x) CU3 开始
min_spillsbigint此存储过程在单个执行期间溢出的最小页数。 适用于:从 2017 SQL Server (14.x) CU3 开始
max_spillsbigint此存储过程在单个执行期间溢出的最大页数。 适用于:从 2017 SQL Server (14.x) CU3 开始
pdw_node_idint此分发所在节点的标识符。 适用于:Azure Synapse Analytics、Analytics Platform System (PDW)
total_page_server_readsbigint自编译以来,执行此存储过程所执行的页服务器读取总数。 适用范围:Azure SQL 数据库超大规模
last_page_server_readsbigint上次执行存储过程时执行的页服务器读取数。 适用范围:Azure SQL 数据库超大规模
min_page_server_readsbigint此存储过程在单个执行过程中执行的最小页服务器读取次数。 适用范围:Azure SQL 数据库超大规模
max_page_server_readsbigint此存储过程在单个执行过程中执行的最大页服务器读取次数。 适用范围:Azure SQL 数据库超大规模

对于启用统计信息收集时本机编译的存储过程,将收集工作器时间(以毫秒为单位)。 如果查询执行不到 1 毫秒,则该值将为 0。

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复