《Mysql應用21條MySQL優(yōu)化建議(經驗總結)》要點:
本文介紹了Mysql應用21條MySQL優(yōu)化建議(經驗總結),希望對您有用。如果有疑問,可以聯系我們。
今天一個朋友向我咨詢怎么去優(yōu)化 MySQL,我按著思維整理了一下,大概粗的可以分為21個方向. 還有一些細節(jié)東西(table cache, 表設計,索引設計,程序端緩存之類的)先不列了,對一個系統(tǒng),初期能把下面做完也是一個不錯的系統(tǒng).MYSQL必讀
1. 要確保有足夠的內存MYSQL必讀
數據庫能夠高效的運行,最關建的因素需要內存足更大了,能緩存住數據,更新也可以在內存先完成.但不同的業(yè)務對內存需要強度不一樣,一保舉內存要占到數據的15-25%的比例,特別的熱的數據,內存基本要達到數據庫的80%大小.MYSQL必讀
2. 需要更多更快的CPUMYSQL必讀
MySQL 5.6可以利用到64個核,而MySQL每個query只能運行在一個CPU上,所以要求更多的CPU,更快的CPU會更有利于并發(fā).MYSQL必讀
3. 要選擇合適的操作系統(tǒng)MYSQL必讀
在官方建議估計最保舉的是Solaris, 從實際生產中看CentOS, REHL都是不錯的選擇,保舉使用CentOS, REHL 版本為6以后的,當然Oracle Linux也是一個不錯的選擇.雖然從MySQL 5.5后對Windows做了優(yōu)化,但也不保舉在高并發(fā)環(huán)境中使用windows.MYSQL必讀
4. 合理的優(yōu)化系統(tǒng)的參數MYSQL必讀
更改文件句柄? ulimit Cn 默認1024 太小
進程數限制? ulimit Cu?? 不同版本不一樣
禁掉NUMA? numctl Cinterleave=allMYSQL必讀
5. 選擇合適的內存分配算法MYSQL必讀
默認的內存分配就是c的malloc 現在也出現許多優(yōu)化的內存分配算法:MYSQL必讀
jemalloc and tcmallocMYSQL必讀
從MySQL 5.5后支持聲明內存儲辦法.
MYSQL必讀
或是直接指到so文件
MYSQL必讀
malloc-lib=/usr/local/lib/libtcmalloc_minimal.so
MYSQL必讀
6. 使用更快的存儲設備ssd或是固態(tài)卡MYSQL必讀
存儲介質十分影響MySQL的隨機讀取,寫入更新速度.新一代存儲設備固態(tài)ssd及固態(tài)卡的出現也讓MySQL 大放異彩,也是淘寶在去IOE中干出了一個漂亮仗.MYSQL必讀
7. 選擇良好的文件系統(tǒng)MYSQL必讀
保舉XFS, Ext4,如果還在使用ext2,ext3的同學請盡快升級別. 保舉XFS,這個也是今后一段時間Linux會支持一個文件系統(tǒng).MYSQL必讀
文件系統(tǒng)強烈保舉: XFSMYSQL必讀
8. 優(yōu)化掛載文件系統(tǒng)的參數MYSQL必讀
掛載XFS參數:MYSQL必讀
掛載ext4參數:
MYSQL必讀
如果使用SSD或是固態(tài)盤需要考慮:MYSQL必讀
? innodb_page_size = 4K
? Innodb_flush_neighbors = 0MYSQL必讀
9. 選擇適合的IO調度MYSQL必讀
正常請下請使用deadline 默認是noop
MYSQL必讀
10. 選擇合適的Raid卡Cache策略MYSQL必讀
請使用帶電的Raid,啟用WriteBack, 對于加速redo log ,binary log, data file都有好處.MYSQL必讀
11. 禁用Query CacheMYSQL必讀
Query Cache在Innodb中有點雞肋,Innodb的數據本身可以在Innodb buffer pool中緩存,Query Cache屬于結果集緩存,如果開啟Query Cache更新寫入都要去檢查query cache反而增加了寫入的開銷.MYSQL必讀
在MySQL 5.6中Query cache是被禁掉了.MYSQL必讀
12. 使用Thread PoolMYSQL必讀
現在一個數據對應5個以上App場景比較,但MySQL有個特性隨著連接增多的情況下性能反而下降,所以對于連接超過200的以后場景請考慮使用thread pool. 這是一個偉大的發(fā)明.MYSQL必讀
13. 合理調整內存MYSQL必讀
13.1 減少連接的內存分配
連接可以用thread_cache_size緩存,觀查屬于比較屬不如thread pool給力.數據庫在連上分配的內存如下:
MYSQL必讀
read_rnd_buffer_size +MYSQL必讀
join_buffer_size +MYSQL必讀
sort_buffer_size +MYSQL必讀
binlog_cache_size +MYSQL必讀
thread_stack +MYSQL必讀
2 * net_buffer_length …MYSQL必讀
)
MYSQL必讀
要把60-80%的內存分給innodb_buffer_pool_size.? 這個不要超過數據大小了,另外也不要分配超過80%不然會利用到swap.
?
14. 合理選擇LOG刷新機制
Redo Logs:
MYSQL必讀
C innodb_flush_log_at_trx_commit? = 2 // 較好性能MYSQL必讀
C innodb_flush_log_at_trx_commit? = 0 // 最好的情能
MYSQL必讀
binlog :MYSQL必讀
binlog_sync = 1? 需要group commit支持,如果沒這個功能可以考慮binlog_sync=0來獲得較佳性能.MYSQL必讀
數據文件:
MYSQL必讀
15. 請使用Innodb表MYSQL必讀
可以利用更多資源,在線alter操作有所提高. 目前也支持非中文的full text, 同時支持Memcache API拜訪.目前也是MySQL最優(yōu)秀的一個引擎.MYSQL必讀
如果你還在MyISAM請考慮快速轉換.MYSQL必讀
16. 設置較大的Redo logMYSQL必讀
以前Percona 5.5和官方MySQL 5.5比拼性能時,勝出的一個Tips就是分配了超過4G的Redo log ,而官方MySQL5.5 redo log不能超過4G. 從 MySQL 5.6后可以超過4G了,通常建Redo log加起來要超過500M. 可以通過觀查redo log產生量,分配Redo log大于一小時的量即可.MYSQL必讀
17. 優(yōu)化磁盤的IOMYSQL必讀
innodb_io_capactiy 在sas 15000轉的下配置800就可以了,在ssd下面配置2000以上.MYSQL必讀
在MySQL 5.6:
MYSQL必讀
innodb_io_capacity_max? =? min(2000, 2 * innodb_io_capacity)
MYSQL必讀
18. 使用獨立表空間MYSQL必讀
目前來看新的特性都是獨立表空間支持:
truncate table 表空間回收
表空間傳輸
較好的去優(yōu)化碎片等管理性能的增加,
整體上來看使用獨立表空間是沒用的.MYSQL必讀
19. 配置合理的并發(fā)MYSQL必讀
innodb_thread_concurrency =并發(fā)這個參數在Innodb中變化也是最頻繁的一個參數.不同的版本,有可能不同的小版本也有變動.一般保舉:MYSQL必讀
在使用thread pool 的情況下:
innodb_thread_concurrency = 0 就可以了.
如果在沒有thread pool的情況下:
5.5 保舉:innodb_thread_concurrency =16 C 32
5.6 保舉innodb_thread_concurrency = 36MYSQL必讀
20. 優(yōu)化事務隔離級別MYSQL必讀
默認是 Repeatable read
保舉使用Read committed? binlog格式使用mixed或是Row
較低的隔離級別 = 較好的性能MYSQL必讀
21. 注重監(jiān)控MYSQL必讀
任環(huán)境離不開監(jiān)控,如果少了監(jiān)控,有可能就會陷入盲人摸象. 保舉zabbix+mpm構建監(jiān)控.MYSQL必讀
維易PHP培訓學院每天發(fā)布《Mysql應用21條MySQL優(yōu)化建議(經驗總結)》等實戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/9522.html