我将mongo里面大量多余的数据都删除后,发现内存和文件并没有收缩,仍然占用大量内存和硬盘,性能变化不大,请问,mongodb怎么进行碎片整理?
PHP中文网2017-05-02 09:24:51
什么版本的MongoDB,什么引擎?
3.2以上的WT引擎可以使用Compact来释放空间,之前的版本无论是WT还是MMAPv1都只能通过重新同步复制集的方式释放空间。
问题是,生产环境一般来说没有必要释放,因为早晚还会占回来,而且空闲的空间反正也还会重用,如果不是真的缺那点空间,就别去释放了。
至于是不是停机的问题,不止是这个问题,大部分时候都应该考虑复制集来解决,多个结点并行运行就是为了不停机准备的,拿掉一个下来做维护不会有多大的问题,拿主结点的时候可能会有几秒钟不可写而已。
理论上说回收磁盘空间对性能不会有任何有益的影响。但是在3.0.6和3.0.7所使用的WiredTiger引擎上发生过一个bug,在大量删除文档时BTree会有错误的平衡从而导致性能严重下降。详细情况请参考JIRA Ticket SERVER-21063。