數據庫MySQL調優實戰經驗總結

MySQL 數據庫的使用是很是的普遍,穩定性和安全性也很是好,經歷了無數大小公司的驗證。僅可以安裝使用是遠遠不夠的,MySQL 在使用中須要進行不斷的調整參數或優化設置,纔可以發揮 MySQL 的最大做用。下邊的內容是我在工做中經驗的總結,也做爲本身的工做筆記,若是可以幫助到有須要的同志就更好了。MySQL 的優化能夠從個方面來作:mysql

1、架構層面sql

一、作主從複製。
二、實現讀寫分離。
三、分庫分表。
數據庫

2、系統層面緩存

一、增長內存。
二、硬盤使用固態硬盤 SSD。
三、給磁盤作 raid0 或者 raid5 以增長磁盤的讀寫速度。
四、能夠從新掛載磁盤,並加上 noatime 參數,這樣能夠減小磁盤的 I/O。安全

3、MySQL自己的優化服務器

一、若是未配置主從同步,能夠把 bin-log 功能關閉,減小磁盤 I/O。
二、在 my.cnf 中加上 skip-name-resolve ,這樣能夠避免因爲解析主機名延遲形成 M有SQL 執行慢。
三、調整幾個關鍵的 buffer 和 cache。調整的依據,主要根據數據庫的狀態來調試。如何調優能夠參考
四、根據具體的使用場景,選擇合適的存儲引擎。架構

4、應用層次性能

查看慢查詢日誌,根據慢查詢日誌優化程序中的 SQL 語句,好比增長索引優化

5、調整關鍵的buffer和cachespa

一、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%' 得到)。注意:該參數值設置的過大反而會是服務器總體效率下降!

二、table_open_cache

打開一個表的時候,會臨時把表裏面的數據放到這部份內存中,通常設置成 1024 就夠了,它的大小咱們能夠經過這樣的方法來衡量: 若是你發現 open_tables 等於 table_cache,而且 opened_tables 在不斷增加,那麼你就須要增長 table_cache 的值了(上述狀態值可使用 SHOW STATUS LIKE 'Open%tables' 得到)。注意,不能盲目地把 table_cache 設置成很大的值。若是設置得過高,可能會形成文件描述符不足,從而形成性能不穩定或者鏈接失敗。

三、sort_buffer_size

查詢排序時所能使用的緩衝區大小,該參數對應的分配內存是每鏈接獨佔! 若是有 100 個鏈接,那麼實際分配的總共排序緩衝區大小爲100 × 4 = 400MB。因此,對於內存在 4GB 左右的服務器推薦設置爲:4-8M。

四、read_buffer_size

讀查詢操做所能使用的緩衝區大小。和 sort_buffer_size 同樣,該參數對應的分配內存也是每鏈接獨享!

五、join_buffer_size

聯合查詢操做所能使用的緩衝區大小,和 sort_buffer_size 同樣,該參數對應的分配內存也是每鏈接獨享!

六、myisam_sort_buffer_size

這個緩衝區主要用於修復表過程當中排序索引使用的內存或者是創建索引時排序索引用到的內存大小,通常 4G 內存給 64M 便可。

七、query_cache_size

MySQL查詢操做緩衝區的大小,經過如下作法調整:SHOW STATUS LIKE ‘Qcache%’; 若是Qcache_lowmem_prunes該參數記錄有多少條查詢由於內存不足而被移除出查詢緩存。經過這個值,用戶能夠適當的調整緩存大小。若是該值很是大,則代表常常出現緩衝不夠的狀況,須要增長緩存大小Qcache_free_memory:查詢緩存的內存大小,經過這個參數能夠很清晰的知道當前系統的查詢內存是否夠用,是多了,仍是不夠用,咱們能夠根據實際狀況作出調整。通常狀況下 4G 內存設置 64M 足夠了。

八、thread_cache_size

表示能夠從新利用保存在緩存中線程的數,參考以下值:1G  —> 8; 2G  —> 16; 3G  —> 32; 3G  —> 64
除此以外,還有幾個比較關鍵的參數

九、thread_concurrency

這個值設置爲 CPU 核數的2倍便可。

十、wait_timeout

表示空閒的鏈接超時時間,默認是:28800s,這個參數是和 interactive_timeout 一塊兒使用的,也就是說要想讓 wait_timeout 生效,必須同時設置 interactive_timeout,建議他們兩個都設置爲10。

十一、max_connect_errors

是一個 MySQL 中與安全有關的計數器值,它負責阻止過多嘗試失敗的客戶端以防止暴力破解密碼的狀況。與性能並沒有太大關係。爲了不一些錯誤咱們通常都設置比較大,好比說10000。

十二、max_connections

最大的鏈接數,根據業務請求量適當調整,設置 500 足夠。

1三、max_user_connections

是指同一個帳號可以同時鏈接到 mysql 服務的最大鏈接數。設置爲 0 表示不限制。一般咱們設置爲 100 足夠。

----- 待更新 -----

相關文章
相關標籤/搜索