12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
ADADADADAD
mysql数据库 时间:2024-12-25 09:57:29
作者:文/会员上传
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
今日发现网站访问慢,一次进行了排查,开始思路混乱,下面来梳理下一、故障分析 首先,判断访问慢现象,是个人还是集体??? 个人现象排查:检查个人网络,pc,浏览器、中毒等,无需多说自己百度;
以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。
今日发现网站访问慢,一次进行了排查,开始思路混乱,下面来梳理下
一、故障分析
首先,判断访问慢现象,是个人还是集体???
个人现象排查:检查个人网络,pc,浏览器、中毒等,无需多说自己百度;
集体现象排查:检查核心路由交换,ISP运行商网络,ARP***,DNS服务,各服务器状态;
服务状态排查:zabbix监控;创建测试页面测试: 静态页面=》动态页面=》动态交互页面
通过上述排查,当测试php与mysql动态交互页面很慢,所以确定为mysql服务器异常,立刻登录mysql,通过top命令 查看服务器负载,发现 mysql竟然百分之两百的cpu,引起Mysql 负载这么高的原因,估计是有SQL慢查询语句或磁盘I/O问题;
二、MySQL负载高排查思路
1. 确定高负载的类型,top命令看负载高是CPU还是磁盘I/O。
2. mysql 下查看当前的连接数与执行的sql 语句。
3. 检查慢查询日志,可能是慢查询引起负载高。
4. 检查硬件问题,是否磁盘故障问题造成的。
5. 检查监控平台,对比此机器不同时间的负载。
1)确定负载类型(top)
top-10:14:18up23days,11:01,1user,loadaverage:124.17,55.88,24.70Tasks:138total,1running,137sleeping,0stopped,0zombieCpu(s):2.4%us,1.0%sy,0.0%ni,95.2%id,2.0%wa,0.1%hi,0.2%si,0.0%stMem:3090528ktotal,2965772kused,124756kfree,93332kbuffersSwap:4192956ktotal,2425132kused,1767824kfree,756524kcachedPIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND30833mysql1506250m2.5g4076S257.149.9529:34.45mysqld
2)查看当前MySQL的连接数与执行的sql 语句
#无需登陆,非交互查询,可以grep过滤,更直观看结果mysql-uroot-pqiuyuetao-S/data/3306/mysql.sock-e"showfullprocesslist;"|egrep-vi"sleep"#登陆myslq查看showfullprocesslist;IdUserHostdbCommandTimeStateInfo192slave8.8.8.142:39820NULLBinlogDump58982Hassentallbinlogtoslave;waitingforbinlogtobeupdatedNULL194slave8.8.8.120:41075NULLBinlogDump58982Hassentallbinlogtoslave;waitingforbinlogtobeupdatedNULL424891biotherm8.8.8.46:57861biothermQuery493SendingdataSELECT*FROMxxx_listWHEREtid='1112'ANDdel=0ORDERBYidDESCLIMIT0,4424917biotherm8.8.8.49:50984biothermQuery488SendingdataSELECT*FROMxxx_listWHEREtid='1112'ANDdel=0ORDERBYidDESCLIMIT0,4..............................................430330biotherm8.8.8.42:35982biothermQuery487SendingdataSELECT*FROMxxx_listWHEREtid='1112'ANDdel=0
3)记录SQL慢查询
编辑Mysql 配置文件(my.cnf),在[mysqld]字段添加以下几行:
log_slow_queries=/data/3306/slow_queries.log#慢查询日志路径long_query_time=2#记录SQL查询超过2s的语句log-queries-not-using-indexes=1#记录没有使用索引的sql
查看慢查询日志
tail/data/3306/slow_queries.log#Time:1303059:48:13#User@Host:biotherm[biotherm]@[8.8.8.45]#Query_time:1294.881407Lock_time:0.000179Rows_sent:4Rows_examined:1318033SETtimestamp=1363916893;SELECT*FROMxxx_listWHEREtid='11xx'ANDdel=0ORDERBYidDESCLIMIT0,4;
日志参数说明:
Query_time:0Lock_time:0Rows_sent:1Rows_examined:54#查询时间锁定时间查询结果行数扫描行数##主要看扫描行数多的语句,然后去数据库加上对应的索引,再优化下变态的sql语句。
其它方法:
PHP程序中,不使用持久连接,即使用mysql_connetct 而不是pconnect(JAVA调整连接池)
PHP程序执行完,应该显示调用mysql_colse ##很多开发只有open 没有colse
SQL慢查询语句优化地址:http://qiuyt.blog.51cto.com/1229789/1924958
4)极端情况kill sql进程
找出占用cpu时间过长的sql,在mysql下执行如下命令:showfullprocesslist;确定后一条sql处于Query状态,且Time时间过长,锁定它的ID,执行如下命令:killQUERY269815764;
注意:杀死 sql进程,可能导致数据丢失,所以执行前要衡量数据的重要性。
11-20
11-19
11-20
11-20
11-20
11-19
11-20
11-20
11-19
11-20
11-19
11-19
11-19
11-19
11-19
11-19