龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > MySQL 技术 >

Mysql数据库锁定机制详细介绍(8)

时间:2014-12-02 02:53来源:网络整理 作者:网络 点击:
分享到:
等待sessiona释放资源,被阻塞 两个 session 互相等等待对方的资源释放之后才能释放自己的资源,造成了死锁 合理利用锁机制优化MySQL MyISAM 表锁优化建议 对

等待sessiona释放资源,被阻塞

  两个 session 互相等等待对方的资源释放之后才能释放自己的资源,造成了死锁

 

合理利用锁机制优化MySQL

MyISAM 表锁优化建议

对于MyISAM存储引擎,虽然使用表级锁定在锁定实现的过程中比实现行级锁定或者页级锁所带来的附加成本都要小,锁定本身所消耗的资源也是最少。但是由于锁定的颗粒度比较到,所以造成锁定资源的争用情况也会比其他的锁定级别都要多,从而在较大程度上会降低并发处理能力。

所以,在优化MyISAM存储引擎锁定问题的时候,最关键的就是如何让其提高并发度。由于锁定级别是不可能改变的了,所以我们首先需要尽可能让锁定的时间变短,然后就是让可能并发进行的操作尽可能的并发。

 1、缩短锁定时间

缩短锁定时间,短短几个字,说起来确实听容易的,但实际做起来恐怕就并不那么简单了。如何让锁定时间尽可能的短呢?唯一的办法就是让我们的Query执行时间尽可能的短。

尽两减少大的复杂Query,将复杂Query分拆成几个小的Query分布进行;

尽可能的建立足够高效的索引,让数据检索更迅速;

尽量让MyISAM存储引擎的表只存放必要的信息,控制字段类型;

利用合适的机会优化MyISAM表数据文件;

2、分离能并行的操作

说到MyISAM的表锁,而且是读写互相阻塞的表锁,可能有些人会认为在MyISAM存储引擎的表上就只能是完全的串行化,没办法再并行了。大家不要忘记了,MyISAM的存储引擎还有一个非常有用的特性,那就是ConcurrentInsert(并发插入)的特性。

MyISAM存储引擎有一个控制是否打开Concurrent Insert功能的参数选项:concurrent_insert,可以设置为0,1或者2。三个值的具体说明如下:

concurrent_insert=2,无论MyISAM存储引擎的表数据文件的中间部分是否存在因为删除数据而留下的空闲空间,都允许在数据文件尾部进行ConcurrentInsert;

concurrent_insert=1,当MyISAM存储引擎表数据文件中间不存在空闲空间的时候,可以从文件尾部进行ConcurrentInsert;

concurrent_insert=0,无论MyISAM存储引擎的表数据文件的中间部分是否存在因为删除数据而留下的空闲空间,都不允许ConcurrentInsert。

3、合理利用读写优先级

精彩图集

赞助商链接