文档章节

MyISAM表锁的解决方案

Airship
 Airship
发布于 2016/01/25 10:25
字数 483
阅读 25
收藏 0

Table_locks_immediate和Table_locks_waited两个状态:

Table_locks_immediate表示立即释放表锁数,Table_locks_waited表示需要等待的表锁数,
如果Table_locks_immediate / Table_locks_waited > 5000,说明不严重,
因为InnoDB是行锁而MyISAM是表锁,对于高并发写入的应用InnoDB效果会好些。
示例中的服务器Table_locks_immediate / Table_locks_waited = 235,MyISAM不太好。

?Table_locks_immediate 
The number of times that a request for a table lock could be granted immediately.

?Table_locks_waited 
The number of times that a request for a table lock could not be granted immediately and a wait was needed. If this is high and you have performance problems, you should first optimize your queries, and then either split your table or tables or use replication.

实际上应该关心的是Table_locks_waited的值
这是我们服务器上的一个值
mysql> show global status like 'table%';
+-----------------------+---------+
| Variable_name         | Value   |
+-----------------------+---------+
| Table_locks_immediate | 1147514 |
| Table_locks_waited    | 135     |
+-----------------------+---------+

解决方案大概有如下几种: 
MyISAM存储引擎有一个系统变量concurrent_insert,专门用以控制其并发插入的行为,其值分别可以为0、1或2。 
0 不允许并发操作 
1 如果MyISAM表中没有空洞(即表的中间没有被删除的行),MyISAM允许在一个进程读表的同时,另一个进程从表尾插入记录。这也是MySQL的默认设置。 
2 无论MyISAM表中有没有空洞,都允许在表尾并发插入记录

使用--low-priority-updates启用mysqld。这将给所有更新(修改)一个表的语句以比SELECT语句低的优先级。在这种情况下,在先前情形的最后的SELECT语句将在INSERT语句前执行。 
为max_write_lock_count设置一个低值,使得在一定数量的WRITE锁定后,给出READ锁定 
使用LOW_PRIORITY属性给于一个特定的INSERT,UPDATE或DELETE较低的优先级 
使用HIGH_PRIORITY属性给于一个特定的SELECT 
使用INSERT DELAYED语句

综合自己的业务需求,使用了方案2。看来需要不断监测服务器状态,再进行更合适的调整。


本文转载自:http://www.ttlsa.com/database/mysql_data_will_be_migrated_to_redis/

Airship
粉丝 44
博文 994
码字总数 20464
作品 0
南京
高级程序员
私信 提问
MySQL 针对 MyISAM 表锁的解决方案

最近服务器上经常出现mysql进程占CPU100%的情况,使用show processlist命令后,看到出现了很多状态为LOCKED的sql。使用show status like 'table%'检查Table_locks_immediate和Table_locks_w...

华宰
2011/02/16
1K
0
MyISAM InnoDB 区别

MyISAM 和 InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型...

菜到没谱
2012/09/12
0
0
面试宝典系列-Mysql引擎Innodb和MyISAM区别

InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”   两种类型最主要的差别...

suyain
2018/07/18
0
0
MySQL存储引擎——MyISAM与InnoDB区别

  InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的...

一零贰IV
2018/05/30
0
0
MyISAM 和 InnoDB

InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具 体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强...

烽焱10仴
2013/03/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Python猫荐书系列之七:Python入门书籍有哪些?

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/ArN-6mLPzPT8Zoq0Na_tsg 最近,猫哥的 Python 技术学习群里进来了几位比较特殊的同学:一...

豌豆花下猫
29分钟前
2
0
一、容器(Containers)

在容器模型中,容器大致类似于VM。他们的主要不同之处在于,每个容器不需要自己完整的操作系统。事实上,所有单个主机上的容器共享整个操作系统。这就释放了大量的系统资源,如CPU、RAM和存储...

倪伟伟
38分钟前
3
0
Guava RateLimiter限流源码解析和实例应用

在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高...

算法之名
42分钟前
7
0
国产达梦数据库与MySQL的区别

背景 由于项目上的需要,把项目实现国产化,把底层的MySQL数据库替换为国产的达梦数据库,花了一周的时间研究了国产的数据库-达梦数据库,它和MySQL有一定的区别,SQL的写法也有一些区别。 ...

TSMYK
51分钟前
1
0
老也有错?35岁程序员是一道坎,横亘在每个技术职场人的心中

随着互联网的高速发展变革,大龄恐惧症越来越多地在技术圈被人讨论。很多程序员在工作5-10年以后,都会开始思考5年、10年甚至更久以后的自己,会是怎样一种生活工作状态,以及是否会被时代抛...

我最喜欢三大框架
57分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部