本文只列舉了一些重要參數說明,如需要查看更多參數詳細說明,請參見 MySQL官網 。通過控制臺界面修改MySQL參數值,請參見 修改參數組。
修改敏感參數
若干參數相關說明如下:
-
lower_case_table_names
云數據庫默認值:"1"
作用 :mysql設置大小寫是否敏感的一個參數。默認值"1",表示創建數據庫及表時,存儲在磁盤是小寫的,比較的時候是不區分大小寫。
目前關系數據庫MySQL版僅支持lower_case_table_names=1,不區分大小寫,后續將推出支持區分大小寫功能,請關注產品動態。
-
innodb_flush_log_at_trx_commit
云數據庫默認值: " 1"
作用 :該參數控制提交操作安全和高性能之間的平衡。設置為默認值"1",每次事務提交時,將log buffer的數據寫入到log file中,并且同時將log file向磁盤中寫入 ;當設為"0"時,每秒將寫入log buffer到log file中,且同時將log file向磁盤中寫入 (該模式下在事務提交的時候,不會主動觸發寫入磁盤的操作);如果設為"2",則每次事務提交時 將log buffer的數據 寫入到log file中,大約每秒將log file向磁盤中寫入,與log buffer寫入不同步 。
影響 :參數設置為非默認值"1"時,降低了數據安全性,在系統崩潰的情況下,可能導致數據丟失。設置為"0"時,寫入速度快,但是不安全,如果mysqld進程崩潰,導致上一秒的所有事務中的操作數據丟失。設置為"1"時,寫入速度最慢,但是安全,即使mysqld進程崩潰或者服務主機宕機,log可能最多只丟失一個語句或者一個事務的操作數據。設置為"2" 時,寫入速度快,比 "0" 安全,只有服務主機宕機時,會導致上一秒的所有事務中的操作數據丟失。
POC建議值:"2"
-
sync_binlog
云數據庫默認值:"1"
作用 :該參數控制MySQL 的二進制日志(binary log)同步到磁盤的頻率,取值:0-N。設置為默認值"1",表示每進行1次事務提交之后,MySQL將進行一次fsync之類的磁盤同步指令來將binlog_cache中的數據強制寫入磁盤,是最安全的設置;設置為"0"時,表示當事務提交之后,MySQL不做fsync之類的磁盤同步指令刷新binlog_cache中的信息到磁盤,而讓Filesystem自行決定什么時候來做同步,或者cache滿了之后才同步到磁盤。此時的性能最好,但風險也是最大,因為斷電或操作系統崩潰情況下,在binlog_cache中的所有binlog信息都會被丟失。
影響 :參數設置為非默認值"1"時,降低了數據安全性,在系統崩潰的情況下,可能導致binlog丟失。
POC 建議值 :"1000"
-
innodb_buffer_pool_size
云數據庫默認值 : "規格參數,開通的不同實例規格默認值不同"。
作用 :該參數定義了 InnoDB 存儲引擎的表數據和索引數據的最大內存緩沖區大小,數據在內存中的讀寫速度是磁盤讀寫速度的很多倍,增加該值可減少磁盤I/O。
影響:過大的buffer pool可能導致系統OOM崩潰,請謹慎修改。
POC建議值:32G及以上規格可將其調整至內存的70%~75%。
修改性能參數
若干參數相關說明如下:
- max_connections 數據庫允許的最大連接數,參數值設置較小時,將會影響數據庫建立連接訪問。
- innodb_buffer_pool_size 、 max_connections 和 back_log參數都依賴于實例的規格,實例規格不同對應其默認值也不同。
聯動參數
- character_set_server:如果修改該參數的值, 系統會自動聯動調整collation_server、character_set_database,和collation_database的取值。一般的,如果字符序character_set_server為utf8,則collation_server為utf8_*_ci,兩者之間存在對應關系。
- innodb_buffer_pool_size : 該參數受innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的影響,最終有效值為兩參數乘積的整數倍向上取值。 比如innodb_buffer_pool_chunk_size為128M,innodb_buffer_pool_instances為8,那么當innodb_buffer_pool_size為4.5G時候,系統會自動向上調節為5G大小(必須大于等于128*8M(1G)的整數倍)。
參數修改限制
- innodb_buffer_pool_size參數值必須是innodb_buffer_pool_instances和innodb_buffer_pool_chunk_size參數值乘積的整數倍,非整數倍會自動向上調節為整數倍。
- innodb_buffer_pool_instances參數值設置大于1時,innodb_buffer_pool_size值必須大于等于1GB。
- max_prepared_stmt_count:對于MySQL5.7版本,上限值為1048576,對于MySQL 8.0版本,如果內核版本大于等于8.0.18,參數上限值為4194304,超過修改會自動截斷為最大值。
其他參數
-
max_prepared_stmt_count:準備大量的語句會消耗服務器的內存資源,參數設置較小時,業務產生大量的prepare語句,并且可能會超出max_prepared_stmt_count參數限制,出現報錯,建議您根據業務情況,調整該參數的值。
-
如下參數的輸入會根據MySQL內核規則對取值進行對應的調整,調整的規則如下所示:
(a) key_cache_age_threshold會自動調整為100的倍數,設置為非100的整數倍時,會自動向下調節為100的整數倍。(b) join_buffer_size和key_cache_block_size會自動調整為128的倍數。
(c) query_cache_size、query_prealloc_size、innodb_log_buffer_size和max_allowed_packet 、thread_stack 會自動調整為1024的倍數。
(d) read_buffer_size、read_rnd_buffer_size、binlog_cache_size 、binlog_stmt_cache_size 會自動調整為4096的倍數。
(e) data_buffer_size、log_buffer_size、shared_pool_size、temp_buffer_size 會自動調整為1048576的倍數。
-
binlog_format:默認設置為row,表示將binlog記錄成每一行數據被修改的形式,包括修改前和修改后的數據。該參數限制了進行修改,否則可能影響您的正常使用。
-
binlog_rows_query_log_events:默認設置為ON,表示binlog在記錄events的同時,也會記錄原始的SQL語句,方便以后的查詢和審計,以及一些ETL等同步工具的兼容性,在大量更新場景下,對性能也有一定的影響。
-
binlog_row_image:默認設置為FULL,表示無論有沒有主鍵約束或者唯一約束binlog都會記錄所有前后鏡像.
-
log_timestamps:控制錯誤日志消息的時間戳時區,以及寫入文件的一般查詢日志消息和慢日志消息的時間戳時區。默認設置為系統時區,且無法修改。
-
default_time_zone:默認設置為"+8:00",可根據您的業務規則自定義修改。
-
skip_name_resolve:默認值為ON,表示跳過域名解析從白名單的IP中判斷是否可以建立連接。
-
innodb_strict_mode:用于限制InnoDB的檢查策略,默認值為ON,不建議進行修改為OFF來跳過限制檢查。
-
transaction_isolation:默認值設置為READ-COMMITTED,可根據您的業務場景需要自行修改。
-
innodb_adaptive_hash_index:默認設置為OFF,可根據您的業務需要自行修改。
-
table_definition_cache和table_open_cache分別默認為2000,可根據實例預計有多少個數據表,最大并發連接數的大小來調節這些參數值大小。
-
gtid_mode:默認值設置為ON,采用GTID模式復制,修改會影響高可用組件,所以不支持修改。
-
tmp_table_size:默認值設置為16M,可以根據業務SQL查詢復雜度場景,比如使用復雜的order by ,group by查詢,導致使用很多磁盤臨時表,查詢性能下降,適當增加此值,可以減少磁盤臨時表的創建,減少IO。
-
max_heap_table_size:默認值設置為64M,設置允許用戶創建的內存表的最大大小,變量的值用于計算內存表MAX_ROWS值。