MySQL引數優化案例

2021-10-10 16:31:31 字數 2463 閱讀 5662

硬體配置

cpu核心數

記憶體大小

磁碟空間

16核256g

3t 軟體環境

作業系統版本

mysql版本

表數目單錶行數

centos-7.4

mysql-5.7.22

128張表

2kw行

優化層級

mysql資料庫優化可以在多個不同的層級進行,層級的常見分法有1):sql優化 2):引數優化 3):架構優化;本文重點關注第2層,並通過一次完整的優化案例來講解引數優化的內在邏輯。

指導思想

1、日誌先行 -- 乙個事務能否成功提交的關鍵是與它相關的日誌是否成功落盤,與資料沒有太大的關係;也就是說對寫的優化可以表述為各方面的資源向寫操作傾斜。

2、瓶頸分析 -- 通過show global status 的各個計數器的值基本上就能分析出當前瓶頸所在,再結合一些簡單的系統層面的監控工具如top iostat 等通常就能明確瓶頸。

3、整體效能是「讀」&「寫」之間的再平衡。

my.cnf中的內容

監控資料

分析&優化思路

對監控資料有兩種可能的解釋:1): 由於最小化的安裝的buffer_pool_size比較小,所以會頻繁的觸發innodb_buffer_pool的最大髒頁的限制,使得innodb進入爆力刷盤的模式,這種情況下io使用率會明顯上公升。2): redo日誌重用。 最終的影響可能是兩者的疊加,這裡先從buffer_pool開始優化。

my.cnf中的內容

監控資料

分析&優化思路

1、針對innob_buffer_pool_size的調整取得了一定的收穫,下面將要調整的就是針對redo重用的情況了,也就是說我們要增大innodb_log_files_in_group和innodb_log_file_size到乙個合適的值。

2、innob_buffer_pool_size的調整取得了一定的收穫還可以更進一步,那就是增大innodb_buffer_pool_instances的值。

根據對之前測試的記錄每完成一組測試lsn增大4.5g、持續時間大概是5分鐘;理論上把redo檔案增大到5g可以做到整個測試的過程中不發生日誌重用、這樣的話測試的跑分會更高,不過這個會影響資料庫宕機恢復的時間。mysql在預設配置下innodb_log_files_in_group=2,innodb_log_file_size=48m也就是說跑完一組測試redo日誌要重新整理48輪(1024*4.5/96 ==48)先看一下把日誌重新整理調整到9輪的情況。

my.cnf中的內容

現在看一下日誌重用控制在一輪(5g)之內的效能表現

my.cnf中的內容

分析&優化思路

1、增大redo到5g的情況下由於整個測試過程中幾乎沒有日誌檔案重用的問題,這樣也就規避由些引發的大量資料刷盤行為,所以效能曲線也就更平滑了。

2、通過show global status 發現table_open_cache_overflows=200w+、thread_created=2k+

3、%cpus : 80.5 us, 13.8 sy, 0.0 ni, 5.4 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st95%的使用率cpu資源成了大問題,這個使用率下能調整的引數不多了

3、對磁碟的監控資料表明util的峰值已經下降到14%、磁碟已經不在是問題;所以針對innodb_buffer_pool_size、innodb_log_files_in_group&innodb_log_file_size 這兩次優化的進入一步優化innodb_buffer_pool_instances、innodb_log_buffer_size 先不進行;在些採用「抓大放小」的方式先調整表快取。

由於cpu使用率達到了95%看到這個數值有一種發自內心的無力感,所以打算所目前status中能明確的一些問題直接一起調整了;增大table_open_cache&table_open_cache_instances用於優化表快取、增大thread_cache_size使用cpu不用頻繁的建立消毀執行緒、增大innodb_sync_spin_loops是希望盡可能的避免上下文切換(由於目前的監控粒度不是特別細所以無法給出13.8%中有多少是上下文切換)也就是說增大innodb_sync_spin_loops更多的是出於職業判斷

my.cnf中的內容

考慮到cpu使用率已經達到95%且增加物理cpu不現實的情況下,決定mysql引數優化到些為止了;最後來看一眼這次優化成果。

mysql引數帶x MySQL引數優化案例

環境介紹 硬體配置 cpu核心數 記憶體大小 磁碟空間 16核256g 3t軟體環境 作業系統版本 mysql版本 表數目單錶行數 centos 7.4 mysql 5.7.22 128張表 2kw行 優化層級與指導思想 優化層級 mysql資料庫優化可以在多個不同的層級進行,層級的常見分法有1 s...

mysql優化案例

1 使用join還是子查詢 select from employee left join test on test.id employee.id select employee.select id from test where test.id employee.id t from employee...

MySQL索引優化案例

開發同學或多或少會遇到系統響應慢的問題,除了業務系統本身的問題外,常常會遇到sql查詢慢的問題,這篇文章結合實際案例分析mysql innodb儲存引擎的索引優化,這篇文章不會介紹b 樹的知識點,如果需要了解聚集索引和輔助索引特點的同學可以參考這篇文章,這篇文章主要會介紹三星索引和icp優化.首先是...