MySQL的太多准备的语句

问题描述:

有没有办法,看看有什么准备语句与此错误关联:MySQL的太多准备的语句

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

其中几个过程可能是负责这个问题,我想图从哪一个角度来看,它可能是我能想到的最简单的方法,即查看准备好的语句的文本并将其追溯到源代码中。

有什么方法可以看到这些准备好的声明是什么,所以我可以找到有罪的派对?

+3

打开查询日志。 – Shadow

要查看预处理语句有多少是当前打开的,你可以运行:

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