环境
我们在运行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
在此先感谢您的帮助!
答案 0 :(得分:0)
基于插件的名称,我猜测该问题可能与索引的几何列的更新有关。 MariaDB Server 10.2从MySQL 5.7导入了对SPATIAL INDEX的InnoDB支持,并且似乎有时会跳过对版本历史记录的清除,具体取决于并发DML活动。
我在MDEV-15284中提到了这种特殊的设计选择,该选择报告说,如果正在执行并发的ROLLBACK,则SPATIAL INDEX上的SELECT可能会返回不一致的结果。