有没有办法查看与此错误相关的预准备语句:
(OperationalError) failed to prepare the MySQL query:
Can't create more than max_prepared_stmt_count statements (current value: 20000)
其中一个进程可能会导致这个问题,我正在试图找出哪一个可能是我能想到的最简单的方法,即查看准备好的语句的文本并将其追溯到源。
有没有办法看到这些准备好的陈述是什么,所以我可以找到有罪的一方?
答案 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