MySQL調優能夠從幾個方面來作:mysql
2.系統層次:
增長內存;
給磁盤作raid0或者raid5以增長磁盤的讀寫速度;
能夠從新掛載磁盤,並加上noatime參數,這樣能夠減小磁盤的i/o;sql
MySQL自己調優:
(1) 若是未配置主從同步,能夠把bin-log功能關閉,減小磁盤i/o
(2) 在my.cnf中加上skip-name-resolve,這樣能夠避免因爲解析主機名延遲形成mysql執行慢
(3) 調整幾個關鍵的buffer和cache。調整的依據,主要根據數據庫的狀態來調試。如何調優能夠參考5.數據庫
應用層次:
查看慢查詢日誌,根據慢查詢日誌優化程序中的SQL語句,好比增長索引緩存
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同樣,該參數對應的分配內存也是每鏈接獨享!ide
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足夠