Bucardo memakai parameter max_stack_depth

  Pagi ini saya menemukan error di dalam file log.bucardo yang menyatakan bahwa saya harus menaikkan paramter max_stack_depth di file konfigurasi postgresql.conf. Berikut potongan pesan errornya :

(9926) [Thu Sep  6 08:32:45 2012] KID Warning! Aborting due to exception for public.my_big_table:? Error was DBD::Pg::db do failed: ERROR:  stack depth limit exceeded\nHINT:  Increase the configuration parameter "max_stack_depth" (currently 2048kB), after ensuring the platform's stack depth limit is adequate. at /usr/local/share/perl/5.14.2/Bucardo.pm line 8131.

...

” Wah ini parameter apa ya ?” pikir saya. Terus terang saya belum pernah melihat secara mendetail fungsi dari parameter ini.

Menurut dokumentasi postgresql, parameter Max_Stack_Depth ini berfungsi untuk menaikkan kemampuan server dalam Execution Stack. Misalnya dalam pemrosesan fungsi fungsi rekursif seperti sub-query dan klausa IN. PostgreSQL akan memanggil parameter ini pada saat memproses fungsi fungsi rekursif itu saja, jadi tidak setiap saat. Nilai ideal dari parameter ini harusnya sama dengan nilai batasan ukuran stack di kernel linux, yang bisa diperoleh dengan menjalankan perintah ulimit -s.

$> ulimit -s

8192

Jika di komputer saya akan menghasilkan 8192. Nilai ulimit ini dalam kilobyte, ini artinya kernel saya memiliki batasan ukuran stack 8192 Kb atau 8M. Tetapi saya tidak akan menggunakan 8M ini, saya akan pakai setengahnya saja, 4M. Jikalau kita memaksa menaikkan nilai parameter ini diatas kemampuan kernel, 8M, maka sistem dapat menjadi lumpuh.

Setelah itu barulah saya merubah file konfigurasi postgresql.conf dan ubah parameter max_stack_depth.

$> vim /etc/postgresql/9.1/main/postgresql.conf 
...
max_stack_depth = 4M
...

Setelah itu server  postgresql di restart dan bucardo di start kembali. Problem selesai.

Author: Nareswara

Ordinary People with eye glasses

Leave a Reply

Your email address will not be published. Required fields are marked *