mysql核心参数_MySQL技术体系之核心参数
本文主要基于MySQL 5.7版本的數(shù)據(jù)庫(kù)環(huán)境,總結(jié)my.cnf文件中核心參數(shù)的配置使用,讓更多的人對(duì)MySQL技術(shù)體系有更全面、更專業(yè)的深度了解。
一、客戶端核心參數(shù)
1、port
端口號(hào),默認(rèn)3306
2、socket
Socket文件地址,默認(rèn)以.sock為文件名稱后綴,用于UNIX套接字通信。
二、服務(wù)端全局區(qū)(SGA)緩沖區(qū)參數(shù)
1、innodb_buffer_pool
InnoDB緩沖池,位于主內(nèi)存
緩存被訪問(wèn)過(guò)的表數(shù)據(jù)、索引文件、插入緩沖、數(shù)據(jù)字典等
推薦大小設(shè)置為物理內(nèi)存的50%-80%
2、innodb_buffer_pool_instance
將緩沖池進(jìn)一步劃分為互相隔離的內(nèi)存區(qū)域,更好的支持并發(fā)讀寫,減少內(nèi)存爭(zhēng)用現(xiàn)象
默認(rèn)值為1
僅當(dāng)innodb_buffer_pool參數(shù)配置大于1024MB有效
通過(guò)命令show engine innodb status查看每個(gè)內(nèi)存區(qū)域的內(nèi)存使用情況
3、innodb_old_blocks_time和innodb_old_blocks_pct
InnoDB緩沖池innodb_buffer_pool,內(nèi)部由LRU鏈表管理
LRU鏈表進(jìn)一步分為old pages list和young pages list:
old pages list:存放長(zhǎng)時(shí)間未被訪問(wèn)的數(shù)據(jù)頁(yè)
young pages list:存放最新、最近被訪問(wèn)的數(shù)據(jù)頁(yè)
當(dāng)超過(guò)innodb_old_blocks_time參數(shù)設(shè)置的時(shí)間時(shí),就會(huì)移動(dòng)到old pages list,默認(rèn)是1000ms。
innodb_old_blocks_pct參數(shù)決定old pages list在LRU鏈表及innodb_buffer_pool中占比:
存在大表掃描或者執(zhí)行mysqldump備份操作時(shí),可能會(huì)剔除熱數(shù)據(jù),增加I/O壓力,因此要適當(dāng)減少innodb_old_blocks_pct參數(shù)值
4、innodb_log_buffer_size和innodb_log_waits
innodb_log_buffer_size:日志緩沖區(qū)的大小,取值范圍16MB-64MB
innodb_log_waits:等待日志緩沖刷出的次數(shù)
通過(guò)命令show global status like "%innodb_log_waits%"查看:
如果發(fā)現(xiàn)innodb_log_waits值大于0,并且持續(xù)增長(zhǎng),可以考慮增大innodb_log_buffer_size
5、innodb_log_buffer
事務(wù)在內(nèi)存中的緩沖區(qū)的大小,即redo log buffer
6、query_cache_size和query_cache_type
query_cache_siz靜態(tài)數(shù)據(jù)的緩存區(qū)大小
默認(rèn)關(guān)閉,建議關(guān)閉,保證數(shù)據(jù)庫(kù)的TPS
數(shù)據(jù)倉(cāng)庫(kù)場(chǎng)景可能會(huì)選擇開啟
實(shí)例啟動(dòng)前,設(shè)置query_cache_size=0和query_cache_type=off才算真正關(guān)閉
三、服務(wù)端程序緩沖區(qū)(PGA)參數(shù)
1、sort_buffer_size
用于SQL語(yǔ)句在內(nèi)存中的臨時(shí)排序
2、join_buffer_size
表連接使用,用于BKA
3、read_buffer_size
MyISAM存儲(chǔ)引擎的表順序掃描的緩存
4、read_rnd_buffer_size
隨機(jī)讀緩沖區(qū)大小
用于mrr特性
5、tmp_table_size和max_heap_table_size
tmp_table_size:SQL語(yǔ)句在排序或者分組時(shí)沒有用到索引,會(huì)使用臨時(shí)表空間
max_heap_table_size:管理heap、memory存儲(chǔ)引擎表
建議tmp_table_size和max_heap_table_siz大小配置一致
三、服務(wù)端刷盤參數(shù)
內(nèi)存中的數(shù)據(jù)需要根據(jù)刷新機(jī)制決定在某一時(shí)刻如何刷新到磁盤,刷新機(jī)制涉及redo log buffer、data buffer、binlog cache等內(nèi)存緩沖區(qū),read thread、write thread、redo log thread、change buffer thread四大I/O線程,及master?thread后臺(tái)主線程。
1、innodb_flush_log_at_trx_commit
控制由內(nèi)存redo log buffer寫入磁盤relo log、和執(zhí)行刷盤操作的頻率
可選參數(shù)值(實(shí)踐根據(jù)業(yè)務(wù)場(chǎng)景選擇):
0:redo log thread每隔1s會(huì)執(zhí)行一次刷盤策略;
此種情況,每次事務(wù)提交不會(huì)觸發(fā)redo log thread將日志緩沖中的數(shù)據(jù)寫入redo log;
性能最好,但是安全性最低,MySQL進(jìn)程崩潰將會(huì)導(dǎo)致丟失1s的數(shù)據(jù);
1:每次事務(wù)提交時(shí),都會(huì)觸發(fā)redo log thread將日志緩沖中的數(shù)據(jù)寫入redo log,并且執(zhí)行刷盤操作,以便保證數(shù)據(jù)確實(shí)已經(jīng)寫入磁盤;
安全性最高,但是性能最差;
2:每次事務(wù)提交時(shí),都會(huì)觸發(fā)redo log thread將日志緩沖中的數(shù)據(jù)寫入redo log,但是不會(huì)同時(shí)執(zhí)行刷盤操作;
另外兩個(gè)決定redo log buffer刷到磁盤的條件:
master thread每秒進(jìn)行刷新;
redo log buffer使用超過(guò)一半時(shí)觸發(fā)刷新;
2、sync_binlog
控制由內(nèi)存binlog cache刷新到磁盤binglog的頻率
參數(shù)值為正整數(shù):
0:每次事務(wù)提交后,不主動(dòng)做fsync之類的磁盤同步指令刷新binlog cache,讓FileSystem自行決定同步時(shí)機(jī),或者binlog cache滿才同步到磁盤;
1:每次事務(wù)提交后,主動(dòng)做刷新binlog cache到磁盤;
n:每進(jìn)行n次事務(wù)提交后,主動(dòng)做fsync之類的磁盤同步指令刷新binlog cache到磁盤;
3、數(shù)據(jù)庫(kù)的雙一模式:
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
4、innodb_max_dirty_pages_pct
控制臟頁(yè)的刷新頻率,在buffer pool中dirty page所占的百分比,達(dá)到閾值會(huì)觸發(fā)page cleaner thrad執(zhí)行臟頁(yè)刷新
默認(rèn)值是75%
建議設(shè)置為25%-50%之間,保證數(shù)據(jù)庫(kù)整體的TPS
5、innodb_flush_method
控制InnoDB數(shù)據(jù)文件、redo log文件的打開刷寫模式;
可選參數(shù)值:
O_SYNC:
O_DSYNC:
O_DIRECT:數(shù)據(jù)文件直接從MySQL InnoDB Buffer寫入到磁盤,不用通過(guò)OS buffer;
四、服務(wù)端并發(fā)量參數(shù)
1、innodb_max_thread_concurrency
InnoDB內(nèi)核最大并發(fā)線程數(shù),默認(rèn)值為0(含義不受限制)
2、innodb_open_files
InnoDB可同時(shí)打開的.ibd文件個(gè)數(shù)
參數(shù)值規(guī)則>=10,默認(rèn)值300
建議調(diào)整為65535,提高并發(fā)數(shù)
3、max_connections和innodb_thread_concurrency
max_connections控制MySQL數(shù)據(jù)庫(kù)最大的連接數(shù),默認(rèn)值151,高并發(fā)場(chǎng)景中經(jīng)常遇到的"too many connections"異常報(bào)錯(cuò),即為此參數(shù)配置過(guò)低或者集群需要水平擴(kuò)容
innodb_thread_concurrency控制InnoDB內(nèi)部并發(fā)數(shù),參數(shù)值為正整數(shù)(默認(rèn)值為0):
0:不受限制;
n:并發(fā)數(shù)為n,建議設(shè)置為服務(wù)器邏輯CPU核數(shù)的2倍,根據(jù)實(shí)際情況由小及大逐步調(diào)整驗(yàn)證;
五、服務(wù)端事務(wù)參數(shù)
1、transaction_isolation
事務(wù)隔離級(jí)別
可選參數(shù)值(默認(rèn)值REPEATABLE-READ):
READ-UNCOMMITTED:讀未提交
READ-COMMITTED:讀已提交
REPEATABLE-READ:可重復(fù)讀
SERIALIZABLE:序列化
六、服務(wù)端影響I/O性能的參數(shù)
1、innodb_log_file_size
redo log日志的大小,需要合理設(shè)置:
如果設(shè)置偏小,將會(huì)導(dǎo)致redo log切換頻繁,產(chǎn)生無(wú)用的I/O消耗,影響數(shù)據(jù)庫(kù)性能;
如果設(shè)置偏大,將會(huì)導(dǎo)致實(shí)例宕機(jī)恢復(fù)需要較長(zhǎng)時(shí)間;
2、innodb_log_files_in_group
redo log文件組中的日志文件的數(shù)量,默認(rèn)情況下至少需要2個(gè)。
3、innodb_stats_on_metadata
information_schema中的表,某些監(jiān)控程序讀取innodb_stats_on_metadata表
可通過(guò)命令"set global innodb_stats_on_metadata=0"關(guān)閉
七、服務(wù)端慢查詢參數(shù)
1、show_query_log
慢查詢?nèi)罩鹃_關(guān)
可選參數(shù)值:
1:開啟狀態(tài),推薦配置;
2、long_query_time
慢查詢的時(shí)間閾值,單位為秒;
超過(guò)閾值就會(huì)記錄到慢查詢?nèi)罩疚募?#xff1b;
3、log_queries_not_using_indexs
運(yùn)行的SQL沒有使用索引,是否記錄到慢查詢?nèi)罩疚募?/p>
可選參數(shù)值:
on:記錄,推薦配置,set global set log_queries_not_using_indexs=on;
off:不記錄;
八、服務(wù)端二進(jìn)制文件參數(shù)
1、expire_logs_days
binlog文件的過(guò)期時(shí)間,單位為天
2、binlog_format
二進(jìn)制日志文件的內(nèi)容格式
可選參數(shù)值:
statement:記錄的是一條SQL語(yǔ)句
row:此模式較為安全,不會(huì)出現(xiàn)跨庫(kù)復(fù)制丟失數(shù)據(jù)的情況;
一般中間件采集數(shù)據(jù)解析也是這種模式,記錄行變更前的樣子及變更后的內(nèi)容
mixed:混合模式
九、服務(wù)端其它參數(shù)
1、innodb_buffer_pool_load_at_startup和innodb_buffer_pool_dump_at_shutdown
快速加載實(shí)例宕機(jī)前內(nèi)存中的熱數(shù)據(jù),減少磁盤I/O壓力
可選參數(shù)值(默認(rèn)0):
0:關(guān)閉狀態(tài)
1:啟用狀態(tài)
在實(shí)例關(guān)閉時(shí),將熱數(shù)據(jù)的元數(shù)據(jù)信息保存到innodb_buffer_pool_filename參數(shù)指定的文件(默認(rèn)ib_buffer_pool)
在實(shí)例啟動(dòng)時(shí),從innodb_buffer_pool_filenam參數(shù)指定的文件(默認(rèn)ib_buffer_pool)快速加載回內(nèi)存
2、innodb_data_file_path
指定系統(tǒng)表空間文件的路徑和ibdata1文件的大小
默認(rèn)大小是10MB
3、interactive_timeout和wait_timeout
interactive_timeout是服務(wù)器關(guān)閉交互式連接前等待活動(dòng)的時(shí)間,默認(rèn)值28800s,即8小時(shí)
iwait_timeout是服務(wù)器關(guān)閉非交互式連接前等待活動(dòng)的時(shí)間,默認(rèn)值28800s,即8小時(shí)
兩個(gè)參數(shù)需要一起調(diào)整,并且保持一致,默認(rèn)值時(shí)間過(guò)長(zhǎng),建議調(diào)整為300s-600s之間
4、server-id
主從環(huán)境中,當(dāng)前MySQL在主從結(jié)構(gòu)中的唯一標(biāo)識(shí)
5、lower_case_table_names
表名稱是否區(qū)分大小寫
可選參數(shù)值:
0:區(qū)分大小寫
1:不區(qū)分大小寫,實(shí)際存儲(chǔ)使用小寫;
6、innodb_fast_shutdown和innodb_force_recoverty
innodb_fast_shutdown控制表的InnoDB存儲(chǔ)引擎在關(guān)閉時(shí)的行為
可選參數(shù)值:
0:默認(rèn)值;
需要執(zhí)行purge all、merge change buffer、flush dirty pages操作;
此方式是最慢的關(guān)閉方式,但是restart時(shí)最快;
1:不需要執(zhí)行purge all、merge change buffer等操作,但是需要執(zhí)行flush dirty pages操作;
2:不完成purge all、merge change buffer等操作,也不刷新臟頁(yè)到磁盤;
只是將日志寫入日志文件,因此不會(huì)丟數(shù)據(jù),但是重新啟動(dòng)會(huì)進(jìn)行recovery操作;
7、innodb_force_recoverty
控制表的InnoDB存儲(chǔ)引擎在恢復(fù)時(shí)的行為
可選參數(shù)值:
0:默認(rèn)值,當(dāng)需要恢復(fù)時(shí)執(zhí)行所有操作;
1:忽略檢查到的corrupt頁(yè);
2:阻止主線程的運(yùn)行,
3:不執(zhí)行事務(wù)回滾操作;
4:不執(zhí)行插入緩沖的合并操作;
5:不查看撤銷日志,InnoDB存儲(chǔ)引擎會(huì)將未提交的事務(wù)視為已提交;
6:不執(zhí)行前滾操作;
7、innodb_status_output和innodb_status_output_locks
數(shù)據(jù)庫(kù)監(jiān)控信息記錄到error log
建議關(guān)閉,防止錯(cuò)誤日志增長(zhǎng)過(guò)快,造成磁盤空間使用緊張
8、innodb_io_capacity
InnoDB后臺(tái)進(jìn)程最大的I/O性能指標(biāo),影響刷新臟頁(yè)和插入緩沖的數(shù)量
默認(rèn)值為200,可根據(jù)實(shí)際使用的磁盤類型選擇調(diào)整
9、auto_increment_increment和auto_increment_offset
auto_increment_increment表示自增長(zhǎng)字段每次遞增的量,默認(rèn)值為1
auto_increment_offset表示自增長(zhǎng)字段從哪個(gè)值開始,默認(rèn)值為1
歡迎訂閱個(gè)人公眾號(hào),瀏覽更多MySQL技術(shù)體系知識(shí)。
總結(jié)
以上是生活随笔為你收集整理的mysql核心参数_MySQL技术体系之核心参数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 退伍军人考辅警一千米不及格会录取嘛
- 下一篇: 牛肉面牛肉怎么做?