gpt4 book ai didi

sql-server - 为什么更好的隔离级别意味着 SQL Server 更好的性能

转载 作者:行者123 更新时间:2023-12-02 16:33:19 25 4
gpt4 key购买 nike

在测量查询性能时,我发现隔离级别和运行时间之间存在依赖关系,这让我感到惊讶

READUNCOMMITTED - 409024
READCOMMITTED - 368021
REPEATABLEREAD - 358019
SERIALIZABLE - 348019

左列是表提示,右列是以微秒为单位的耗时 (sys.dm_exec_query_stats.total_elapsed_time)。为什么更好的隔离级别可以提供更好的性能?这是一台开发机器,不会发生任何并发情况。由于锁定开销较少,我希望 READUNCOMMITTED 会被禁食。

更新:我确实用它来测量

DBCC DROPCLEANBUFFERS 
DBCC FREEPROCCACHE

已发出,Profiler 确认没有发生缓存命中。

最佳答案

首先,您需要在每个隔离级别下重复运行查询,并对结果进行平均,丢弃时间最长的那个。这将消除缓冲区预热的影响:您希望所有运行都在热缓存上,而不是让一个查询预热缓存并付出比较代价。

接下来,您需要确保在实际并发场景下进行测量。如果您将在现实生活中发生更新/插入/删除,那么您必须将它们添加到您的测试中,因为它们将极大地影响各种隔离级别下的读取。您最不想看到的就是得出“可序列化读取速度最快,让我们在任何地方使用它们”的结论,然后看着系统在生产中崩溃,因为一切都已序列化。

除此之外,唯一更快的隔离级别是脏读,因为它不获取锁。读取提交的快照(您没有测量)也不会获取锁,但由于行版本控制开销,它确实会影响整体性能。

关于sql-server - 为什么更好的隔离级别意味着 SQL Server 更好的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2450808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com