数据库是我们每天都会打交道的基础设施,围绕数据库或数据库服务器的问题每天都在发生,我们梳理下那些年我们遇到的数据库问题。
问:[机器宕机] all(#2) icmp.ping.alive from=gh == 0
答:切除流量,重新扩容了一台,并加回服务器,做好预热
问:Can't connect to MySQL server onhost ,机器故障3次以上无法连接!已经读节点下线。
答:从库宕机,流量已自动摘,剩余从库是否能够支撑,需要评估,从库配置一般需要按照两倍评估,一般没有问题
问:实例异常 all(#2) mysql_alive_local
答:机器异常自动下线,一般是因为机器过老,可以陆续下掉老机器。宕机原因可能是磁盘损坏导致
问:[机器宕机] all(#2) icmp.ping.alive from=yf == 0
答:从库扩容,或主库宕机,自动主从切换导致,会自动补从库,业务上需要观察是否恢复
问:runtime=work all(#3) Seconds_Behind_Master
答:1. 可能业务上写QPS比较大,比如业务陡增或压测流量,业务上做好限流
2. 可以观察下db的qps是否有增长,或者行级别的写入有没有上涨
3. 也有可能在进行ddl操作,导致从库有延迟
4. 表空洞清理也会导致这个问题
5. 改表操作,也会有这个问题
6. 更新数据量太大了,导致主从延迟
问:runtime=work all(#3) load.1minPerCPU >= 1.5
答:1.可能某个sql有问题,比如做的聚合运算太多了,造成cpu过高,可以先把sql语句kill掉2.业务上需要避免过大的定时任务对db造成较大的读写压力,可以增加限制,同时优化sql
3.关键时刻db做好sql限流
4. limit的值太大了也会有这个问题
5. 慢查询导致,比如大量update夯住了,无索引update
问:慢查询1分钟>1800 all(#6) Slow_queries
答:慢sql导致。
1.sql优化,加索引
问:连接使用率 all(#1) Conn_used_ratio
答:1.大量流量导致连接减少,比如压测流量
2. 或者连接这个db的应用服务器数量增加了,导致连接增多
问:并发线程数 all(#3) Threads_running >= 256
答:1.磁盘满了
2. 大量慢查询,扫描行数过多,先把sql限流,或直接kill掉sql语句,业务上需要快速定位下sql来源,然后改下业务逻辑
3. 如果sql中in值超过200个,会退化成范围查询,会导致索引失效,所以大家要注意在写sql,有in条件时,控制不要到200个
4. 压测也会导致这个问题
5. sql无索引,慢查询导致
6. sql inlist 数量过多,且多为查询冷数据,buffer命中不高,产生慢查
问:网卡出流量使用率 all(#3) net.if.out.percent iface=eth0 >= 80
答:可能网卡配置低了,比如正常是万兆,结果配置成了千兆网卡机器
问:MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
答:锁等待超时,比如删除数据没用到索引,导致全表扫描,需要改成适合索引的删除,或对sql语句增加索引
问:网卡发生降速 bdiff(#2) net.if.raw_speed iface=bond0 < 0
答:网卡故障
来源:oschina
链接:https://my.oschina.net/u/1000241/blog/3186834