最近產品一直在這個錯git
當緩存的預編譯SQL數量超過默認最大值時 就會產生如上錯誤 致使數據庫直接沒法使用 線上出現這個問題真是愁死人github
話很少說 直接上解決思路:數據庫
當時發現這個問題的時候 查了下數據庫預編譯SQL建立次數緩存
show global status like 'com_stmt%';orm
發現close 永遠是0 這個問題源於vertx 如下是我在vertx官方提交的issue 在下個版本會作修復blog
https://github.com/vert-x3/issues/issues/444get
但這仍然不是致使該問題最主要的緣由 主要問題是爲何會建立了將近5萬次的預編譯SQL產品
在同一鏈接下 相同結構的預編譯SQL是不會再被建立的 那麼正常狀況是不可能建立出5w個預編譯SQLit
因此目前能夠猜想 確定是在某個地方出現了動態的預編譯SQL編譯
SELECT * FROM PERFORMANCE_SCHEMA .prepared_statements_instances;
執行以上SQL查詢出已經緩存的預編譯SQL
若是查出來數據爲空 說明performance_schema參數值爲OFF 未開啓 將其開啓 並重啓數據庫便可
爲了方便查看
SELECT
count() AS 重複數,
GROUP_CONCAT(STATEMENT_ID SEPARATOR ',') as STATEMENT_IDS,
t.
FROM
PERFORMANCE_SCHEMA .prepared_statements_instances t
GROUP BY
SQL_TEXT;
使用去重查詢
終於找到了「真兇」
這條預編譯SQL竟然有個值是動態的 而不是使用?佔位 這就致使了每一次insert 都會緩存一個不一樣結構的預編譯SQL 這才導致預編譯SQL建立數量超過MAX值。。。
寫這條SQL的小朋友我真的要抓起來吊打一頓!
最後總算是完美解決這個問題