Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql突然忽略了一段时间的表索引_Mysql_Database - Fatal编程技术网

mysql突然忽略了一段时间的表索引

mysql突然忽略了一段时间的表索引,mysql,database,Mysql,Database,在我们的mysql 5.1服务器上有一个名为的innodb表,它是web应用程序的中心。由于一个糟糕的实现,它有大约150000行和太多的列 最近,我们一直在运行一项任务,该任务每隔几秒钟频繁更新一次表(插入或更新) 当该任务运行时,数据库将定期(每1-3小时)变得更慢,以处理客户端读取请求。在这些时间里,slow_log将此表作为罪魁祸首,对它的任何请求看起来都像是在进行完整的表扫描。最终,在5-20分钟内,它将自行恢复正常处理 我的假设是,不断的表更新每隔一段时间就会使mysql的查询优化器

在我们的mysql 5.1服务器上有一个名为的innodb表,它是web应用程序的中心。由于一个糟糕的实现,它有大约150000行和太多的列

最近,我们一直在运行一项任务,该任务每隔几秒钟频繁更新一次表(插入或更新)

当该任务运行时,数据库将定期(每1-3小时)变得更慢,以处理客户端读取请求。在这些时间里,slow_log将此表作为罪魁祸首,对它的任何请求看起来都像是在进行完整的表扫描。最终,在5-20分钟内,它将自行恢复正常处理

我的假设是,不断的表更新每隔一段时间就会使mysql的查询优化器统计数据出错。我不知道如何证明这一点或找到解决办法

以下是原因吗

  • 表上的次级指数太多(约45个,很多 不必要,但需要时间和小心修剪)
  • 配置参数不正确(查询缓存打开,innodb缓存为5G)
  • Mysql 5.1已经过时,应该升级
  • 数据库服务器可能只需要更多的RAM/CPU来处理负载
  • 我非常乐意在评论中提供您可能要求的任何其他信息

    以下是原因吗

    表上的二级索引太多(约45个,许多是不必要的,但需要时间和精力进行删减)

    是的,如果您正在运行一个任务,它会执行大量的插入/更新,确保在该表中有大量的索引会使sql引擎过载。考虑到对于每个插入/更新,sql必须对每个索引执行相同的插入。尽量只保留那些真正需要的索引。并且仅当selects的数量大于insert语句时

    错误的配置参数(查询\u缓存打开,innodb\u缓冲区关闭) 在5G时)

    是的,查询缓存是否有用,取决于专用于它的ram数量(query\u cache\u size)和服务器的ram总量。最好是分配少量,检查性能,增加数量,再次检查是否进展良好,等等。 其他选项,如键缓冲区(重要!如果您有这么多索引)可能是决定性的

    Mysql 5.1已经过时,应该升级

    当然,升级和提高性能很重要,但我不认为这能解决问题

    数据库服务器可能只需要更多的RAM/CPU来处理 装载


    我们可以在这里说同样的话,但我会优先考虑数据库设计和优化查询。

    对于更新,
    说明了什么?但是,
    query\u缓存
    很可能就是这里的恶棍。如果
    UPDATE
    很大,则需要清除将其重新添加到缓存中的命令,这通常会花费时间。不幸的是,EXPLAIN仅适用于mysql 5.1的SELECT语句。有一些插入出现在慢速日志中,但这些插入发生在所有选择都很慢的时候,因此可能更多的是一种症状而不是原因。这可能是我们能得到的最接近的答案。好的方面是,你有明确的行动来解决这个问题。这很有帮助,给了我一些方向。我不完全相信索引/插入的数量是造成这种间歇性问题的唯一原因。更新表格的任务整天都在运行,我们每1-3小时就会看到一个问题。如果插入开销是问题所在,那么这不应该是一个更稳定的问题吗?作为参考,任务运行时CPU的使用率通常约为15%,然后在出现问题时稳定为100%。