明道洋 李斯娜

摘要:该文探讨MySql锁竞争产生的原因,采取哪些机制可以有效避免避免锁竞争,减少MySQL用户的等待时间。
关键词:数据库;MySql锁竞争;死锁
中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)20-4795-02
MySQL是一个小型关系型数据库管理系统,广泛地应用于Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
MySQL中通过锁机制,可以实现多线程同时对某个表进行操作。在某个时刻,用户甲、用户乙、用户丙可能会同时或者先后(前面一个作业还没有完成)对数据表A进行查询或者更新的操作(如图1所示)。当某个线程涉及到更新操作时,就需要获得独占的访问权。在更新的过程中,所有其它想要访问这个表的线程必须要等到其更新完成为止。此时就会导致锁竞争的问题。从而导致用户等待时间的延长。该文讲探讨采取哪些措施可以有效避免锁竞争,减少MySQL用户的等待时间。
1什么是锁竞争
为了更加清楚的说明这个问题,让我们先模拟一个日常的案例。
首先,用户甲对数据表A发出了一个查询请求。然后,用户乙又对数据表A发出了一个更新请求。此时用户乙的请求只有在用户甲的作业完成之后才能够得到执行。最后,用户丙又对数据表A发出了一个查询请求。在MySQL数据库中,更新语句的优先级要比查询语句的优先级高,为此用户丙的查询语句只有在用户乙的更新作业完成之后才能够执行。……