其實,為客戶提供相關日志,不就是rackspace主要作的事?
俺們以後也可以效仿的。不要去解決,而是協助客戶定位。
<a href="http://blog.const.net.cn/a/17275.htm">http://blog.const.net.cn/a/17275.htm</a>
上文的思路明顯的。
top指令 檢視伺服器負載,發現 mysql竟然百分之兩百的cpu,引起mysql 負載這麼高的原因,估計是索引問題和某些變态sql語句.
排查思路
1. 确定高負載的類型,top指令看負載高是cpu還是io。
2. mysql 下執行檢視目前的連接配接數與執行的sql 語句。
3. 檢查慢查詢日志,可能是慢查詢引起負載高。
4. 檢查硬體問題,是否磁盤故障問題造成的。
5. 檢查監控平台,對比此機器不同時間的負載。
~~~~~~~~~~~~~~~~~
記錄慢查詢 編輯mysql 配置檔案(my.cnf),在[mysqld]字段添加以下幾行:
log_slow_queries = /usr/local/mysql/var/slow_queries.log #慢查詢日志路徑
long_query_time = 10 #記錄sql查詢超過10s的語句
log-queries-not-using-indexes = 1 #記錄沒有使用索引的sql
檢視慢查詢日志
tail /usr/local/mysql/var/slow_queries.log
# time: 130305 9:48:13
# user@host: biotherm[biotherm] @ [8.8.8.45]
# query_time: 1294.881407 lock_time: 0.000179 rows_sent: 4 rows_examined: 1318033
set timestamp=1363916893;
select * from xxx_list where tid = '11xx' and del = 0 order by id desc limit 0, 4;
4個參數 query_time: 0 lock_time: 0 rows_sent: 1 rows_examined: 54 分别意思為:查詢時間 鎖定時間 查詢結果行數 掃描行數,主要看掃描行數多的語句,然後去資料庫加上對應的索引,再優化下變态的sql 語句。
極端情況kill sql程序
找出占用cpu時間過長的sql,在mysql 下執行如下指令:
show processlist;
确定後一條sql處于query狀态,且time時間過長,鎖定它的id,執行如下指令:
kill query 269815764;
注意:殺死 sql程序,可能導緻資料丢失,是以執行前要衡量資料的重要性。
