首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >transaction_isolation在MySQL中的性能

transaction_isolation在MySQL中的性能
EN

Stack Overflow用户
提问于 2020-07-02 14:52:14
回答 1查看 871关注 0票数 0

我知道transaction_isolation有4个有效值:READ-UNCOMMITTEDREAD-COMMITTEDREPEATABLE-READSERIALIZABLE,上面的顺序是从最大的一致性和保护到最小的[官方文件]

直观地说,限制数据库访问操作的执行通常意味着性能下降。.此外,正如所描述的这里READ-UNCOMMITTED应该具有最佳的性能。

然而,我运行了一个测试:

代码语言:javascript
复制
./mysql-test-run.pl \
--debug-server \
--clean-vardir \
--force-restart \
--report-times \
--max-connections=16 \
--testcase-timeout=60 \
--combination=--transaction-isolation=SERIALIZABLE \
--combination=--transaction-isolation=REPEATABLE-READ \
--combination=--transaction-isolation=READ-COMMITTED \
--combination=--transaction-isolation=READ-UNCOMMITTED \
--repeat=100 \
main.innodb_deadlock

并得到以下结果(以ms表示的时间):

READ-UNCOMMITTED的性能最差。结果对吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-07-02 15:46:16

直观地说,限制数据库访问操作的执行通常意味着性能下降。

对不起,在这种情况下,你的直觉不能很好地帮助你。

隔离级别对查询执行性能没有显著影响,您不应该选择隔离级别来“获得更好的性能”。它们影响某些查询的锁定行为,只有当您有需要获取锁的并发查询时,这才重要。

根据隔离级别的不同,如果另一个会话持有锁,则它们可能必须等待这些锁。查询在获得所需的锁之前不会启动执行时间。

如果您看过MySQL慢速查询日志,您可能已经注意到它分别报告了Query_timeLock_time。在一个看起来很慢的系统中,即使平均查询时间很低,也可能是这样,但是查询必须在队列中等待才能获得锁。

一旦获得所需的锁,查询在一个隔离级别上的执行速度与在另一个级别上的速度一样快。

P.S.:我从来没有找到使用READ_UNCOMMITTED隔离级别的好理由。这只是一个错误的想法,允许一个会话查看部分完成的更改与其他会话。它破坏了原子变化的保证。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62699115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档