SQL Server Latches and their indication of performance issues
我正在尝试了解数据库(SQL 2008)的潜在性能问题,尤其是一个性能计数器SQLServer:Latches \ Total Latch Wait Time总锁存等待时间(ms)。 我们看到数据库响应时间变慢,并且我可以匹配的唯一相关峰值是总锁存等待时间和锁存等待/秒的峰值。 我没有在磁盘IO,CPU使用率或内存中看到任何特定的瓶颈。
SQLServer闩锁的常见解释是它是轻量级的锁,但是我试图更详细地了解什么是闩锁,它与锁有何不同以及我看到的大量锁可能是 一个指标。
对于专业DBA来说,这可能是一个非常基本的错误……但这是我在遇到高闩锁问题时发现的,并且该线程在搜索结果中的排名很高。我以为我会分享我们的帮助,它可能会帮助别人。
在使用NUMA内存架构的新型双/多处理器服务器上,最大并行度应设置为每个处理器的实际核心数。在我们的示例中,我们有双氙气,每个氙气都有4个内核,并且具有超线程功能,它看起来像是SQL的16个逻辑处理器。
将此值从默认值0锁定为4会立即降低某些查询的高锁存器。
在某些情况下,我们的闩锁运行了1000ms +到30,000ms。
我建议您查看
如果您看到BUFFER类型的闩锁中出现尖峰,则意味着它是由冲突驱动的,以修改同一页面而导致更新。其他闩锁类型在MSDN中也有简短说明,可以指导您解决问题的根本原因。对于标记为"仅供内部使用"的用户,您将不得不与MS一起开立支持案例,以详细说明它们的含义即将在NDA上使用。
您还应该查看
从此博客引用:
使用sys.dm_db_index_operational_stats:
1 2 3 4 5 6 7 8 9 | SELECT OBJECT_NAME(object_id) ,page_latch_wait_count ,page_latch_wait_in_ms ,tree_page_latch_wait_count ,tree_page_latch_wait_in_ms ,Page_io_latch_wait_count ,Page_io_latch_wait_in_ms FROM sys.dm_db_index_operational_stats (DB_ID(), NULL, NULL, NULL) |
使用sys.dm_os_latch_stats:
1 2 | SELECT * FROM sys.dm_os_latch_stats WHERE latch_class = 'buffer' |
1 2 3 4 | sp_configure 'max degree of parallelism', 8 go reconfigure go |