MySQL 5.7 安裝完成后,立即要調整的性能選項


原文:MySQL 5.7 Performance Tuning Immediately After Installation

本文是對上一篇《安裝 MySQL 后,需要調整的 10 個性能配置項》的更新,並且涵蓋了 MySQL 5.7 在安裝后,要立刻調整的的性能選項。

幾年前,Stephane Combaudon 寫了一篇博文 《安裝 MySQL 后,需要調整的 10 個性能配置項》(Ten MySQL performance tuning settings after installation) 內容覆蓋了 MySQL 5.1, MySQL 5.5 和 MySQL 5.6 這幾個老版本的 MySQL。在本文中,我將研究如何對 MySQL 5.7 進行調優(關注 InnoDB 存儲引擎)。

一個好消息是,MySQL 5.7 提供了更加合適的默認值。Morgan Tocker 制作了一份關於 MySQL 5.7 的特性完整列表,這是一個很好的參考資料。例如,下面的幾個變量都是默認設置的:

在 MySQL 5.7 中,實際上只有 4 個重要的選項需要去調整。然而,還有其他的 InnoDB 或者全局的 MySQL 選項可能需要根據特定的負載和硬件來做出調整。

首先,在 my.cnf 中的[mysqld] 節下面添加如下配置。配置完成之后,需要重啟 MySQL 服務:

[mysqld]
# other variables here
innodb_buffer_pool_size = 1G # (adjust value here, 50%-70% of total RAM)
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 1 # may change to 2 or 0
innodb_flush_method = O_DIRECT

說明:

選項
innodb_buffer_pool_size 設置為 RAM 大小的 50%-70%,不需要大於數據庫的大小
innodb_flush_log_at_trx_commit 1(默認值),0/2 (性能更好,但穩定性更差)
innodb_log_file_size 128M – 2G (不需要大於 buffer pool)
innodb_flush_method O_DIRECT (避免雙緩沖技術)

下一步

對於新安裝的實例而言,那些設置都是很好的起點。還有許多其他的選項,在某些場景下,可以提高 MySQL 的性能。通常,我會部署一套 MySQL 監控/圖形工具(例如,Percona 監控語句管理平台,俗稱:PMMM),然后根據 MySQL 監控面板提供的信息來執行進一步的調優。

根據監控圖表,我們能進一步做什么樣的優化?

InnoDB 緩沖池大小的信息,看下面這個圖:

image
image

從上面可以看出,可用的 RAM 和空閑的頁的數量小於緩沖池的總大小,我們可以把 InnoDB 緩沖池的大小增加到 10G 從而獲得更好的性能。

InnoDB redo 日志的大小的信息,看下面這個圖:

image

可以看到,InnoDB 通常每小時寫 2.26GB 的數據,這已經超出了 redo 日志的大小(2G)。現在我們可以增大 innodb_log_file_size 選項,然后重啟 MySQL。另外,使用 "show engine innodb status" 命令來計算一個合適的 InnoDB redo 日志的大小值

其他選項

有很多其他的 InnoDB 選項可以進一步調整:

  • innodb_autoinc_lock_mode

設置 innodb_autoinc_lock_mode = 2 (interleaved mode) 可以去掉表級 AUTO-INC 鎖的必要性(還可以提高在使用多行插入語句來插入數據到擁有自增主鍵的表的時候的性能)。這要求 binlog_format=ROW 或者 MIXED(在 MySQL 5.7 中,默認值是 ROW)。

  • innodb_io_capacity 和 innodb_io_capacity_max

這是一個更加高級的調優,只有當你在頻繁寫操作的時候才有意義(它不適用於讀操作,例如 SELECTs)。若你真的需要對它進行調整,最好的方法是要了解系統可以支持多大的 IOPS。譬如,假設服務器有一塊 SSD 硬盤,我們可以設置 innodb_io_capacity_max=6000innodb_io_capacity=3000(最大值的一半)。運行 sysbench 或者任何其他基准工具來對磁盤吞吐量來進行基准測試是一個好方法。

然而,我們需要去擔心這個選項嗎?看下面這張緩沖池的"臟頁"

image

在這種情況下,臟頁的總量很大,而且看起來 InnoDB 刷新臟頁的速度跟不上臟頁的速度。如果我們有一個高速的磁盤子系統(例如:SSD),可以增加 innodb_io_capacity 和 innodb_io_capacity_max 來得到更好的性能。

總結(太長,請不要看版本)

新的 MySQL 5.7 配置項的默認值對於一般的負載更加友好。與此同時,我們仍然需要配置 InnoDB 的選項來發揮出大內存的優勢。
安裝完畢之后,遵循以下步驟來操作:

  1. 如上所述,在 my.cnf 中配置 InnoDB 選項,並重啟 MySQL 服務
  2. 部署一套監控系統(例如:Percona 監控語句管理平台)
  3. 通過監控圖形來判斷是否對 MySQL 進一步調優


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM