![](http://static.javashuo.com/static/loading.gif) |
![](http://static.javashuo.com/static/loading.gif) |
![](http://static.javashuo.com/static/loading.gif) |
這裏推薦了兩個工具 mysqltuner pt-variable-advisor 這兩個工具網上的詳解不少,自行百度谷歌html 藉助 MySQLTuner 優化 MySQL 性能mysql pt-variable-advisorlinux |
![](http://static.javashuo.com/static/loading.gif) |
|
![](http://static.javashuo.com/static/loading.gif) |
![](http://static.javashuo.com/static/loading.gif) |
官方的一個自動生成mysql配置文件的工具sql |
![](http://static.javashuo.com/static/loading.gif) |
議程
- MySQL 配置文件優化基礎知識
- 配置MySQL的工具
- 介紹部分重要的變量選項
|
![](http://static.javashuo.com/static/loading.gif) |
如今咱們來看下配置選項
- 不一樣類別的配置選項
- 常規選項
- MyISAM的選項
- InnoDB的選項
- 可見性(應該理解爲UI可視化的配置)和日誌選項
|
![](http://static.javashuo.com/static/loading.gif) |
獲取狀態變量
- 咱們針對 SHOW GLOBAL STATUS 輸出作了多樣化闡述
- Percona Toolkit工具集裏面的 pt-mext 對你頗有幫助
- pt-mext -r --mysqladmin ext -i100 -c4
![](http://static.javashuo.com/static/loading.gif) |
![](http://static.javashuo.com/static/loading.gif) |
常規選項
- max_connections
- 連接的容許(應該翻譯成合理)範圍是多少
- 觀察 max_used_connections 狀態值
- thread_cache
- 使用cache來防止過分的(短連接[長鏈接不明顯])線程建立(帶來的性能消耗)
- 50-100是個不錯的範圍。關注threads_created狀態值
- table_cache/table_open_cache mariadb官方 mysql官方
- 緩存打開表的實例(緩存的是文件描述符)
- 單個表能夠有多個打開文件描述符
- 觀察 opened_tables 狀態值(若是發現open_tables等於table_open_cache,而且opened_tables在不斷增加,那麼就須要增長table_open_cache的值,但若是table_open_cache設置成很大,可能會形成文件描述符不足,形成性能不穩定或者鏈接失敗)
- 從4096開始
- MySQL只在須要的地方使用
|
![](http://static.javashuo.com/static/loading.gif) |
常規選項
- open_files_limit
- MyISAM 表require 最多2個文件句柄
- 每一個鏈接都是文件句柄(file handle,能夠理解爲用來方便控制file[文件]的東西,這玩意是開山祖師爺們的神翻譯,和socket翻譯成套字同樣逆天)
- 在大多數系統裏面設置成65535是安全的
- table_definition_cache
- 緩存表定義(CREATE TABLE)
- 每一個表只能有一個記錄
- 觀察 opened_table_definitions
- 設置表的數量 + 10% 除非表數量50K+
|
![](http://static.javashuo.com/static/loading.gif) |
常規選項
- back_log
- 若是每秒有不少connection鏈接過來,須要調整
- 2048是合理的值
- max_allowed_packet
- 限制查詢的最大大小
- 限制內部字符串變量的大小
- 16MB是個不錯的大小
- max_connect_errors
- 防止密碼暴力破解
- 可引發「Host Blocked」 錯誤信息
- 值在1000000範圍能夠接受
|
![](http://static.javashuo.com/static/loading.gif) |
常規選項
- skip_name_resolve
- 避免連接的時候查找DNS。這樣更快和安全
- 不要使用主機名在 GRANTs(受權語句)
- old_passwords
|
![](http://static.javashuo.com/static/loading.gif) |
常規選項
- log_bin
- 啓用能夠用來作主從複製和定點還原
- 設置「mysql-bin」來避免默認命名
- sync_binlog
- 使Binlog持久化。若是有 RAID帶BBU或者Flash,設置成1
- 這可能成爲磁盤慢的真正性能殺手
- expire_log_days
- 在這個天數後清除舊的二進制日誌
- 14(2周)配合周備份是很好的一個值
|
![](http://static.javashuo.com/static/loading.gif) |
常規選項
- tmp_table_size
- max_heap_table_size
- 一般設置爲相同的值(基於工做負載)
- 留意Created_tmp_disk_tables 狀態值 (這裏有葉金榮的一篇文章)
- 小心任意大小的BLOB/TEXT字段引發磁盤臨時表生成
- query_cache_size
- 只有當通過測試提供了顯著的收益時,才啓用查詢緩存(MYSQL的查詢緩存用於緩存select查詢結果,並在下次接收到一樣的查詢請求時,再也不執行實際查詢處理而直接返回結果,有這樣的查詢緩存能提升查詢的速度,使查詢性能獲得優化,前提條件是你有大量的相同或類似的查詢,而不多改變表裏的數據,不然沒有必要使用此功能。能夠經過Qcache_lowmem_prunes變量的值來檢查是否當前的值知足你目前系統的負載。注意:若是你查詢的表更新比較頻繁,並且不多有相同的查詢,最好不要使用查詢緩存。)
- 常引發stalls(沒弄懂這裏表明什麼)和爭用
- 不要設置超過512MB
|
![](http://static.javashuo.com/static/loading.gif) |
常規選項
- sort_buffer_size
- 在內存裏面做爲排序緩存區
- 觀察 sort_merge_passes(sort_merge_passes 包括兩步。mysql 首先會嘗試在內存中作排序,使用的內存大小由系統變量 sort_buffer_size 決定,若是它的大小不夠把全部的記錄都讀到內存中,mysql 就會把每次在內存中排序的結果存到臨時文件中,等 mysql 找到全部記錄以後,再把臨時文件中的記錄作一次排序。這再次排序就會增長 sort_merge_passes。實際上,mysql 會用另外一個臨時文件來存再次排序的結果,因此一般會看到 sort_merge_passes 增長的數值是建臨時文件數的兩倍)
- 考慮在大的查詢會話裏面增大
- 值在1MB周圍是一個不錯的默認值
- 較大值在小查詢會下降性能
- join_buffer_size
- 對沒有索引的錶鏈接提升性能
- 能獲取到關聯主鍵在每一個錶鏈接更好
- 8MB是一個合理的值
- default_storage_engine
|
![](http://static.javashuo.com/static/loading.gif) |
常規選項
- read_rnd_buffer_size
- 用於在排序中讀取行的緩衝區
- 指定最大值
- 一般設置16MB左右的值
- 不要和 read_buffer_size 混淆
- Tmpdir
- 指定臨時目錄的位置
- tmpfs是常不錯的選擇,除非須要很是大的臨時空間。
- tmpdir=/dev/shm(/dev/shm/是linux下一個目錄,/dev/shm目錄不在磁盤上,而是在內存裏,所以使用linux /dev/shm/的效率很是高,直接寫進內存)
|