0

我每 30 秒对 MySQL 数据库运行一次以下查询:

SELECT message.id FROM message WHERE userto='13689' AND tstampviewed IS NULL AND message.status != 'VOID';

它经常出现在我的慢查询日志中,但在我看来,它已经尽可能地优化了。

解释的结果:

SELECT_TYPE = 简单

表 = 消息

类型 = 参考

POSSIBLE_KEYS = userto,tst,stat

KEY = 用户

KEY_LEN = 53

REF = 常量

行 = 1

EXTRA =“在哪里使用”

键 userto、tst 和 stat 都是普通的 BTREE 索引,一个对应于查询的 where 子句中引用的每个 varchar 字段。这是一个有 300K 行的 MyISAM 表。用户确实一致地写入表,但读取的可能性更大(读取与写入的比率为 10/1)。数据库服务器是具有大量 CPU 和快速驱动器的 Windows 2008 Enterprise。

在过去的一个月里,我们不断收到 max_connection 错误,即使我将 max_connections 从 750 增加到 1500。一天几次,查询似乎挂起(我无法验证这一点,因为我无权访问该进程实时列表),1500个查询堆积在它后面并最大化连接。这显然会导致许多其他问题。

上述查询始终出现在慢查询日志中,尽管我认为它已尽可能优化。任何人都可以告诉我或者指出我解决这个问题的正确方向吗?

提前致谢。

4

1 回答 1

0

问题不在于查询 - 您正在打开与数据库的连接而不是关闭它,而是每次打开一个新连接。

于 2012-11-06T00:32:15.120 回答