gpt4 book ai didi

sql - 可序列化隔离级别原子性

转载 作者:行者123 更新时间:2023-11-29 02:06:30 24 4
gpt4 key购买 nike

我有几个线程执行一些具有可序列化隔离级别的 SQL 选择查询。我不确定选择哪个实现。这:

_repository.Select(...)

或者这个

lock (_lockObject)
{
_repository.Select(...);
}

换句话说,是否有可能多个事务同时开始执行,并部分阻塞Select操作范围内的记录。

P. S. 我正在使用 MySQL,但我想这是一个更笼统的问题。

最佳答案

执行 SELECT 查询的事务在行上放置一个共享的,允许其他事务读取这些行,但阻止它们对行进行更改(包括插入新的记录到空白处)

锁定应用程序正在做其他事情,它不会允许其他线程进入从存储库获取数据的代码块,由于某些原因,这种方法会导致非常糟糕的性能:

  1. 如果任何行被另一个事务(应用程序外部)通过独占锁锁定,应用程序中的锁将无济于事。
  2. 即使在未锁定在独占模式(未更新)的行上,多个事务也无法执行读取。
  3. 直到所有数据都被获取并返回给客户端后,锁才会被释放。这包括网络延迟以及将 MySql 结果集转换为代码对象所需的任何其他开销。
  4. 最重要的是,加强数据完整性和原子性是数据库的工作,它知道如何很好地处理它,如何检测潜在的死锁。什么时候进行记录锁,什么时候加索引间隙锁。这就是数据库的用途,而 MySql 是 ACID投诉并被证明可以处理这些情况

我建议你通读Section 13.2.8. The InnoDB Transaction Model and Locking MySql 文档,它将让您深入了解 InnoDB 中的锁定是如何执行的。

关于sql - 可序列化隔离级别原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5013217/

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