2016-11-03 49 views
0

有沒有辦法,看看有什麼準備語句與此錯誤關聯:MySQL的太多準備的語句

(OperationalError) failed to prepare the MySQL query: 
Can't create more than max_prepared_stmt_count statements (current value: 20000) 

其中幾個過程可能是負責這個問題,我想圖從哪一個角度來看,它可能是我能想到的最簡單的方法,即查看準備好的語句的文本並將其追溯到源代碼中。

有什麼方法可以看到這些準備好的聲明是什麼,所以我可以找到有罪的派對?

+3

打開查詢日誌。 – Shadow

回答

0

要查看預處理語句有多少是當前打開的,你可以運行:

SHOW GLOBAL STATUS LIKE 'com_%prepare%'; 

它給你的東西,如:

Variable_name  | Value 
-------------------+-------- 
Com_prepare_sql | 2 
Com_stmt_prepare | 2 
Com_stmt_reprepare | 0 
Com_xa_prepare  | 0 

讀取實際的語句,你將需要尋找在一般查詢日誌一會兒,然後從中讀取。 我喜歡用一個表爲一般日誌:

-- set up 
TRUNCATE TABLE mysql.general_log; 
SET GLOBAL log_output = 'TABLE'; 
SET GLOBAL general_log = 'ON'; 

-- wait for some time 
SET GLOBAL general_log = 'OFF'; 

-- read results 
SELECT * FROM mysql.general_log WHERE argument LIKE 'prepare%' OR argument LIKE 'execute%'; 

你可以看到正在準備和執行的語句:

command_type | argument 
-------------+-------------------------------------------------------- 
Query  | prepare st from "select * from people where name = ?" 
Query  | execute st Using @name