适用范围:SQL Server
SQL Server 中的 SQLServer:SQL Statistics 对象提供了若干计数器来监视编译和发送到 SQL Server 实例的请求类型。 通过监视查询编译和重新编译的次数以及 SQL Server 实例收到的批数,可了解 SQL Server 处理用户查询的速度,以及查询优化器处理查询的效果。
编译时间在查询总时间中占到很大一部分。 为了节省编译成本,数据库引擎 会将编译后的查询计划保存在查询缓存中。 缓存通过存储已编译的查询以便后续重用,减少了编译,从而避免了在后续执行中重新编译查询的需求。 但是,每个唯一的查询至少需要编译一次。 以下因素可能导致查询重新编译:
架构更改,包括基本架构更改(例如在表中添加列或索引)和统计架构更改(例如在表中插入或删除很多行)。
环境(
SET语句)变化。 会话设置(如ANSI_PADDING或ANSI_NULLS)的变化可能导致查询被重新编译。
有关详细信息,请参见:
下表列出了SQL Server的SQL统计计数器。
| SQL Server SQL Statistics 计数器 | 说明 |
|---|---|
| 自动参数尝试次数/秒 | 每秒的自动参数化尝试数。 其总数应为失败的、安全的和不安全的自动参数化尝试之和。 当 SQL Server 实例尝试通过将某些文字替换为参数来参数化 Transact-SQL 请求时,将会进行自动参数化,这样可以对多个相似的请求再次使用保存在缓存中的执行计划。 自参数化也称为简单参数化。 这个计数器不包含强制参数化。 |
| 批处理请求/秒 | 每秒收到的 Transact-SQL 命令批数。 该统计量受所有约束(如输入输出、用户数、缓存大小和请求复杂度)影响。 批处理请求数值高意味着吞吐量很好。 |
| 自动参数/秒数失败 | 每秒自动参数化尝试失败次数。 这个数值应该很小。 自参数化也称为简单参数化。 |
| 强制参数化/秒 | 每秒成功执行的强制参数化次数。 |
| 引导计划执行/秒 | 每秒执行的计划数,其中的查询计划是通过使用计划指南生成的。 |
| 误导性计划执行/秒数 | 每秒执行计划次数,在计划生成过程中无法遵守计划指南。 查询优化器忽略了计划指南,使用正常编译生成了已执行的计划。 |
| 安全的自动参数/秒数 | 每秒安全自动参数化尝试次数。 安全指确定保存在缓存中的执行计划可以在不同的相似 Transact-SQL 语句之间共享。 SQL Server 会尝试多次自动参数化。 有些最终是安全的,有些则失败了。 自参数化也称为简单参数化。 这个计数器不包含强制参数化。 |
| SQL 注意力率 | 每秒发出关注信号的数目。 发出一次关注信号就是终止当前运行请求的一次客户端请求。 |
| SQL 编译/sec | 每秒的 SQL 编译数。 表示编译代码路径被进入的次数。 包括 SQL Server 中语句级重新编译导致的编译。 当 SQL Server 用户活动稳定后,该值将达到稳定状态。 |
| SQL 重新编译/sec | 每秒语句重新编译的次数。 计算触发语句重新编译的次数。 一般来说,这个数值最好较小。 |
| 不安全的自动参数/sec | 每秒不安全的自动参数化尝试次数。 例如,查询有某些特性会防止保存在缓存中的计划被共享。 这些特征被认定为不安全。 这个计数不包括强制参数化的次数。 |
Examples
要探索该对象中的查询性能计数器,请在 sys.dm_os_performance_counters 动态管理视图上运行以下 Transact-SQL(T-SQL)查询:
SELECT *
FROM sys.dm_os_performance_counters
WHERE object_name LIKE '%SQL Statistics%';