InnoDB-IBD文件逐渐占用服务器上的所有空间

时间:2018-08-08 15:25:28

标签: mysql wordpress mariadb innodb

环境

我们在运行MariaDB(版本10.3.8)的CentOS服务器上有一个登台/测试WordPress网站。我们一直在尝试使用名为GeoDirectory(https://wpgeodirectory.com/)的插件。该插件在数据库中创建各种表。数据库还使用innodb_file_per_table设置为ON,因此数据库已经为数据库中的每个表空间生成了IBD文件。

问题

登台服务器具有80 GB的存储空间。在对插件的设置进行了特定更改(更新“位置设置”)之后,我们注意到大约十分钟后,当我们尝试通过浏览器访问临时站点时,该临时站点已超时。

通过SSH登录时,我们注意到该机器完全没有空间了。在/ var中寻找最大的文件,我注意到一个文件现在占用70 GB的空间(wp_g1a4rar7xx_geodir_gd_place_detail.ibd)。这是与设置更新表相对应的IBD文件。

登录SQL并对该表中的记录数进行计数(*),只有6,000条记录。

由于表已经用完,占用了整个磁盘,即使尝试OPTIMIZE TABLE也因为空间不足而无法正常工作。

问题

怎么可能使文件气球如此之大?我们如何避免将来发生这种情况?

鲁eck的猜测

基于搜索,我们认为这可能与InnoDB执行的回滚/日志记录有关,并且我们可以通过在my.cnf中进行一些更改以限制日志记录来避免这种情况。同样,这可能是完全不同的东西。

这是my.cnf中当前的/etc/my.cnf

[mysqld]
bind-address = 0.0.0.0
# bind-address = ::ffff:127.0.0.1
local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security 
risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

基于插件的名称,我猜测该问题可能与索引的几何列的更新有关。 MariaDB Server 10.2从MySQL 5.7导入了对SPATIAL INDEX的InnoDB支持,并且似乎有时会跳过对版本历史记录的清除,具体取决于并发DML活动。

我在MDEV-15284中提到了这种特殊的设计选择,该选择报告说,如果正在执行并发的ROLLBACK,则SPATIAL INDEX上的SELECT可能会返回不一致的结果。