我有几个线程执行一些具有可序列化隔离级别的SQL select查询。我不确定选择哪种实现方式。这样:
_repository.Select(...)
或者
lock (_lockObject)
{
_repository.Select(...);
}
换句话说,是否有可能同时开始执行多个事务并部分阻止选择操作范围内的记录。
P上。 S.我正在使用MySQL,但我想这是一个更普遍的问题。
答案 0 :(得分:3)
执行SELECT
次查询的事务会在行上放置共享锁,允许其他事务读取这些行,但阻止它们对行进行更改(包括将新记录插入到行中)间隙)
锁定应用程序正在做其他事情,它不允许其他线程进入代码块从存储库中获取数据,这种方法可能会导致性能非常差,原因有几个:
我建议您阅读MySql文档的Section 13.2.8. The InnoDB Transaction Model and Locking,它将为您提供有关如何执行InnoDB锁定的深刻见解。