MySQL有太多准备好的语句

时间:2016-11-03 21:35:27

标签: mysql

有没有办法查看与此错误相关的预准备语句:

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

其中一个进程可能会导致这个问题,我正在试图找出哪一个可能是我能想到的最简单的方法,即查看准备好的语句的文本并将其追溯到源。

有没有办法看到这些准备好的陈述是什么,所以我可以找到有罪的一方?

1 个答案:

答案 0 :(得分: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