【问题标题】:MYSQL Error, server has gone away?MYSQL 错误,服务器已经消失?
【发布时间】:2011-02-18 15:23:56
【问题描述】:

我正在使用下面的查询,当我每页运行一次此查询时没有问题,但需要在单个页面上调用大约 30 次以上的值略有不同,有时它运行正常,有时页面从不加载,有时我会收到“服务器已消失”错误,http://dev.mysql.com/doc/refman/5.0/en/gone-away.html

这是一个性能问题吗,我是否需要将此查询分解为更小的查询(这甚至会产生任何影响),还是我可以做些什么?

SELECT normalmtm.id, normalmtm.amt, normalmtm.lockexpire, ptassumptions.id, ptassumptions.zero, ptassumptions.beta, ptdata.id, ptdata.date
FROM normalmtm
INNER JOIN ptdata ON ptdata.date = normalmtm.lockdate
INNER JOIN program ON program.clientcode = '1' AND program.clientprogram = normalmtm.program AND program.normalprogram = 'program'
INNER JOIN ptassumptions ON ptassumptions.clientcode = '1' AND ptassumptions.program = program.normalprogram
INNER JOIN purpose ON purpose.clientcode = '1' AND purpose.clientpurpose = normalmtm.purpose AND purpose.normalpurpose = ptassumptions.purpose
INNER JOIN status ON status.clientcode = '1' AND status.clientstatus = normalmtm.stage AND status.normalstatus = ptassumptions.status
WHERE normalmtm.clientcode = '1'
GROUP BY normalmtm.id

normalmtm 表有几千行,其他表是较小的规范化表,大约 100 行

编辑

它是在本地 Windows 机器上运行的 WAMP 服务器,Apache 版本:2.2.11,PHP 版本:5.3.0,MySQL 版本:5.1.36

【问题讨论】:

  • 你考虑过缓存吗?
  • 你用的是什么mysql客户端?我已经看到 5.0.52 客户端的错误 - 一个已知问题。

标签: php mysql


【解决方案1】:

你有正确的索引吗?如果您只获得您提到的记录数,则此查询应该会立即运行。

【讨论】:

  • 是的,索引有很大的不同,尤其是在连接表时。单表查找可以很好地工作,但没有连接,你需要索引:)
  • 你们是对的,即使我们添加了索引也没有索引,当我使用“SHOW INDEX FROM tablename”时,它表明没有使用,我在本地 Windows 上使用 WAMP 服务器机器,我通过单击表结构视图中的索引图标从 phpMyAdmin 控制面板添加索引,我还尝试“ALTER TABLE”更直接地更改它,但它仍然没有效果,这是 WAMP 的问题吗?我的网络服务器也有同样的问题?
【解决方案2】:

看来你已经找到答案了。

从创建连接到向 DBMS 发出查询需要多长时间?从开始查询到收到错误消息需要多长时间? wait_timeout 的值是多少?

normalmtm 表有几千行,其他表是较小的规范化表,大约 100 行

因此,假设数据库已规范化(使用基于时间的连接!!!!!!??????行(后者是一个相当大的数字)。

听起来您需要查看索引。

【讨论】:

    猜你喜欢
    • 2011-06-07
    • 2010-12-20
    • 2015-01-15
    • 2016-03-06
    • 2017-04-02
    • 2011-11-09
    • 2014-02-12
    • 2015-04-05
    相关资源
    最近更新 更多