Mysql 11配置項

配置文件一般在/etc/my.cnf或者是/etc/mysql/my.cnf

語法:properties的語法,注意單詞用-或_分割比如:
auto-increment-offset=5

分個類
按照作用域,可以分爲全局的也就是配置在配置文件中的,或者是會話的,就是連接中的
還可分爲動態和靜態的。 動態就是在運行期間可以改寫的,這個要特別小心,因爲有可能造成全局刷新和阻塞
語法:

SHOW variables like '%sort_buffer_size%';
//全局的:
SET GLOBAL sort_buffer_size = <value>;
SET @@global.sort_buffer_size := <value>;
// 會話的
SET @@sort_buffer_size := <value>;
SET @@ssession.sort_buffer_size := <value>;

對於value還有一個些其他的限制,比如
SET 不能用1M
配置文件不能用表達式。 這些需要注意。

innodb_buffer_pool_size

這個參數主要緩存innodb表的索引,數據,插入數據時的緩衝。
Mysql整體可用內存的70%-80%,太大了可能會佔用操作系統內存,影響性能。
可以使用show engine innodb status;展示的

BUFFER POOL AND MEMORY

查看使用情況

事務日誌

Created with Raphaël 2.1.0寫事務日誌日誌緩衝區事務日誌(循環連續寫入)

數據被修改,先寫日誌緩衝區。 緩衝區滿|每秒|事務提交, 緩衝區回寫事務日誌。
innodb_log_buffer_size 設置緩衝區大小。
設置原則:2-8M,一般滿足一個小時的活動。活動大小:

show global status like '%Innodb_os_log_written%';

查看寫入日誌增量。 可以隔100計算,算兩次差值。 單位爲B。
最佳實踐:3M

innodb_log_files_in_group 幾個日誌文件。默認2.一般不用改
innodb_log_file_size 日誌文件大小。 又一個比較有用的參數。
官方建議 innodb_log_files_in_group * innodb_log_file_size = innodb_buffer_pool_size。
太大會使得恢復速度很慢
另外該值也沒有要設置太大,跟checkpoint的頻率有關(checkpoint是一個後臺線程),會把事務日誌中的數據寫到數據文件中。
可以使用
show engine innodb status; 命令查看這部分:

LOG

Log sequence number 300 2512389215
Log flushed up to 300 2512389215
Last checkpoint at 300 2508134796
2512389215 - 2508134796 = 4m多。
有個官方推薦的公式(innodb_log_file_size*innodb_log_files_in_group(default 2))*0.75 = 4M
因爲是測試環境所以沒什麼感覺,但實際上一般是幾G纔夠用的。

innodb_flush_logs_at_trx_commit

0 緩衝寫日誌每秒一次
1 默認 最安全,每次提交寫日誌,且刷新(刷新到持久化存儲)。
2 緩衝寫日誌每次提交時寫,每秒一次刷新

上面緩衝寫日誌,實際上是從InnoDB的 緩存轉移到操作系統的緩存
如果允許1秒的丟失的話,實際上是可以使用2的

併發配置

innodb_thread_concurrency 限制一次性可以有多少線程進入內核。
其值 = CPU數量 * 磁盤數量 * 2, 實際上小點效果會更好。

超過的線程會使用兩階段方式,先睡一定的微秒再嘗試進入,如果還不能則進入隊列。

一單進入內核那就有一定數量的tiket,下次可以直接進入內核。

innodb_commit_concurrency變量控制有多少個線程可以同一時間提交。

max_connection

防止攻擊, 但是要設置足夠大,免得正常業務被拒絕。

show variables like 'max_connections';
show global status like 'Max_used_connections';

觀察Max_used__connections的值,能看到是否有時間點超過了最大值。

thread_cache_size

緩存線程的值,不用很大一般256就可以了

show global status like 'Threads_connected';
show global status like 'Threads_created';

如果Threads_created這個值很大或者一直增長,則需要增到配置了

table_cache_size

要足夠大,避免需要重複解析打開表定義

show global status like 'Opened_tables';

這個值變化大,則需要增加

其他配置

read_only 在備庫使用,強制備庫不接受應用端來的變更請求
slave_net_timeout 備庫連主庫發現失敗時間,默認一個小時,一般一分鐘或更短。
innodb_autoinc_lock_mode 自增鎖的模式

sort_buffer_size 8M
join_buffer_size 兩個connection級別的參數,每次新的連接創建,太大可能佔用太多內存,一般 2M

query_cache_size 查詢緩存大小,因爲會有鎖,命中率等等問題。實際上用處並不是很大。一般32M

transaction_isolation 默認隔離級別。

key_buffer_size 索引緩衝區大小,可以大一點 512M

read_buffer_size查詢操作緩衝區,排序時,會查一遍該緩衝區,避免磁盤讀寫,排序多的時候可以設置大一點, 一般4M

DBCP連接池的一些配置

  • initialSize 啓動時創建的初始化連接數量
  • maxActive 連接池中可同時連接數據庫的線程數。 默認8,一般20
  • maxIdle 最大空閒, 超過的會被回收。默認8,太小,可能造成回收創建太頻繁
  • minIdle 最小空閒,少於會創建,默認0,可以稍微多一點,比如8
  • maxWait 沒有可用連接時的阻塞時間,默認無現長,有可能無限掛起, 超時會拋異常。我們是30000
  • testOnBorrow=false 取得連接時是否驗證,時間太長了有可能時效瞭如果不驗證會爲空
  • testWhileIdle=true 空閒時是否驗證,這個要配合驗證的sql.
  • timeBetweenEvictionRunsMillis=300000 多久啓動過期清理線程
  • numTestsPerEvictionRun=10 每次清理幾個
  • minEvictableIdleTimeMillis=300000 多久算是過期的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章