MySQL效能測試調優

2022-07-21 15:30:33 字數 3694 閱讀 2124

作業系統

基本操作

檢視磁碟分割槽mount選項

$ mount

永久修改分割槽mount選項(系統重啟後生效)

修改檔案 /etc/fstab 中對應分割槽的mount options列的值

$sudo -t ext4 -o remount,noatime,errors=remount-or /

檔案系統優化

ext4檔案系統優化

分割槽mount選項加noatime $sudo -t ext4 -o remount,noatime,errors=remo

注意:剛開始加了 nodelalloc 發現mysql寫入不如去掉此引數(原因需分析)[參考:

mysql

基本操作

顯示innodb引擎狀態

mysql> show engine innodb status;

檢視配置引數

mysql> show variables [like ''];

檢視執行狀態值

mysql> show global status [like ''];

修改配置引數方法

4.1. 修改配置檔案(重啟服務生效,適用於所有引數)

檔案位置: /etc/my.cnf

4.2. 命令動態修改(重啟服務失效,適用於動態引數)

°mysql> set global [引數]=[值]

重啟mysql服務

$ sudo service [mysql.server] restart

賦權同時新增使用者,重新整理許可權

語法:mysql> grant [許可權] privileges on [資料庫].[物件] to [使用者名稱]%'[機器名]' identified by '[密碼]';

示例:mysql> grant all privileges on *.* to user1@'%' identified by 'pass1';

mysql> grant all privileges on *.* to user1@'localhost' identified by 'pass1';

mysql> flush privileges;

引數調整

innodb_buffer_pool_size 參考

作用:innodb用於快取表及索引資料的記憶體緩衝區,innodb加速優化首要引數

說明:innodb用於快取表及索引資料的記憶體緩衝區容量的位元組數。預設是128m。最大值受限於cpu架構;32位系統最大4294967295 (2的32次方減1),64位系統最大18446744073709551615 (2的64次方減1)。在32位系統中,cpu架構和作業系統可以使用的實際最大值可能小於理論上的最大值。當緩衝區大小超過1gb時,設定innodb_buffer_pool_instances為大於1的值,能夠改進乙個負荷較大的伺服器的可擴充套件性。

如果你將這個值設的較大,當多次訪問資料表中相同的資料時可以減少磁碟io.專用的資料庫伺服器上,你可以將此值設定為機器物理記憶體的80%。如果出現以下問題,請縮小該引數的值。

1.物理記憶體爭用,導致作業系統進行頁排程

2.innodb用額外的記憶體進行緩衝和控制結構,所以總共分配的記憶體將比指定的約大10%

3.位址空間必須是連續的,這在windows系統中某些dll需要載入指定位址時可能是乙個問題

4.初始化緩衝池的時間與它的大小成正比,如果緩衝池太大,初始化時間可能比較長。例如,在乙個現代的linux x86_64伺服器,初始化10gb的緩衝池大約需要6秒。

修改方法:

靜態引數,必須通過配置檔案修改: innodb_buffer_pool_size=8g

日誌相關引數

2.1. innodb_log_file_size 參考

作用:日誌組中每個日誌檔案大小

說明:日誌組中每個日誌檔案的大小. 所有日誌檔案大小總和(innodb_log_file_size * innodb_log_files_in_group)不能超過乙個最大值(略小於512gb)。例如,兩個255g的日誌檔案剛好接近但未超過最大值。預設值是48m。合理的取值範圍是1mb到緩衝池大小的1/n,n是日誌組中日誌檔案個數。這個值越大,緩衝池就需要更少的重新整理檢查,減少磁碟io。但是值過大會加大宕機恢復時間,雖然自mysql5.5改進了恢復效能,但是還是要考慮下這個值的合理性。

修改方法:

靜態引數,必須通過配置檔案修改: innodb_log_file_size=256m

2.2. innodb_log_files_in_group 參考

作用:日誌組中日誌檔案個數。

說明:日誌組中日誌檔案個數。innodb迴圈方式寫日誌檔案。預設值(也是建議值)是2。日誌檔案的位置通過innodb_log_group_home_dir指定。所有日誌檔案大小總和(innodb_log_file_size * innodb_log_files_in_group)不能超過乙個最大值(略小於512gb)。

修改方法:

靜態引數,必須通過配置檔案修改: innodb_log_files_in_group=3

2.3. innodb_log_buffer_size 參考

作用:innodb寫日誌檔案到磁碟的緩衝區大小

說明:修改方法:

靜態引數,必須通過配置檔案修改: innodb_log_buffer_size=16m

innodb_flush_method 參考

作用:控制innodb flush資料和日誌檔案採用的系統呼叫

說明:windows不用設定

linux可選擇:fdatasync(預設),o_dsync,o_direct(直接寫入磁碟,禁止系統cache),o_direct_no_fsync(>=5.6.7版本支援)

修改方法:

靜態引數,必須通過配置檔案修改: innodb_flush_method=o_direct

innodb_flush_log_at_trx_commit(未修改) 參考

作用:控制事務符合acid和提高系統效能之間的權衡

說明:這個引數在事務符合acid和高效能之間進行平衡,你可以通過調整這個引數達到高效能,但是宕機時可能丟失1秒的事務。

這個引數有3個值選項0,1,2:

1(預設值):嚴格遵從acid,事務提交時log buffer被寫到日誌檔案中,並將日誌檔案內容flush到磁碟。

0:任何mysqld程序崩潰丟失1秒鐘的事務。log buffer每隔1秒被寫入日誌檔案並將日誌檔案重新整理到磁碟,事務提交時不執行log buffer寫入日誌檔案的操作。因為系統排程問題,不能保證每秒日誌檔案都重新整理到磁碟百分之百執行。

2:任何mysqld程序崩潰丟失1秒鐘的事務。事務提交時log buffer被寫入日誌檔案,每隔1秒將日誌檔案重新整理到磁碟。因為系統排程問題,不能保證每秒日誌檔案都重新整理到磁碟百分之百執行。

修改方法:

動態引數,可以通過配置檔案和命令修改:innodb_flush_log_at_trx_commit=2

效能測試調優

效能測試的目的就評估當前系統效能的指標,分析定位解決效能瓶頸,預防規避效能風險。效能分析是為了確定導致效能瓶頸的原因,而調優就是用來解決效能瓶頸。通過某些手段讓系統效能得到提高,是效能調優的主要目的。效能分析主要有兩種方法 1.將測試結果與使用者需求做比較,如果達到使用者需求,則測試通過。系統滿足1...

mysql效能調優

1.對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。2.應盡量避免在where子句中對字段進行null判斷,否則會導致引擎放棄使用索引而進行全表掃瞄。3.應盡量避免在where子句中使用 或 操作符,否則會導致引擎放棄使用索引而進行全表掃瞄。4...

Mysql效能調優

mysql 效能調優有很多方面,主要是這幾個方面 1 正規化 是指表的列具有原子性,不可再拆分,只要資料庫是線性的,都自動滿足1nf。2 正規化 表中的紀錄是唯一的。3 正規化 表中資料不應該有冗餘,如果通過某個欄位就能得到跟該字段相關的資訊,就沒必要將這些資訊,再存放到該表中。在3nf中,可能會對...