MySQL的太多准备的语句
问题描述:
有没有办法,看看有什么准备语句与此错误关联:MySQL的太多准备的语句
(OperationalError) failed to prepare the MySQL query:
Can't create more than max_prepared_stmt_count statements (current value: 20000)
其中几个过程可能是负责这个问题,我想图从哪一个角度来看,它可能是我能想到的最简单的方法,即查看准备好的语句的文本并将其追溯到源代码中。
有什么方法可以看到这些准备好的声明是什么,所以我可以找到有罪的派对?
答
要查看预处理语句有多少是当前打开的,你可以运行:
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
打开查询日志。 – Shadow