数据库为什么要锁表?
大家知道,数据库会涉及到多人读取和写入,数据库为了保证ACID特性(原子性、一致性、隔离性、持久性)会对数据做相应保护措施(锁表)。通俗来说就是,为了防止在数据变更时别人也在同时变更,就需要把表先锁住不让别人修改,等数据修改完毕后再释放锁。
长时间锁表容易导致死锁
如果某个表长时间处于锁定状态,那可能是竞争资源引起了进程死锁(即:多个进程互相在等待对方释放锁)。导致数据库长时间锁定/死锁表的可能因素主要有:
1、事务处理时间较长,在并发较大情况下容易导致死锁;
2、表未加索引导致全表扫描,耗时较久;
3、多个进程间存在循环等待条件,每个都占用对方申请的下一个资源。
如何定位被锁住的表?
不同数据库定位锁表的方法不尽相同,此处以SQLServer为例看看如何定位被锁的表。SQLServer可通过SQLServerProfiler检测工具来查找,步聚如下:
以上就是偶的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流~偶是科技领域创作者,十年互联网从业经验,偶了解更多科技知识!