我知道transaction_isolation有4个有效值:READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、SERIALIZABLE,上面的顺序是从最大的一致性和保护到最小的[官方文件]。
直观地说,限制数据库访问操作的执行通常意味着性能下降。.此外,正如所描述的这里,READ-UNCOMMITTED应该具有最佳的性能。
然而,我运行了一个测试:
./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的性能最差。结果对吗?
谢谢!
发布于 2020-07-02 15:46:16
直观地说,限制数据库访问操作的执行通常意味着性能下降。
对不起,在这种情况下,你的直觉不能很好地帮助你。
隔离级别对查询执行性能没有显著影响,您不应该选择隔离级别来“获得更好的性能”。它们影响某些查询的锁定行为,只有当您有需要获取锁的并发查询时,这才重要。
根据隔离级别的不同,如果另一个会话持有锁,则它们可能必须等待这些锁。查询在获得所需的锁之前不会启动执行时间。
如果您看过MySQL慢速查询日志,您可能已经注意到它分别报告了Query_time和Lock_time。在一个看起来很慢的系统中,即使平均查询时间很低,也可能是这样,但是查询必须在队列中等待才能获得锁。
一旦获得所需的锁,查询在一个隔离级别上的执行速度与在另一个级别上的速度一样快。
P.S.:我从来没有找到使用READ_UNCOMMITTED隔离级别的好理由。这只是一个错误的想法,允许一个会话查看部分完成的更改与其他会话。它破坏了原子变化的保证。
https://stackoverflow.com/questions/62699115
复制相似问题