MySQL 报 Can't create more than max_prepared_stmt_count statements
-
前言
-
最近壓測完畢以后, MySQL 報 Can't create more than max_prepared_stmt_count statements. 正常情況下是程序沒有關(guān)閉 stmt 導(dǎo)致. 也不排除并發(fā)量很大, MySQL 沒機會去關(guān)閉. 這種情況我們系統(tǒng)來說出現(xiàn)概率較少, 并發(fā)量還沒有那么大. 以下為定位問題的過程.
-
-
操作
-
1、出現(xiàn)此類問題, 如果是線上應(yīng)立即執(zhí)行?set global max_prepared_stmt_count =?1048576,先控制住錯誤。然后進行定位代碼。它的取值范圍為“0 - 1048576”,默認(rèn)為16382。show variables like '%prepared%' 查看當(dāng)前max_prepared_stmt_count的最大值。
-
2、以下為在測試環(huán)境的操作,首先開啟mysql日志,容易定位錯誤。? set global general_log = on;?
-
3、查看mysql日志存放路徑,show variables where Variable_name like "general_log%" 結(jié)果中會顯示。
-
4、set global max_prepared_stmt_count = 1000 設(shè)置小點, 容易復(fù)現(xiàn)錯誤. 靜待錯誤發(fā)生.(也可以直接看日志, 但是日志太多, 不是很方便)
-
5、錯誤爆發(fā)后,SHOW GLOBAL STATUS LIKE 'com_stmt%'。查看數(shù)據(jù)庫 prepare 的情況。如果Com_stmt_close與Com_stmt_prepare之間的差過大就會報錯。
-
6、查看日志。正常情況日志由prepare、execute、close stmt組成,如果發(fā)現(xiàn)有很多prepare與execute組成,而沒有close stmt則基本定位到這條sql沒有close stmt。查看sql,定位源碼。
-
-
轉(zhuǎn)載于:https://www.cnblogs.com/Zereker/p/11396597.html
總結(jié)
以上是生活随笔為你收集整理的MySQL 报 Can't create more than max_prepared_stmt_count statements的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 下 top 命令的使用详解
- 下一篇: MySQL 搜索指定时间范围数据, 时间