我们最近使用mysql 8迁移到了一个新的数据库服务器(之前的版本为5.7 )。我们现在有了一个表,它存储一个int、一个datetime和一个中间文本列,这些列增长得太大了。以至于服务器的全部硬盘空间都耗尽了。
问题是表只包含大约100行数据,而idb文件在优化表为7 Mb之后。经过一周的运行,该表的容量已超过700 to。
这张表确实收到了大量的deletes+inserts。多年来,我们在老服务器上都有相同的表,没有问题。
我试过了
innodb_purge_threads = 32
innodb_max_purge_lag = 2000000但是这张桌子继续以每分钟20兆的速度增长,没有任何明显的原因。我是不是遗漏了任何特殊的mysql新特性?
或者现在我需要让我的应用程序每隔几分钟运行一次优化表。似乎数据库应该自行处理这个问题,而不是依赖于应用程序中的此类黑客。
提前感谢您的指点!
Windows2019上运行的MySQL服务器版本为8.0.18,内存为32 of。此服务器上没有运行其他任何内容,而且数据库服务器是从具有三分之一此规范的旧版本升级的。表结构相同,在旧服务器上运行多年,没有问题。
以下是表格结构:
The following is the Show Create Table
CREATE TABLE `automationjobstate` (
`AutomationJobID` int(10) unsigned NOT NULL,
`StateTimestamp` datetime NOT NULL,
`StateData` mediumtext,
PRIMARY KEY (`AutomationJobID`),
CONSTRAINT `automationjobstate_ibfk_1` FOREIGN KEY (`AutomationJobID`) REFERENCES `automationjobs` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci如何附加显示变量的结果?它对许多人物都是如此。
发布于 2019-12-12 06:53:45
现在已经过去了大约30个小时,所讨论的表(即idb文件)占用的磁盘空间比预期的要少。使用该表的应用程序也离线了几个小时,因此该表再次缩小。一旦应用程序重新上线,它仍然表现出其日益增长的行为。
现在看来,mysql内部有一个清除系统,它无法完全跟上该表的使用--尽管在旧得多的硬件上使用了更老的5.7 MySQL,但没有这个问题。
我认为这种实现是对我最初问题的答案,我将不得不调整innoDB清除参数以找到最优设置,或者可能每隔一段时间从应用程序中触发优化表。
https://dba.stackexchange.com/questions/255359
复制相似问题