mongoDB data dosyalarının purge edilmesi

mongoDB data dizinine baktığınızda

-rw------- 1 root root  64M 2012-02-21 12:04 xxx.0
-rw------- 1 root root 128M 2012-02-21 12:02 xxx.1
-rw------- 1 root root 256M 2012-02-21 12:02 xxx.2
-rw------- 1 root root 512M 2012-02-21 12:04 xxx.3
-rw------- 1 root root 1.0G 2012-02-21 12:03 xxx.4
-rw------- 1 root root 2.0G 2012-02-21 12:04 xxx.5
-rw------- 1 root root 2.0G 2012-02-21 12:03 xxx.6

şeklinde uzayıp giden dosyalar göreceksiniz.

Bu dosyalar belli zaman sonra artacaktır.

Bunun nedeni şu:

mongoDB belirli büyüklükte (Örn 2GB) data dosyaları tutuyor. Bu alanı kullansanızda kullanmasanız da bu alanı ayırıyor. Siz veritabanı üstünde delete ve insertler yaptığınızda mongoDB’ni bu alanlardaki dataları delete etse bile hala bu alanı ayırmaya devam ediyor.

Bu yüzden belirli aralıklarla bu alanları free etmeniz gerekiyor.

Bunun içinde db.repairDatabase() komutunu çalıştırıp bu alanları free edebilirsiniz.

Komutu;

PRIMARY> use xxx
switched to db xxx

PRIMARY> db.repairDatabase();
{ "ok" : 1 }

şeklinde çalıştırabilirsiniz.

Not : Burada xxx fazlasıyla yer kaplayan veritabanının ismi.

Bu işlem sırasında bu veritabanınızı lock edeceği için production makinesinde yapacaksınız kullanılmadığı bir zamanda yapmanız mantıklı olur.

Yoksa;

Tue Feb 14 15:00:54 [conn78277] warning: ClientCursor::yield can't unlock b/c of recursive lock ns: xxx.xxx top: { opid: 212476020, active: true, lockType: "write", waitingForLock: false, secs_running: 1, op: "query", ns: "xxx", query: { repair
Database: 1.0 }, client: "xxx.xxx.xxx.xxx:38186", desc: "conn", threadId: "0x7f736eacc700", connectionId: 78277, msg: "index: (3/3) btree-middle", numYields: 0 }

şeklinde bir hata göreceksiniz log dosyasında.

Bu işlemler başarılı bir şekilde bittikten sonra gözle görülür şekilde disk kullanımından tasarruf etmiş olacaksınız.

Posted in Linux, MongoDB on February 21st, 2012 by Kürşad DARA | | 0 Comments