Optimizing MySQL Configuration |優化MySQL配置(二)

這裏推薦了兩個工具

mysqltuner 

pt-variable-advisor

這兩個工具網上的詳解不少,自行百度谷歌html

藉助 MySQLTuner 優化 MySQL 性能mysql

pt-variable-advisorlinux

 

官方的一個自動生成mysql配置文件的工具sql

 

議程


  • MySQL 配置文件優化基礎知識
  • 配置MySQL的工具
  • 介紹部分重要的變量選項

如今咱們來看下配置選項


  • 不一樣類別的配置選項
    • 常規選項
    • MyISAM的選項
    • InnoDB的選項
    • 可見性(應該理解爲UI可視化的配置)和日誌選項

 

獲取狀態變量


  • 咱們針對 SHOW GLOBAL STATUS 輸出作了多樣化闡述
  • Percona Toolkit工具集裏面的 pt-mext 對你頗有幫助
  • pt-mext -r --mysqladmin ext -i100 -c4

 

常規選項


  • 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只在須要的地方使用

常規選項


  • open_files_limit
    • MyISAM 表require 最多2個文件句柄
    • 每一個鏈接都是文件句柄(file handle,能夠理解爲用來方便控制file[文件]的東西,這玩意是開山祖師爺們的神翻譯,和socket翻譯成套字同樣逆天)
    • 在大多數系統裏面設置成65535是安全的
  • table_definition_cache
    • 緩存表定義(CREATE TABLE)
    • 每一個表只能有一個記錄
    • 觀察 opened_table_definitions
    • 設置表的數量 + 10% 除非表數量50K+

 

常規選項


  • back_log
    • 若是每秒有不少connection鏈接過來,須要調整
    • 2048是合理的值
  • max_allowed_packet
    • 限制查詢的最大大小
    • 限制內部字符串變量的大小
    • 16MB是個不錯的大小
  • max_connect_errors
    • 防止密碼暴力破解
    • 可引發「Host Blocked」 錯誤信息
    • 值在1000000範圍能夠接受

常規選項


  • skip_name_resolve
    • 避免連接的時候查找DNS。這樣更快和安全
    • 不要使用主機名在 GRANTs(受權語句)
  • old_passwords
    • 不該該啓用。將致使不安全的密碼散列被使用。

 

常規選項


  • log_bin
    • 啓用能夠用來作主從複製和定點還原
    • 設置「mysql-bin」來避免默認命名
  • sync_binlog
    • 使Binlog持久化。若是有 RAID帶BBU或者Flash,設置成1
    • 這可能成爲磁盤慢的真正性能殺手
  • expire_log_days
    • 在這個天數後清除舊的二進制日誌
    • 14(2周)配合周備份是很好的一個值

常規選項


  • tmp_table_size
  • max_heap_table_size
  • 小心任意大小的BLOB/TEXT字段引發磁盤臨時表生成
  • query_cache_size
    • 只有當通過測試提供了顯著的收益時,才啓用查詢緩存(MYSQL的查詢緩存用於緩存select查詢結果,並在下次接收到一樣的查詢請求時,再也不執行實際查詢處理而直接返回結果,有這樣的查詢緩存能提升查詢的速度,使查詢性能獲得優化,前提條件是你有大量的相同或類似的查詢,而不多改變表裏的數據,不然沒有必要使用此功能。能夠經過Qcache_lowmem_prunes變量的值來檢查是否當前的值知足你目前系統的負載。注意:若是你查詢的表更新比較頻繁,並且不多有相同的查詢,最好不要使用查詢緩存
    • 常引發stalls(沒弄懂這裏表明什麼)和爭用
    • 不要設置超過512MB

常規選項


  • 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
    • 若是建表的時候未指定,則使用此引擎表

常規選項


  • read_rnd_buffer_size
    • 用於在排序中讀取行的緩衝區
    • 指定最大值
    • 一般設置16MB左右的值
    • 不要和 read_buffer_size 混淆
  • Tmpdir
    • 指定臨時目錄的位置
    • tmpfs是常不錯的選擇,除非須要很是大的臨時空間。
  • tmpdir=/dev/shm(/dev/shm/是linux下一個目錄,/dev/shm目錄不在磁盤上,而是在內存裏,所以使用linux /dev/shm/的效率很是高,直接寫進內存)

PPT在這裏緩存

轉載請標明出處,謝謝安全

相關文章
相關標籤/搜索