第 四 十 一 天:mysql 調 優 方 式

來源:互聯網
上載者:User

標籤:linux

小Q:世界上最快而又最慢,最長而又最短,最平凡而又最珍貴,最易被人忽視

      而又最讓人後悔的就是時間。                    ----高爾基


=======================================================================

MySQL調優可以從幾個方面來做:

1. 架構層:

做從庫,實現讀寫分離;

2.系統層次:

增加記憶體;

給磁碟做raid0或者raid5以增加磁碟的讀寫速度;

可以重新掛載磁碟,並加上noatime參數,這樣可以減少磁碟的i/o;

3. MySQL本身調優:

(1) 如果未配置主從同步,可以把bin-log功能關閉,減少磁碟i/o

(2) 在my.cnf中加上skip-name-resolve,這樣可以避免由於解析主機名稱延遲造成mysql執行慢

(3) 調整幾個關鍵的buffer和cache。調整的依據,主要根據資料庫的狀態來調試。如何調優可以參考5.

4. 應用程式層次:

查看慢查詢日誌,根據慢查詢日誌最佳化程式中的SQL語句,比如增加索引

5.儲存引擎最佳化 

MySQL支援不同的儲存引擎,主要使用的有MyISAM和InnoDB。

http://beibing.blog.51cto.com/10693373/1706050 

6.緩衝 

緩衝有很多種,為應用程式加上適當的緩衝策略會顯著提高應用程式的效能。由於應用緩衝是一個比較大的話題,所以這一部分還需要進一步調研。 

7.調整幾個關鍵的buffer和cache

1) key_buffer_size  首先可以根據系統的記憶體大小設定它,大概的一個參考值:1G以下記憶體設定128M;2G/256M; 4G/384M;8G/1024M;16G/2048M.這個值可以通過檢查狀態值Key_read_requests和 Key_reads,可以知道key_buffer_size設定是否合理。比例key_reads / key_read_requests應該儘可能的低,至少是1:100,1:1000更好(上述狀態值可以使用SHOW STATUS LIKE ‘key_read%’獲得)。注意:該參數值設定的過大反而會是伺服器整體效率降低!

2) table_open_cache 開啟一個表的時候,會臨時把表裡面的資料放到這部分記憶體中,一般設定成1024就夠了,它的大小我們可以通過這樣的方法來衡量: 如果你發現 open_tables等於table_cache,並且opened_tables在不斷增長,那麼你就需要增加table_cache的值了(上述狀態值可以使用SHOW STATUS LIKE ‘Open%tables’獲得)。注意,不能盲目地把table_cache設定成很大的值。如果設定得太高,可能會造成檔案描述符不足,從而造成效能不穩定或者串連失敗。

3) sort_buffer_size 查詢排序時所能使用的緩衝區大小,該參數對應的分配記憶體是每串連獨佔!如果有100個串連,那麼實際分配的總共排序緩衝區大小為100 × 4 = 400MB。所以,對於記憶體在4GB左右的伺服器推薦設定為4-8M。

4) read_buffer_size 讀查詢操作所能使用的緩衝區大小。和sort_buffer_size一樣,該參數對應的分配記憶體也是每串連獨享!

5) join_buffer_size 聯集查詢操作所能使用的緩衝區大小,和sort_buffer_size一樣,該參數對應的分配記憶體也是每串連獨享!

6) myisam_sort_buffer_size 這個緩衝區主要用於修複表過程中排序索引使用的記憶體或者是建立索引時排序索引用到的記憶體大小,一般4G記憶體給64M即可。

7) query_cache_size MySQL查詢操作緩衝區的大小,通過以下做法調整:SHOW STATUS LIKE ‘Qcache%’; 如果Qcache_lowmem_prunes該參數記錄有多少條查詢因為記憶體不足而被移除出查詢快取。通過這個值,使用者可以適當的調整緩衝大小。如果該值非常大,則表明經常出現緩衝不夠的情況,需要增加緩衝大小;Qcache_free_memory:查詢快取的記憶體大小,通過這個參數可以很清晰的知道當前系統的查詢記憶體是否夠用,是多了,還是不夠用,我們可以根據實際情況做出調整。一般情況下4G記憶體設定64M足夠了。

8) thread_cache_size 表示可以重新利用儲存在緩衝中線程的數,參考如下值:1G  —> 8 2G  —> 16 3G  —> 32  >3G  —> 64

除此之外,還有幾個比較關鍵的參數:

9) thread_concurrency 這個值設定為cpu核心數的2倍即可

10) wait_timeout 表示閒置連線逾時時間,預設是28800s,這個參數是和interactive_timeout一起使用的,也就是說要想讓wait_timeout 生效,必須同時設定interactive_timeout,建議他們兩個都設定為10

11) max_connect_errors 是一個MySQL中與安全有關的計數器值,它負責阻止過多嘗試失敗的用戶端以防止暴力破解密碼的情況。與效能並無太大關係。為了避免一些錯誤我們一般都設定比較大,比如說10000 

12) max_connections 最大的串連數,根據業務請求量適當調整,設定500足夠

13) max_user_connections 是指同一個帳號能夠同時串連到mysql服務的最大串連數。設定為0表示不限制。通常我們設定為100足夠 



詳細參考:http://blog.chinaunix.net/uid-11640640-id-3426908.html 

第 四 十 一 天:mysql 調 優 方 式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.