gpt4 book ai didi

mysql - MySQL 中有太多未知写入

转载 作者:行者123 更新时间:2023-11-29 07:13:28 25 4
gpt4 key购买 nike

我的生产环境中有一个 MySQL 数据库,大约有 4.3 亿行,其中 1.9 亿行没有任何用处,所以我开始在晚上逐范围删除这些行,因为这会影响我的应用程序在白天的性能。

现在,当我在监控应用程序中看到时,我看到 100%IO,其中最大值为写入(12-30MB/s)。 (400-500 次写入/秒)但是当我检查进程列表时,我没有找到任何 INSERT 或 UPDATE 查询或任何回滚。

可能的问题是什么,或者我如何找到可能在 MySQL 中写入的任何隐藏查询。

(在IOTP中,我发现写操作仅由mysqld完成) enter image description here

还有一件事,我可以在 IOTOP 中看到写入速度为 80MB/s,但是当我检查/中的目录大小时,我没有看到任何目录大小有任何增加。

最佳答案

慢慢后退……然后等待。

InnoDB 不会通过每个 DML 查询更改表空间文件中的实际数据。

当然,它会将更改写入内存,然后 redo log ,此时它们实际上是“事件的”并安全地保存到磁盘......但它们尚未应用于实际的数据(表空间)文件。然后,InnoDB 在后台将更改同步到数据文件,但与此同时,其他查询使用表空间和日志内容的组合来确定“官方”表数据当前包含的内容。当然,这过于简单化了,但是 MVCC 必然意味着物理数据是逻辑数据的超集,尽管不一定是逻辑数据的正确超集。

这很可能就是您现在所看到的情况的解释。

空闲/已用磁盘空间没有改变是有道理的,因为最终删除这些行只会真正将表空间文件内的空间标记为未使用。它们不应该增大或缩小。

抵制尝试“修复”它的诱惑,无论你做什么,都不要重新启动服务器......因为最好的可能结果是它会从上次中断的地方继续,因为它仍然有工作要做。

SHOW ENGINE INNODB STATUS 需要一些练习来解释,但很可能是解决这个难题的另一个关键。

关于mysql - MySQL 中有太多未知写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38802507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com