专栏名称: 数据分析与开发
伯乐在线旗下账号,分享数据库相关技术文章、教程和工具,另外还包括数据库相关的工作。偶尔也谈谈程序员人生 :)
今天看啥  ›  专栏  ›  数据分析与开发

区区 1 万张表就把 MySQL 给整崩溃了

数据分析与开发  · 公众号  · 数据库  · 2024-07-17 11:50

主要观点总结

文章介绍了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] ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览