我发现我的MariaDB的ibdata文件不断增加。因此,我搜索了这个,并发现innodb_file_per_table应该设置为1。但是,我的DBMS的配置已经设置为1;
为什么ibdata文件大小不断增加,我还应该为此做些什么。
以下是我的dbms信息。
DBMS: MariaDB
engine: InnoDB Engine
version: 10.3
** my.cnf **
innodb_file_per_table=ON
transaction-isolation=READ-COMMITTED发布于 2021-02-04 14:57:10
想到的第一个想法是:“哇!你一定有相当大的交易。”
根据MysqlPerformanceblog.com的主要原因是Innodb表空间的说法,这些是导致ibdata1增长的主要问题:
ibdata1内部的撤销日志将保存大量信息以支持事务隔离级别。由于您使用的是READ-COMMITTED,这种增长可能更显着。
我以前在DBA StackExchange中讨论过这个问题。
Aug 21, 2015:用于MySQL的事务性DDL工作流Jun 16, 2014:表上的MySQL索引创建失败已满Apr 23, 2013:Innodb ibdata1 1文件如何能以5倍的速度增长?_文件_每_桌子准备好了?由于您使用的是MariaDB,请查看系统表空间之外的撤消日志配置。请阅读MariaDB在诺姆b_撤消_目录和诺姆b_撤消_表空间上的文档,然后从那里开始。
您可能必须将mysqldump作为您的数据并将其加载到MariaDB的新安装中。有关其他想法,请参阅我在如何在不转储所有数据库的情况下收缩innodb文件ibdata1 1?中的文章。不管怎样,这需要一些工作!
发布于 2023-04-25 06:08:24
这个主题也在MDEV 21952中进行了讨论。在即将发布的MariaDB服务器10.6.13版本中,MDEV 29593应该改进撤消日志页的重用。从MariaDB服务器10.11 (最新的长期支持版本系列)开始,多亏了MDEV 19229,您可以在SET GLOBAL innodb_fast_shutdown=0; SHUTDOWN;之后更改innodb_undo_tablespaces的值。
驻留在InnoDB系统表空间中的表应该通过以下查询来报告:
SELECT name FROM information_schema.innodb_sys_tables WHERE space=0;最后但并非最不重要的一点是,MDEV 27734默认设置innodb_change_buffering=none不仅因为它会使系统表空间无法控制地增长,而且还因为各种腐败问题影响了MySQL和MariaDB。
发布于 2021-02-04 20:28:21
(Rolando的回答指出了该文件增长的方式;我将讨论表是否在ibdata1中而您没有意识到的问题。)
这总是设置好的吗?innodb_file_per_table=ON --我问你,是因为它只适用于打开它之后创建的表。
在每个目录中执行SHOW TABLE STATUS。观察Data_free。您将看到一些可能的值:
innodb_file_per_table=OFF创建的,也就是说,住在ibdata1里。上述测试不确定,但速度相对较快。
有一种依赖于版本的方法可以使用information_schema来发现每个表的文件;我不碰巧知道MariaDB 10.3的表和列。
https://dba.stackexchange.com/questions/284699
复制相似问题