最近一個客戶的新系統上線後

原本使用舊的系統是沒有問題的

但導入新系統後居然發生了系統緩慢的現象

原因就在於該客戶先前的舊系統幾乎是把所有東西通通丟到資料庫去做處理

包含了多媒體檔案,圖片,Session,點擊記錄,有的沒的雜七雜八通通丟進去

該客戶的瀏覽人數又多..

因此MySQL負載極高

因此發生了系統延遲的狀況!!

客戶來電後進行緊急處理作業

首先先確定出問題出在MySQL

原因是先利用 top 指令,以及分析Linux Proc 底下資訊

查出httpd 產生了一堆sleep進程,這些進程通通是對應到MySQL去

確定了問題所在之後

開始進行MySQL優化調整

將MySQL的my.cnf 調整成較寬裕的設定,

並且調整了Apache的回收機制,

情況有改善,但MySQL的Loading依然很重

因此為了檢查問題所在,即開啟了MySQL慢查詢

開啟方式請更改My.cnf (一般放在etc目錄下)

增加如以下之設定值

log-slow-queries
long_query_time = 1
log-queries-not-using-indexes

接著到MySQL目錄下(預設是 /var/lib/mysql/xxx.log )

用vi打開該log

就可以看到離譜的SQL語句佔用

結果發現某句SQL居然佔據高達10幾秒的查詢時間

Order by RAND()

查詢了一下MySQL手冊

發現這句SQL語句非常的沒有效率

因此對其進行改寫

改寫方式可以採用這種替代方式

Loading瞬間下降數倍.

伺服器恢復暢快無比

以上就是此次處理的經驗

分享給大家 順便做個筆記