我们看到非常高的PAGELATCH_EX和PAGELATCH_SH等待类型,以及高WRITELOG等待类型。我已经诊断了导致PAGELATCH等待的查询,并可以通过降低插入到使用标识值定义的繁忙集群主键中的插入率来消除这些查询。据我所知,这种现象被称为最后一页插入锁存争用。
但是,我的问题是,当插入新记录时,Server是否在缓冲区页上使用独占PAGELATCH_EX,将记录插入缓冲区页,将记录写入事务日志,然后将独占PAGELATCH_EX释放为详细的https://www.microsoft.com/en-ie/download/details.aspx?id=26665页面24。还是先将记录写入事务日志,然后再将PAGELATCH_EX作为详细的“解决高度并发的PAGELATCH争用”插入工作负载-背景信息SQLCAT的“关系引擎指南”。
如果记录是写在锁存机制之外的日志,那么我可以排除缓慢写入磁盘的可能性,因为这是PAGELATCH等待的原因之一。但是,如果锁存一直保持到记录硬了才能登录,那么我可能应该考虑WRITELOG。
另外,多个非聚集索引是否会导致PAGELATCH_*锁存时间更长,也就是说,如果一个表具有聚集索引,并且多个非聚集索引是同时添加和释放到每个索引缓冲区页的锁存器呢?
阅读等待sql-server-writelog-等等幻灯片2和一般WAL体系结构后,更新1。我现在的理解是,这两篇白皮书中详细描述的“记录一行已修改的日志条目”步骤指的是在事务日志缓存中记录更改的SQL Server,而不是磁盘。事务完成或缓冲区满后,所有记录立即刷新到磁盘。
发布于 2015-02-23 16:30:55
不过,我的问题是,当插入新记录时,Server是否在缓冲区页上使用独占PAGELATCH_EX,将记录插入缓冲区页,将记录写入事务日志,然后释放独占PAGELATCH_EX
您必须注意,锁存在内存中时只保护页的物理完整性,因此,当页在内存中时,将采取锁存。假设正在插入一条记录,并需要获取该页的记录。首先,将页面锁定并放入内存中,然后锁定页面并编写信息。这之后的过程将是
有关上述步骤的详细信息和说明,请参阅鲍勃·多尔的I/O演示博客。
Pagelatch*等待是非I/O等待,而且我看到大多数时候,由于分配争用,这些等待是突出的。我的直觉是,它必须要做一些如何tempdb is configured。那么,你的tempdb是如何配置的呢?,有多少tempdb数据文件存在?确保他们有相同的自动增长和相同的大小。当创建新页面时,需要更新或访问像GAM、SGAM和PFS页面这样的系统页面,当Server在访问这些页面时发现争用时,就会出现等待。
https://dba.stackexchange.com/questions/93565
复制相似问题