mysql 共享锁 和 排它锁 问题

时间:2022-09-17 23:09:43
系统中有一个慢点的查询,现在还想不到优化的方法,只能先慢着,大概两三秒。
查询中需要用到一个频繁被更新的表A,且查询是用的模糊查询,不走索引。
当查询遇上表A需要更新时就会产生死锁。
查找网上各种资料,大概意思是查询时没有走索引,所以锁升级到了表锁定,需要更新的表A被加了共享锁S,当另一个事务需要更新表A时,不能再加锁,导致了死锁。


请问有什么办法可以避免呢?或者可不可以让mysql执行查询时不加共享锁,这样表A就可以随时更新。

对数据库不是很熟,希望了解的朋友帮忙分析一下。


谢谢!!!

3 个解决方案

#1


设置查询的session的tx_isolation为REPEATABLE-READ


set  tx_isolation='READ-UNCOMMITTED';

#2


mysql本身就是mvcc多版本并发控制,直接select不会加锁的

#3


由于MDL_SHARED_WRITE与MDL_SHARED_READ兼容,所以它们不会因为MDL而导致等待的情况

#1


设置查询的session的tx_isolation为REPEATABLE-READ


set  tx_isolation='READ-UNCOMMITTED';

#2


mysql本身就是mvcc多版本并发控制,直接select不会加锁的

#3


由于MDL_SHARED_WRITE与MDL_SHARED_READ兼容,所以它们不会因为MDL而导致等待的情况