当我们mysql数据库实例超过100%时,这种情况都是因sql性能问题导致,实例出现卡主现象: 1.原理,cpu消耗过大有慢sql造成,慢sql包括全表扫描,扫描数据量太大,内存排序,磁盘排序,锁争用等; 2.表的现象sql执行状态为:sending data,copying to tmp table,copying to tmp table on disk,sorting result,using filesort,locked; 3.解决方式:登陆数据库,show processlist查看当前正在执行的sql,当执行完show processlist后出现大量语句,通常 状态如条2所写,sql有性能问题 a.sending data:sql正从表中查询数据,如果查询条件没有适当索引,会导致sql执行时间过长 b.copying to tmp table on disk:因临时结果集太大,超过数据库规定的临时内存大小,需要拷贝临时结果集到磁盘上 c.sorting result,using filesort:sql正在执行排序操作,排序操作会引起较多的cpu消耗,可以通过添加索引,或 减小排序结果集 不同的实例规格iops能力不同,如,iops为150个,也就是每秒能够提供150次的随机磁盘io操作,所以如果用户的数据量 很大,内存很小,因iops的限制,一条慢sql就有可能消耗掉所有io资源,而影响其他sql查询,对于数据库就是所有的sql 需要执行很长时间才返回结果集,对于应用会造成整体响应变慢。(责任编辑:最模板) |