SQL Server锁存及其对性能问题的指示

duc*_*rth 14 sql-server performance locking sql-server-2008

我试图了解我们的数据库(SQL 2008)的潜在性能问题,特别是一个性能计数器,SQLServer:Latches\Total Latch Wait Time Total Latch Wait Time(ms).我们看到数据库响应时间减慢,我唯一可以匹配的相关峰值是总锁存等待时间和锁存等待/秒的峰值.我没有看到任何特定的磁盘IO,CPU使用或内存瓶颈.

SQLServer锁存器的常见解释是它是一个轻量级锁,但我试图更详细地了解一个锁存器是什么,它与锁的区别以及我看到它们的大量内容可能是什么一个指标.

小智 11

对于专业DBA来说这可能是一个非常基本的错误...但这是我发现的高锁存问题,并且这个线程在搜索结果中排名很高.我以为我会分享它可能会帮助别人.

在使用NUMA内存架构的新型双/多处理器服务器上,最大并行度应设置为每个处理器的实际内核数.在我们的例子中,我们有双氙气,每个氙气有4个核心,而超线程则表现为SQL的16个逻辑处理器.

将此值从默认值0锁定到4会立即切断某些查询的高锁存.

在某些情况下,我们的锁存器可以运行1000ms +最多30,000ms.


Rem*_*anu 9

我建议您进入sys.dm_os_latch_stats并查看与之前的基线相比,哪种类型的锁存器增加了争用和等待类型.

如果您在BUFFER类型锁存器中看到尖峰,则表示它由更新冲突驱动以修改同一页面.其他锁存器类型在MSDN中也有简短的解释,可以指导您解决问题的根本原因.对于那些标记为"仅供内部使用"的人,您将不得不打开一个MS支持案例,详细解释他们的意思是在NDA的边缘.

你也应该研究一下sys.dm_os_wait_stats.如果你看到增加了PAGELATCH_*,那么它就像上面的BUFFER类型锁存器一样,试图修改同一页面的争用,又名.作为更新热点.如果您看到增加,PAGEIOLATCH_*那么您的问题是I/O susbsytem,在需要时将页面加载到内存中需要很长时间.