主要观点总结
文章介绍了Percona资深工程师Marco Tusa爆料关于MySQL 8.0.38版本及之后版本的问题,即在实例中表个数超过一万时,实例重启会出现Crash失败的情况。文章还提到了相应的测试用例和测试结果,以及应对方案和个人看法。
关键观点总结
关键观点1: MySQL 8.0.38及以上版本存在表数量超过一万后实例重启失败的问题。
该问题在Percona工程师Marco Tusa的爆料中得到确认,详细复现过程参见其提供的链接。该问题在MySQL 8.4.1和9.0.0版本中同样存在。
关键观点2: 测试用例及结果
文章提供了一个简单的测试用例来复现这个问题,包括创建一个数据库、创建表、插入数据、达到表数量上限并重启实例的步骤。测试结果显示,在升级到指定版本后,实例重启会失败。
关键观点3: 问题规避方案和个人看法
文章提到了采用共享/通用表空间方案来规避这个问题,并提供了相应的SQL命令。个人看法中,虽然这个问题很low,但很容易规避。作者对MySQL依然持有乐观态度,并分享了一些其他相关话题。
关键观点4: AliSQL内核开发者对问题的深入分析
文章提到了AliSQL内核开发者对引发此问题的bug进行的深入分析,以及他在AliSQL上做的优化。同时提供了相关链接供读者深入了解。
文章预览
Percona 资深工程师 Marco Tusa 近日爆料称,升级到 MySQL 8.0.38 版本后,当实例中的表个数超过一万个,实例重启后会发生 Crash 而失败,即便是重启时加上 validate_tablespace_paths=OFF 也不 行。 这个问题在 >= 8.0.38 版本中存在,包括 8.4.1 和 9.0.0 。 详细复现过程参见: https://perconadev.atlassian.net/browse/PS-9306 。 用 MySQL 9.0.0 版本测试: -- 创建一个最简单的表,并写入数据 > CREATE DATABASE test ; > USE test ; > CREATE TABLE t_1 ( `id` int NOT NULL , PRIMARY KEY ( `id` ) ); > INSERT INTO t_1 SELECT 1 ; 然后反复创建类似上面的表,表个数达到 1 万。 > SELECT COUNT(*) FROM information_schema.tables WHERE TABLE_SCHEMA = 'test' ; +----------+ | count(*) | +----------+ | 10000 | +----------+ 之后重启实例,就能看到日志里有类似下面的内容,启动失败: [Note] [MY-012207] [InnoDB]
………………………………