MySQL线上常见故障剖析
各种故障应用获取不到连接池数据库响应慢SQL慢服务器load高SWAP表不见了MySQLcrash主机Hung
观察你的系统
MySQL
活动进程(Processlist)
日志文件(slowlog,alertlog,generalquerylog,binlog)
Statusvariables(comselect,cominsert,。etc)
InnoDB(物理读、逻辑读、innodbstatus)
参数配置
Stacktrace(plussourcecode)
SQL
执行计划,explain
OS
内存,SWAP,procmeminfo
CPU,load,ps
IO(磁盘、网络)
Iostat
Profile
Oprofile
gprof
Case1:XXX系统报连接池满
iostat
orzdba
slowlog
What’sinslowlog?
Mkquerydigest
mkquerydigest全面分析slowlog
explain
查看执行计划
选择了不好的索引
哪些SQL在执行
Slowlog
Setgloballongquerytime0
Generallog
Binlog
ForDML,mysqlbinlogbinlog解析
Processlist
Ifsomequeryisreallyslow
Tcpdump
Tcpdumpmkquerydigest
Case2:很多MySQL线程都卡住了
Processlist
Id:1842782User:provideHost:192。168。0。1:59068db:provideCommand:Query
Time:2326
State:Waitingfortable
Info:updatetablexxxxsetsoldsold1,moneymoney39800,Gmtcreatenow()wherexxxxid1andday2011100700:00:00
Id:1657130User:provideHost:192。168。0。2:40093db:provideCommand:Query
Time:184551
State:Sendingdata
Info:selectxxxxid,sum(sold)assoldfromtablexxxxwherexxxxidin(selectxxxxidfromtablexxxxwhereGmtcreate2011100508:59:00)groupbyxxxxid
1044systemuserConnect27406FlushingtablesFLUSHTABLES
Processlist分析
谁是因,谁是果?
Systemuserexecuteflushtables
Systemuser是谁,mysql主从复制(iothread,sqlthread)
Binlog
谁最先执行了flushtables
人工执行?
App?没有权限
定时任务,备份
Xtrabackup会执行flushtableswithreadlock,不记录到binlog
Mysqldump理论上不会执行flushtables,但如果有bug呢
(http:bugs。mysql。combug。php?id35157)
Case3:服务器load高
调查问题
SQL层面未见明显异常
业务没有变动,没有发布
调用量没有明显变化
Iostat
rs,ws
await,svctm
avgrqsz
Blktrace,btt
IO调度算法
cfqdeadline
Case4:DDLlosttable
alert。log大量报错
持续10几分钟后,Tablelost。
几百个进程都block在openingtables,这些表都不是DDL的那个表
丢表时的alert。log
Pstackmasterthread
Pstackaltertable
Case5:MyISAM
Orzdba
vmstat
stracemysqld
Oprofileglobal
Oprofilemysqld
pstack
Summary