春節前忙着把一些網站從自己獨立托管的服務器搬遷到阿裡雲的平台中去,以前自己的服務器都是購買的頂配硬件(幾年前就是16核、64G内存、8塊硬盤),安裝Linux+Apache+MySQL+PHP在同一台機器上,現在用了雲服務器ECS做Web服務器,用雲數據庫RDS做MySQL服務,應該來說更合理,不過實際運行中也遇到問題。
先搬遷了幾個小的網站,數據量不大、訪問量不大,所以搬遷過去沒有什麼大的負載,ECS/RDS以及帶寬什麼都很富裕。但在搬遷一個數據量偏大、訪問量也較大的網站時遇到問題,RDS的CPU總是100%,不運行自動檢測超時MySQL進程并自動殺死該進程的腳本就完全不行,運行後算是可以維持,但一部分頁面超時報錯。
我查看了一下,主要是MediaWiki的包含動态頁面列表DPL擴展的頁面報錯,懷疑是RDS配置選的過低,數次升級硬件配置、費用也在不斷升高,從260M到600M、1200M、2400M都還是不行,後來不知道怎麼碰巧就好了,此後負載一直非常低、用高配置RDS明顯有很大浪費,于是我又申請了一個新的RDS,準備遷移數據後退掉老的高配RDS,但在新的RDS上遇到同樣的問題,從260M升級到600M、1200M後問題依然存在,我知道再升級也沒用,還是有其它問題。
在通過阿裡雲售後服務工單很多次溝通後,發現是有一類比較複雜的SQL查詢語句在新老RDS上運行有明顯差異,再用explain仔細查看,同一條查詢語句在兩台RDS上運行的“執行計劃”居然不一樣,都是分為4個步驟,但權重一樣的步驟中執行的先後順序不一樣,老RDS上正确的執行計劃可以順利運行完,新RDS上糟糕的執行計劃導緻運行時間非常長最終進程堆積。
這個就太奇怪了而且太專業了,我查了很多資料也沒有找到答案,還是阿裡雲的DBA支持團隊厲害,查出是數據遷移後有一個表的統計數據不正确,修正後解決。他們的建議是:在表有大數據量改變後,重新手動收集下統計數據。 analyze table tab_name;
此後1200M的RDS運行就基本上沒有過大負載的問題了,觀察到春節過後可以把老RDS退掉。
先還懷疑過MySQL版本的問題、MediaWiki及DPL版本升級的問題、RDS硬件性能的問題等等,最後還是遷移後統計數據這樣的問題。在這裡對阿裡雲的工單系統贊一下,客服回複很及時、通知很方便、技術也很專業!👍
评论