最近分析数据库问题总结(linux+mysql)

1、show processlist非常有用,正常状态下,非Sleep状态的进程应该只有几个,偶尔出现十几个、几十个,但是成百上线的就不正常了。Sleep状态的不用管,一般使用了连接池就会有大量的Sleep进程(连接)。

2、如何分析各种状态的连接数?首先执行mysql –uroot –p123456 –e “show processlist” | grep –v Sleep > tmp.txt将非Sleep状态的连接(进程)的情况输出到tmp.txt文件。然后就使用grep和wc -l来统计。比如我想知道有多少个Blocked,那么执行cat tmp.txt | grep Blocked | wc –l。

3、出现大量Blocked状态的连接,可以设置以下两个参数:low_priority_updates和concurrent_insert两个参数,具体数值网上查。前者的意思是让update/insert操作的优先级低于select操作。

4、不能忽略的一个事实是:select语句是会上锁的,是read锁,上了read锁之后,任何insert、update都会被Block住。而如果low_priority_updates=OFF的话,一旦有一个insert/update被Block住,此后来的select也会被Blocked。(以上都是指myisam同一个表)。因此一个大查询是有可能导致大量被Block的进程出现的。

5、MyIsam真的不适合频繁更新的系统。但InnoDB也有它的麻烦:备份麻烦、一个数据库写在一个文件不便于管理维护等,系统工程部的人不推荐使用。再只有MySQL可使用的情况下,使用好缓存,不去实时操作数据库是唯一的药方。

6、group by等类似操作时毒药,能不用尽量不用,尤其在高并发的系统中,尤其如此。

7、写了一个脚本放到了crontab,每段时间取一次show processlist的情况,对数据库情况分析非常有用:

#!/bin/bash
dd=`date +%Y-%m-%d%t%r`
echo $dd >>/usr/local/2.txt

/usr/local/mysql/bin/mysql -psd-9898w -h10.1.1.161 -e "show processlist" >/usr/local/1.txt

zs=`cat /usr/local/1.txt | wc -l`
sl=`cat /usr/local/1.txt | grep -v Sleep | wc -l`
echo -n  1.161 ${zs}//${sl} >>/usr/local/2.txt
echo "">>/usr/local/2.txt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值