MySQL的并发控制 锁粒度
原创恩赐挽歌 ©著作权
文章标签 MySQL 并发控制 锁粒度 读锁 文章分类 MySQL 数据库
©著作权归作者所有:来自51CTO博客作者恩赐挽歌的原创作品,请联系作者获取转载授权,否则将追究法律责任
MySQL的并发控制:
在MySQL数据库的操作过程中通常会遇到这种问题:一个用户正在读某一数据时,而另外一个用户在删除或修改它,那么第一个用户就会得到一个错误的数据。解决这类问题的方法是使用并发控制。
在处理并发读或并发写时,系统会使用一套锁系统来解决问题。这种锁系统有两种锁组成,通常称之为共享锁(Shared Lock)和排他锁(Exclusive Lock),或读锁(Read Lock)和写锁(Write Lock)
某一资源上的读锁是共享的,或者说时互不阻塞的。同一时间,多个用户可以读取统一资源,而互不干扰。写锁实排他的,一个写锁会阻止其他的读锁或写锁,这是出于安全策略的考虑。
一种提高共享资源并发性的方法是让锁定对象更有选择性。只锁定部分要修改的数据,而不是所有的资源。任何时间,在给定的资源上,被枷锁的数据量越小,就可以允许更多的并发修改,只要相互之间不冲突即可。这么做的问题也会消耗系统资源,增加系统的开销,如果系统花费大量的时间来管理锁,而不是读写数据,那么系统整体性能可能会因此受到影响。
每种MySQL存储引擎都可以实现独有的锁策略(Lock Policy)或锁粒度(Lock Granularitey)。在存储引擎设计中,锁管理(Lock Management)事个非常重要的议题。将锁粒度调整到某一水平,就能为某种应用提供更佳的性能,由于MySQL提供了多种引擎,所以不需要一个通用的解决方案,下面介绍两种重要的锁策略:
MySQL支持大多数基本的锁策略,其中开销最小的所策略是表锁,他将整个表加锁,当一个用户对表进行写操作时,用户可以获得一个写锁,写锁禁止其他的用户读写操作。写锁比读锁的优先级更高,即使有读操作用户已排在队列中,一个被申请的写锁仍可以排在所队列的前列。
行级锁可以支撑最大的并发处理,同时也带来最大的锁开销。行级锁由存储引擎实现,而不是由MySQL服务器实现。服务器完全不了解存储引擎里的锁实现方式
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章