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

时间:2009-12-14 21:49:09

标签: sql-server performance sql-server-2008 locking

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

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

4 个答案:

答案 0 :(得分:11)

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

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

将此值从默认值0设置为4会立即切断某些查询的高锁存。

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

答案 1 :(得分:9)

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

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

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

答案 2 :(得分:0)

Reference taken from this blog:

使用sys.dm_db_index_operational_stats:

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:

SELECT * FROM sys.dm_os_latch_stats  
WHERE latch_class = 'buffer'

答案 3 :(得分:-4)

sp_configure 'max degree of parallelism', 8
go
reconfigure
go