内容纲要
概要描述
ApacheDS 底层使用 lmdb 数据库,lmdb 采用 copy on write 策略,所有要被修改的数据页都会被重新复制一份,并在新的副本上进行修改;
而原来的页在没有被读事务使用的情况下可以被后续的写事务回收使用。
但如果有一个读事务持续时间比较久,而此时数据文件中已没有可以被回收的空闲页,那么可能会逼迫同时进行的写事务不断地往文件末添加新的页,从而导致数据文件变得很大。
PS:适用于 Guardian 3.x 之前的版本,TDH5.2.2 中比较常见
详细说明
压缩的原理就是找到这些空闲页,然后将空闲页的磁盘占用释放出来;
需要联系星环售后获取压缩工具;
操作方法
- 确认空闲页占用的大小
- 执行压缩
- 覆盖数据文件
确认空闲页占用的大小
我们可以使用mdb_stat查看lmdb数据文件的使用情况,命令格式为:
mdb_stat -e -f <数据库路径>
:
比如假设为默认数据库路径,当前在lmdb工具集所在路径,则执行:
./mdb_stat -e -f /guardian/data/partitions/guardian
执行压缩
如果需要压缩,可以使用 mdb_copy,命令格式为:
mdb_copy -c <源数据库路径> <压缩后的数据库路径>
压缩前我们首先要建立一个新的数据库目录用于存放压缩后的数据,比如 /guardian/data/partitions/guardian-compressed;
mkdir /guardian/data/partitions/guardian-compressed
# 然后执行压缩命令:
./mdb_copy -c /guardian/data/partitions/guardian /guardian/data/partitions/guardian-compressed
3、停止服务,替换同名文件
然后需要停止 apacheds ,然后替换同名的数据文件;
最后启动 apacheds 即可