那些年我们遇到的数据库问题

北慕城南 提交于 2020-03-03 22:04:27

数据库是我们每天都会打交道的基础设施,​围绕数据库或数据库服务器的问题每天都在发生,我们梳理下那些年我们遇到的数据库问题。

​问:[机器宕机]  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

答:网卡故障

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!