提升MySQL性能的一些辦法
最近老是有一台阿裡雲的RDS數據庫服務器有偶然主備切換的情況,網站也有偶爾很慢的情況,總體這台RDS的負載很輕,就是不知道偶爾有什麼SQL語句觸發了問題,這些天和同事一起排查、測試,把一些辦法記錄下來:
這是MySQL分類的頁面,點擊下面标題查看詳細文章内容:
最近老是有一台阿裡雲的RDS數據庫服務器有偶然主備切換的情況,網站也有偶爾很慢的情況,總體這台RDS的負載很輕,就是不知道偶爾有什麼SQL語句觸發了問題,這些天和同事一起排查、測試,把一些辦法記錄下來:
很長時間以來,我們在做MySQL數據轉移的時候都是按照[[MySQL設置]]這篇文章裡面的說法:
這段時間我們有個網站不斷更新内容,流量在不斷增長的同時,也引來了大量采集者,現在的采集者已經非常專業了,IP池不斷更換,User Agent也随機變化,甚至Referer也做了不同的僞裝,讓我們花了很多時間來分析Apache日志,不斷修改屏蔽條件,鬥智鬥勇。
最近還在設法降低Drupal網站的MySQL負載,前些天嘗試了安裝entity cache,一般情況下可以把一個頁面的70-120個mysql查詢減少10個左右,然後把memcache使用的内存從1G增加到2G,應該會有一些幫助。
Drupal的Views是個非常強大、靈活的工具,但用得不合适也可能導緻數據庫負載的飙升。最近把Drupal站啟用UTF8MB4支持,轉換程序自動把以前的MyISAM引擎轉為InnoDB了,也因此引起阿裡雲RDS的IOPS升高。
今年以來将我們以前托管或者租用的服務器全面轉向阿裡雲,除了采用ECS服務器以外,還有一項重要的是采用了RDS數據庫服務器,這對于服務的穩定性、各項指标的監控、調優等都有幫助。
不過随着近期更多數據庫轉到RDS上,空間的占用、IOPS的升高等問題也越來越明顯,增加RDS空間、升級RDS規格肯定是有用的,但一味這樣做的話,費用會明顯飙升,還是得想辦法優化。
以前就用過自己搭建MySQL服務器的兩種存儲引擎MyISAM和InnoDB(也用過一點Memory方式),在今年初轉向阿裡雲關系型數據庫服務RDS的時候,看到可調參數中有一個TokuDB,不過不太了解也沒有管。
以前使用的MySQL存儲引擎考慮到用多塊硬盤放置各個庫以便分散負載都是固定為MyISAM,現在搬遷到阿裡雲RDS後,考慮到查詢效率及空間大小也保持繼續用MyISAM。不過今天同事發現一個銷售數據的網站在購物車結算的時候報錯: