MySQL部分參數(shù)調(diào)優(yōu)

調(diào)優(yōu)參數(shù)詳情

參數(shù)選項(xiàng) 釋義 默認(rèn)參數(shù) 是否支持熱更新(dynamic) 策略 注意事項(xiàng) 推薦組合
innodb_buffer_pool_size 數(shù)據(jù)緩存,索引緩存,更改數(shù)據(jù)的緩沖薯鼠,存儲(chǔ)內(nèi)部結(jié)構(gòu) 128M Yes MEM*70%
innodb_flush_log_at_trx_commit InnoDB依靠重做日志來保證數(shù)據(jù)能在丟失后進(jìn)行恢復(fù)丁眼,該參數(shù)控制重做日志寫入磁盤的過程 1 Yes 0:log buffer將每秒一次地寫入log file中蛋褥,并且log file的flush(刷到磁盤)操作同時(shí)進(jìn)行钳降。
1:每次事務(wù)提交時(shí)MySQL都會(huì)把log buffer的數(shù)據(jù)寫入log file,并且flush(刷到磁盤)中去。
2:每次事務(wù)提交時(shí)MySQL都會(huì)把log buffer的數(shù)據(jù)寫入log file碑韵,但是flush(刷到磁盤)操作并不會(huì)同時(shí)進(jìn)行。該模式下缎脾,MySQL會(huì)每秒執(zhí)行一次 flush(刷到磁盤)操作
設(shè)置為0祝闻,該模式速度最快,但不太安全遗菠,mysqld進(jìn)程的崩潰會(huì)導(dǎo)致上一秒鐘所有事務(wù)數(shù)據(jù)的丟失联喘。
設(shè)置為1,該模式是最安全的舷蒲,但也是最慢的一種方式耸袜。在mysqld 服務(wù)崩潰或者服務(wù)器主機(jī)crash的情況下,binary log 只有可能丟失最多一個(gè)語句或者一個(gè)事務(wù)牲平。
設(shè)置為2堤框,該模式速度較快,也比0安全纵柿,只有在操作系統(tǒng)崩潰或者系統(tǒng)斷電的情況下蜈抓,上一秒鐘所有事務(wù)數(shù)據(jù)才可能丟失。
innodb_flush_log_at_trx_commit=2
+
sync_binlog=100或者0
sync_binlog 控制數(shù)據(jù)庫的binlog刷到磁盤上 1 YES 為0昂儒,由文件系統(tǒng)自己控制它的緩存的刷新沟使。這時(shí)候的性能是最好的。
為1渊跋,每次事務(wù)提交腊嗡,MySQL都會(huì)把binlog刷下去着倾。
大于1,每($sync_binlog)次事務(wù)提交燕少,MySQL調(diào)用文件系統(tǒng)的刷新操作將緩存刷下去
(犧牲一定的一致性卡者,可以獲得更高的并發(fā)和性能)
為0,風(fēng)險(xiǎn)也是最大的客们。因?yàn)橐坏┫到y(tǒng)Crash崇决,在binlog_cache中的所有binlog信息都會(huì)被丟失。
為1底挫,性能損耗最大恒傻,一旦系統(tǒng)crash,系統(tǒng)才有可能丟失1個(gè)事務(wù)的數(shù)據(jù)建邓。
大于1盈厘,刷新的頻率過高對(duì)IO的影響也非常大
wait_timeout 設(shè)置睡眠連接超時(shí)秒數(shù),如果某個(gè)連接超時(shí)官边,會(huì)被mysql自然終止 28800(秒) Yes 查詢show processlist;
以大多數(shù)sleep進(jìn)程TIME為標(biāo)準(zhǔn)設(shè)值
過大有弊端扑庞,導(dǎo)致MySQL里大量的SLEEP進(jìn)程無法及時(shí)釋放,拖累系統(tǒng)性能
不能設(shè)置過小拒逮,導(dǎo)致“MySQL has gone away”之類的問題
innodb_log_file_size
innodb_log_files_in_group
InnoDB 存儲(chǔ)引擎使用一個(gè)指定大小的Redo log空間,Redo log的空間通過innodb_log_file_sizeinnodb_log_files_in_group來調(diào)節(jié)臀规。將這倆參數(shù)相乘即可得到總的可用Redo log 空間 48M

2
No

No
配置的Redo空間越大滩援,InnoDB就能更好的優(yōu)化寫操作。 當(dāng)出現(xiàn)崩潰或掉電等意外時(shí)塔嬉,增大Redo空間也意味著更長(zhǎng)的恢復(fù)時(shí)間玩徊。
innodb_log_buffer_size 數(shù)據(jù)寫入到內(nèi)存中的日志緩存中,由于InnoDB在事務(wù)提交前谨究,并不將改變的日志寫入到磁盤中恩袱,因此在大事務(wù)中,可以減輕磁盤I/O的壓力胶哲。 16M No 通常情況下畔塔,4MB-8MB已經(jīng)足夠 當(dāng)mysql服務(wù)掛掉時(shí),數(shù)值越大鸯屿,則恢復(fù)數(shù)據(jù)需要越久 對(duì)于比較小innodb_buffer_pool_size澈吨,建議是設(shè)置為一樣大
innodb_buffer_pool_size
+
innodb_log_buffer_size
innodb_file_per_table 默認(rèn)開啟InnoDB為獨(dú)立表空間模式,每個(gè)數(shù)據(jù)庫的每個(gè)表都會(huì)生成一個(gè)數(shù)據(jù)空間 1 Yes 默認(rèn)開啟寄摆,單表在不同的數(shù)據(jù)庫中移動(dòng)谅辣,空間可回收,而且不管怎么刪除婶恼,表空間的碎片不會(huì)太嚴(yán)重的影響性能桑阶,而且還有機(jī)會(huì)處理柏副。
不開啟,會(huì)降低文件系統(tǒng)操作的性能開銷蚣录。適合于將整個(gè)磁盤都用于存儲(chǔ)mysql數(shù)據(jù)的情況割择。
默認(rèn)開啟時(shí),應(yīng)避免單表增加過大包归。
不開啟時(shí)锨推,應(yīng)避免在空間受限的系統(tǒng)表空間里導(dǎo)入大量臨時(shí)數(shù)據(jù)。
默認(rèn)開啟
innodb_lock_wait_timeout 事務(wù)等待獲取資源等待的最長(zhǎng)時(shí)間公壤,超過這個(gè)時(shí)間還未分配到資源則會(huì)返回應(yīng)用失敗 50 Yes 最小可設(shè)置為1s换可,最大可設(shè)置1073741824秒以上再大就會(huì)被截?cái)嗔?/td> 如果事務(wù)開始前部分有其他操作而中途遇到鎖等待超時(shí)則mysql端還需要回滾,如果頻繁出現(xiàn)厦幅,會(huì)增加DB消耗 根據(jù)業(yè)務(wù)量級(jí)沾鳄,對(duì)于數(shù)值進(jìn)行適當(dāng)?shù)慕档突蛘呱摺?/td>
innodb_purge_threads 將purge線程從master線程分離出來,提高cpu使用率提升存儲(chǔ)引擎性能确憨,最大值為32 4 No 可以指定多個(gè)innodb_purge_threads來進(jìn)一步加快和提高undo(還原段)回收速度
innodb_thread_concurrency
innodb_commit_concurrency
默認(rèn)是0译荞,則表示沒有并發(fā)線程數(shù)限制,所有請(qǐng)求都會(huì)直接請(qǐng)求線程執(zhí)行休弃。
同樣控制了多線程并發(fā)提交的數(shù)量吞歼。
0

0
Yes

Yes
如果數(shù)據(jù)庫沒有出現(xiàn)性能問題,且當(dāng)并發(fā)用戶線程數(shù)量小于64塔猾,建議設(shè)置使用默認(rèn)值就好篙骡。
如果負(fù)載不穩(wěn)定,時(shí)而低丈甸,時(shí)而高到峰值糯俗,建議先設(shè)置為128,并通過不斷的降低這個(gè)參數(shù)睦擂,直到發(fā)現(xiàn)能夠提供最佳性能的線程數(shù)
兩者的修改相輔相成得湘,單純調(diào)高innodb_thread_concurrency的數(shù)值,會(huì)造成大量線程阻塞顿仇。
設(shè)置過高值淘正,可能會(huì)因?yàn)橄到y(tǒng)資源內(nèi)部爭(zhēng)奪導(dǎo)致性能下降;
定期監(jiān)控和分析DB臼闻,因?yàn)殡S著數(shù)據(jù)庫負(fù)載的變化跪帝,業(yè)務(wù)的增加,參數(shù)需要?jiǎng)討B(tài)的調(diào)整些阅。
在大多數(shù)情況下伞剑,最佳的值是小于并接近虛擬CPU的個(gè)數(shù)
+
innodb_concurrency_tickets(5000)
+
innodb_commit_concurrency
innodb_write_io_threads
innodb_read_io_threads
IO Thread 的主要工作是要負(fù)責(zé)這些IO請(qǐng)求的回調(diào)(call back)處理 4

4
No

No
根據(jù)CPU核數(shù)來更改相應(yīng)的參數(shù)值,更有效的利用cpu性能市埋。
允許值的范圍是1~64
根據(jù)業(yè)務(wù)量級(jí)的不同黎泣,讀與寫的參數(shù)設(shè)置可以有微小差距恕刘。
innodb_io_capacity 緩沖池沖洗頁和合并從所述插入緩沖數(shù)據(jù)執(zhí)行的I / O活動(dòng)的上限 200 Yes 服務(wù)器的磁盤是5400 RPM ~7200 RPM,屬于比較低級(jí)的磁盤抒倚,根據(jù)MySQL 官方的建議褐着,應(yīng)該將innodb_io_capacity降低到100.
如果具有大量IOPS的快速驅(qū)動(dòng)器,可是適當(dāng)提高該值
設(shè)置過大托呕,則會(huì)造成MySQL高估了磁盤的能力含蓉,導(dǎo)致臟頁堆積。
設(shè)置過低项郊,則會(huì)出現(xiàn)MySQL低估了磁盤的能力馅扣,使得數(shù)據(jù)庫能夠單位時(shí)間內(nèi)提交的事務(wù)數(shù)(tps)降低
采用SSD云盤,確認(rèn)支持的IOPS數(shù)量
innodb_buffer_pool_instances 允許多個(gè)緩沖池實(shí)例,每頁根據(jù)哈希平均分配到不同緩沖池實(shí)例中着降,減少數(shù)據(jù)庫內(nèi)部資源競(jìng)爭(zhēng)差油,增加數(shù)據(jù)庫并發(fā)處理能力 1 No 在buffer_pool不大時(shí),該值越大(低于10)性能越優(yōu)任洞。使用大的 buffer_pool 時(shí)蓄喇,為1時(shí) 的表現(xiàn)最棒 適用于多核處理器,依業(yè)務(wù)量進(jìn)行調(diào)整交掏。
innodb_change_buffer_max_size change buffer在buffer pool中的最大占比妆偏,默認(rèn)25%,最大可設(shè)置為50% 25 Yes 如果系統(tǒng)中有嚴(yán)重的insert盅弛、update并且還有活躍的delete時(shí)楼眷,就增大。
針對(duì)不更改數(shù)據(jù)的純報(bào)表系統(tǒng)熊尉,可以減小該參數(shù)值

性能測(cè)試腳本實(shí)例

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import pymysql
import time

create_table_sql = """
CREATE TABLE users(
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) UNIQUE,
nickname VARCHAR(255) NOT NULL
)
"""
insert_table_sql = """
INSERT INTO users(username, nickname)
 VALUES(%s,%s)
"""
conn = pymysql.connect(host='127.0.0.1', user='root',
                       passwd='123456', db='sbtest', port=4408, charset='utf8')
cur = conn.cursor()
 
cur.execute('DROP TABLE IF EXISTS users')
cur.execute(create_table_sql)
conn.commit()
 
print('開始時(shí)間: '+ time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
start = time.time()
 
failed = 0 # 插入失敗條數(shù)
count = 10000 # 插入1W條數(shù)據(jù)
for i in range(1, count + 1):
    username = 'username_' + str(i)
    nickname = 'nickname_' + str(i)
    try:
        cur.execute(insert_table_sql, (username, nickname))
        conn.commit()
    except:
        print('failed')
 
end = time.time()
print('結(jié)束時(shí)間: '+ time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
 
print('消耗秒數(shù): ' + str(int(end - start)))
print('失敗條數(shù): ' + str(failed)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市掌腰,隨后出現(xiàn)的幾起案子狰住,更是在濱河造成了極大的恐慌,老刑警劉巖齿梁,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件催植,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡勺择,警方通過查閱死者的電腦和手機(jī)创南,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來省核,“玉大人稿辙,你說我怎么就攤上這事∑遥” “怎么了邻储?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵赋咽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我吨娜,道長(zhǎng)脓匿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任宦赠,我火速辦了婚禮陪毡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘勾扭。我一直安慰自己毡琉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布尺借。 她就那樣靜靜地躺著绊起,像睡著了一般。 火紅的嫁衣襯著肌膚如雪燎斩。 梳的紋絲不亂的頭發(fā)上虱歪,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音栅表,去河邊找鬼笋鄙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛怪瓶,可吹牛的內(nèi)容都是我干的萧落。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼洗贰,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼找岖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起敛滋,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤许布,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后绎晃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜜唾,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年庶艾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了袁余。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咱揍,死狀恐怖颖榜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤朱转,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布蟹地,位于F島的核電站,受9級(jí)特大地震影響藤为,放射性物質(zhì)發(fā)生泄漏怪与。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一缅疟、第九天 我趴在偏房一處隱蔽的房頂上張望分别。 院中可真熱鬧,春花似錦存淫、人聲如沸耘斩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽括授。三九已至,卻和暖如春岩饼,著一層夾襖步出監(jiān)牢的瞬間荚虚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工籍茧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留版述,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓寞冯,卻偏偏與公主長(zhǎng)得像渴析,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吮龄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容