J. Mini Asked: 2024-11-15 22:44:15 +0800 CST2024-11-15 22:44:15 +0800 CST 2024-11-15 22:44:15 +0800 CST 糟糕的 RCSI 性能会导致哪些类型的等待? 772 读取已提交快照隔离 (RCSI) 已广为人知。它可能导致性能瓶颈的主要原因是版本链太长。是否有任何等待类型表明此特定问题?或者它仅由其他等待类型显示(如果是,是什么?)。 sql-server 2 个回答 Voted Best Answer Paul White 2024-11-22T20:09:24+08:002024-11-22T20:09:24+08:00 造成性能瓶颈的主要原因是版本链太长。 这对于 RCSI 来说通常不像 SI 那样是个大问题。RCSI 的语句快照本质上往往较新。话虽如此,但长时间运行的 RCSI 语句仍然可能发生这种情况。 RCSI 的主要成本是额外的管理工作和存储。如果您尚未将版本用于其他目的(例如在线索引构建),则每行额外的 14 个字节是每次更新和删除(以及一些插入)必须承担的成本。这也可能导致页面中间拆分(或堆的转发记录),执行和记录这些操作的成本相对较高。 无论如何,生成和清理版本都不是免费的。现在,服务器的一部分功能专用于管理工作。当然,RCSI 也有很多好处,但你没有问这些。 假设您的tempdb尚未陷入困境,或者接近陷入困境,那么该领域的影响通常会被夸大。 是否有任何等待类型表明此特定问题? 不。找到正确的版本可能是管理工作,但它仍然是主动的工作——服务器不会等待任何资源可用。 遍历长链的查询可能会变慢(可能非常慢),但这主要表现为 CPU 消耗增加。您可能会看到更高的SOS_SCHEDULER_YIELD“等待时间”,但这些并不直接归因于版本链遍历。 您可以使用 DMV 和性能计数器来监控版本存储使用情况和链长是否过长。等待统计数据用于监控等待情况,而不是诊断所有低效率问题的灵丹妙药。 Zikato 2024-11-28T22:04:23+08:002024-11-28T22:04:23+08:00 补充 Paul 的回答:监控版本存储失控的一种方法是使用 PerfMon 计数器 \SQLServer:Transactions\Version Store Size (KB) \SQLServer:Transactions\Longest Transaction Running Time 它们通常是相关的 - 只要存在可能访问数据的开放事务,版本存储就无法清除。
这对于 RCSI 来说通常不像 SI 那样是个大问题。RCSI 的语句快照本质上往往较新。话虽如此,但长时间运行的 RCSI 语句仍然可能发生这种情况。
RCSI 的主要成本是额外的管理工作和存储。如果您尚未将版本用于其他目的(例如在线索引构建),则每行额外的 14 个字节是每次更新和删除(以及一些插入)必须承担的成本。这也可能导致页面中间拆分(或堆的转发记录),执行和记录这些操作的成本相对较高。
无论如何,生成和清理版本都不是免费的。现在,服务器的一部分功能专用于管理工作。当然,RCSI 也有很多好处,但你没有问这些。
假设您的tempdb尚未陷入困境,或者接近陷入困境,那么该领域的影响通常会被夸大。
不。找到正确的版本可能是管理工作,但它仍然是主动的工作——服务器不会等待任何资源可用。
遍历长链的查询可能会变慢(可能非常慢),但这主要表现为 CPU 消耗增加。您可能会看到更高的
SOS_SCHEDULER_YIELD
“等待时间”,但这些并不直接归因于版本链遍历。您可以使用 DMV 和性能计数器来监控版本存储使用情况和链长是否过长。等待统计数据用于监控等待情况,而不是诊断所有低效率问题的灵丹妙药。
补充 Paul 的回答:监控版本存储失控的一种方法是使用 PerfMon 计数器
\SQLServer:Transactions\Version Store Size (KB)
\SQLServer:Transactions\Longest Transaction Running Time
它们通常是相关的 - 只要存在可能访问数据的开放事务,版本存储就无法清除。