max_prepared_stmt_count 問(wèn)題處理

參考: https://zhuanlan.zhihu.com/p/67188414

問(wèn)題引入
在做壓力測(cè)試的時(shí)候,我使用了sysbench 1.1.0-faaff4f版本霸奕,測(cè)試命令如下:
sysbench oltp_read_only.lua --mysql-host=... --mysql-port=3306 --mysql-user=root --mysql-password=1234 --tables=10 --table-size=10000000 --time=600 --report-interval=10 --threads=1024 prepare

問(wèn)題主要出現(xiàn)在這個(gè)--threads身上溜宽,我的壓測(cè)線程數(shù)增長(zhǎng)是從 1,2质帅,4适揉,8,16临梗,32涡扼,64稼跳,128盟庞,256,512汤善,1024什猖,在1024前壓測(cè)都是沒(méi)有問(wèn)題了,但當(dāng)線程數(shù)增長(zhǎng)到了1024后红淡,sysbench 報(bào)錯(cuò)了不狮。

FATAL: MySQL error: 1461 "Can't create more than max_prepared_stmt_count statements (current value: 16382)"

這個(gè)問(wèn)題很好解決,上網(wǎng)一查就知道怎么解決在旱,登錄mysql摇零,調(diào)整這個(gè)變量值的大小即可。

mysql> show global status like 'com_stmt%';

查看如下3個(gè)參數(shù)值:
Com_stmt_close prepare語(yǔ)句關(guān)閉的次數(shù)
Com_stmt_execute prepare語(yǔ)句執(zhí)行的次數(shù)
Com_stmt_prepare prepare語(yǔ)句創(chuàng)建的次數(shù)

Com_stmt_prepare 減去 Com_stmt_close 大于 max_prepared_stmt_count 就會(huì)出現(xiàn)這種錯(cuò)誤桶蝎。那么我們手動(dòng)調(diào)高max_prepared_stmt_count(取值范圍:0 - 1048576驻仅,默認(rèn)16382)即可解決

mysql> set global max_prepared_stmt_count=500000;

那這里就容易再次引發(fā)一個(gè)問(wèn)題,我們?cè)O(shè)置max_prepared_stmt_count為50萬(wàn)登渣,但是我們其實(shí)現(xiàn)在是知其然不知其所以然噪服,max_prepared_stmt_count是干什么的,為什么會(huì)超過(guò)默認(rèn)值這個(gè)才是我們真正應(yīng)該關(guān)心的胜茧。

max_prepared_stmt_count基本介紹

這個(gè)參數(shù)是MySQL的一個(gè)基本參數(shù)粘优,其是用來(lái)限制一個(gè)session內(nèi)最多可以有多少條預(yù)編譯語(yǔ)句,什么是sql的預(yù)編譯呻顽,下面這篇文章講得很好雹顺,網(wǎng)上也有很多參考,大家可以直接查廊遍。

MySQL的SQL預(yù)處理(Prepared) - GeaoZhang - 博客園www.cnblogs.com/geaozhang/p/9891338.html[圖片上傳失敗...(image-f5747-1659506762190)]

那為什么我們會(huì)超過(guò)max_prepared_stmt_count的默認(rèn)大小16382呢无拗?下面我們就先來(lái)介紹一下sysbench工具中關(guān)于壓測(cè)數(shù)據(jù)庫(kù)的lua腳本。

sysbench 壓測(cè)數(shù)據(jù)庫(kù)的lua腳本個(gè)人理解

sysbench官方默認(rèn)幫我們配置了默認(rèn)壓測(cè)數(shù)據(jù)庫(kù)的腳本:

image.png

這幾個(gè)腳本里面的功能我們簡(jiǎn)單說(shuō)明一下:
oltp_common.lua 腳本是提供給其他腳本如oltp_read_only.lua調(diào)用的昧碉,是基本的一系列函數(shù)英染。oltp_read_only.lua 主要的工作根據(jù)壓測(cè)需求來(lái)調(diào)用oltp_common.lua中的函數(shù)揽惹。

sysbench 的基本工作流程:

  1. prepare:
    sysbench oltp_read_only.lua --mysql-host=x.x.x.x --mysql-port=3306 --mysql-user=root --mysql-password=password --tables=10 --table-size=10000000 --threads=1024 prepare
    這個(gè)語(yǔ)句的基本作用就是調(diào)用建表語(yǔ)句,建立十張表四康,每張表大小1千萬(wàn)行搪搏。
  2. run:
    sysbench oltp_read_only.lua --mysql-host=10.191.1.235 --mysql-port=6446 --mysql-user=root --mysql-password=vm000 --tables=10 --table-size=10000000 --threads=1024 --time=600 --report_interval=10 run
    這個(gè)的過(guò)程實(shí)際是:建立數(shù)據(jù)庫(kù)連接-->預(yù)編譯SQL語(yǔ)句-->執(zhí)行預(yù)編譯語(yǔ)句
  3. cleanup:
    sysbench oltp_read_only.lua --mysql-host=x.x.x.x --mysql-port=3306 --mysql-user=root --mysql-password=password --tables=10 --table-size=10000000 --threads=1024 cleanup
    這里的實(shí)際過(guò)程是:直接將數(shù)據(jù)庫(kù)的表drop掉。

從第二步run 我們就可以知道我們?yōu)槭裁磿?huì)出現(xiàn)超過(guò)max_prepared_stmt_count的默認(rèn)大小16382的報(bào)錯(cuò)了闪金。我們先來(lái)看一下oltp_read_only.lua代碼內(nèi)容:

image.png

這里面函數(shù) function prepare_statements()中的兩個(gè)if判斷結(jié)果均為true疯溺,這個(gè)是因?yàn)樵谀J(rèn)情況下oltp_common.lua中已經(jīng)指定skip_trx=false, range_selects=true

image.png

所以這里一共需要調(diào)用7個(gè)預(yù)編譯函數(shù):
prepare_point_selects()
prepare_begin()
prepare_commit()
prepare_simple_ranges()
prepare_sum_ranges()
prepare_order_ranges()
prepare_distinct_ranges()

因?yàn)槲覀円还灿?0張表,相對(duì)于每一張表都需要執(zhí)行7個(gè)預(yù)編譯語(yǔ)句哎垦,所以我們可以計(jì)算:
在512個(gè)線程并發(fā)下囱嫩,每一個(gè)線程我們可以視之為一個(gè)用戶,每一個(gè)用戶需要在每一張表上預(yù)編譯7條SQL語(yǔ)句漏设,所以一共prepare的語(yǔ)句是:
Com_stmt_prepare = 512 * 10 * 7 = 35840 > 16382(max_prepared_stmt_count statements 默認(rèn)16382)

所以就出現(xiàn)上面的錯(cuò)誤:
FATAL: MySQL error: 1461 "Can't create more than max_prepared_stmt_count statements (current value: 16382)"

這個(gè)是一個(gè)大概的推測(cè)值墨闲,因?yàn)閷?shí)際執(zhí)行時(shí)還會(huì)有出入。這個(gè)數(shù)字可以方便我們?cè)诔霈F(xiàn)上面問(wèn)題后郑口,設(shè)置max_prepared_stmt_count_statements的值有一個(gè)參考的方向鸳碧,而不是盲目地設(shè)置成最大。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末犬性,一起剝皮案震驚了整個(gè)濱河市瞻离,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乒裆,老刑警劉巖套利,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鹤耍,居然都是意外死亡肉迫,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)惰蜜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)昂拂,“玉大人,你說(shuō)我怎么就攤上這事抛猖「窈睿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵财著,是天一觀的道長(zhǎng)联四。 經(jīng)常有香客問(wèn)我,道長(zhǎng)撑教,這世上最難降的妖魔是什么朝墩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮伟姐,結(jié)果婚禮上收苏,老公的妹妹穿的比我還像新娘亿卤。我一直安慰自己,他們只是感情好鹿霸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布排吴。 她就那樣靜靜地躺著,像睡著了一般懦鼠。 火紅的嫁衣襯著肌膚如雪钻哩。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天肛冶,我揣著相機(jī)與錄音,去河邊找鬼。 笑死近范,一個(gè)胖子當(dāng)著我的面吹牛阱飘,可吹牛的內(nèi)容都是我干的沥匈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼预麸!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蹈矮,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤丐巫,失蹤者是張志新(化名)和其女友劉穎碑韵,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贺拣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡客们,死狀恐怖底挫,靈堂內(nèi)的尸體忽然破棺而出恒傻,到底是詐尸還是另有隱情,我是刑警寧澤建邓,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布盈厘,位于F島的核電站,受9級(jí)特大地震影響官边,放射性物質(zhì)發(fā)生泄漏沸手。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一注簿、第九天 我趴在偏房一處隱蔽的房頂上張望契吉。 院中可真熱鬧,春花似錦诡渴、人聲如沸捐晶。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)惑灵。三九已至,卻和暖如春眼耀,著一層夾襖步出監(jiān)牢的瞬間英支,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工畔塔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留潭辈,地道東北人鸯屿。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓澈吨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親寄摆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谅辣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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