Processlist命令

使用show processlist命令,查看mysql中线程的状态,相关参数含义,参见“mysql show processlist命令 详解”。这个命令,最好在压力测试出现问题的时候使用,因为show processlist截取的是当前状态下的线程状态。附上一个脚本,用于截取此命令的数据并保存到文本中。建议取的间隔时间在5s以上,否则可能对服务器造成一定的压力。
_date=`date +%y-%m-%d`
_time=`date +%H:%M`
_dir=/root/process/
_log=$_dir$_date.log

touch $_log
echo begin at $_time:>>$_log
for ((i=1;i<2;)) do
date +%H:%M:%S>>$_log
/usr/local/mysql/bin/mysqladmin processlist -u root –p123>>$_log
sleep 5s
done
说明:绿色部分为mysql地址,-u后是你的用户名,-p后是mysql的密码
脚本保存在.sh文件里,需要先转换成可执行文件。然后用./文件名来执行。注意,这样执行是在前台执行。可以用at来提交作业到后台执行。但是不建议。

对于show processlist中出现大量锁的情况,有以下两种可能。
因为我们的表类型是myisam,采用的是表级锁。我只针对这种情况进行分析。对于innoDB类型(采用行级锁),因为是事务型的表,一旦出现琐的情况,就要考虑是否事务使用不当造成死锁。
言归正传。因为表级别的锁不会出现死锁,但是mysql对这种表的规定是,写锁的级别高于读锁。如果有一个update操作作用于表A,那么所有其他作用于表A的操作都会被锁。所以,如果表A的update操作很频繁,建议不要使用myisam表。另一个针对mysiam表的锁的情况是:如果一个select操作很慢,在他结束之前,如果出现一个update操作,根据锁的优先级别,所有其他的查询操作全部被锁。这种情况,首先考虑优化那个慢的查询语句。如果没有优化空间,可以考虑拆分表或复制表的方式。我们的系统就是第二种原因,后来把那个功能暂时屏蔽了之后系统就恢复了正常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值