Mempercepat pencarian direktori dengan index: jenis pres, eq, sub, dan approx, konfigurasi olcDbIndex, atribut yang wajib di-index, biaya dan overhead index, serta rebuild index dengan slapindex.

Di episode 13 kalian mendistribusikan direktori ke banyak server. Saat data mulai banyak dan consumer melayani ribuan bind per detik, permintaan yang lambat jadi keluhan pertama. Episode 14 ini membahas senjata utamanya: indexing — cara memberitahu slapd atribut mana yang sering dicari supaya pencarian lewat index, bukan memindai seluruh database dari awal sampai akhir.
Index dibedakan berdasarkan bentuk pencarian yang dilayani. Setiap atribut bisa di-index dengan satu atau lebih tipe:
| Tipe | Melayani pencarian | Contoh filter |
|---|---|---|
pres | Keberadaan atribut | (mail=*) |
eq | Kesetaraan nilai | (uid=budi) |
sub | Substring | (cn=*bang*) |
approx | Perkiraan fonetik (soundex) | (cn~=budi) |
| special | Index khusus seperti entryCSN, entryUUID | filter internal replikasi |
Substring bisa dipecah lebih halus menjadi sub:initial, sub:final, dan sub:any, namun bentuknya kompleks dan mahal. Aturan praktisnya: index eq untuk autentikasi, sub hanya bila pencarian wildcard benar-benar dipakai, dan approx jarang diperlukan.
Tipe special mencakup index yang diurus OpenLDAP sendiri untuk kebutuhan internal, bukan untuk filter user. entryCSN dan entryUUID termasuk di sini: keduanya dipakai untuk melacak versi entry dan identitas unik, dan sangat dibutuhkan oleh replikasi syncrepl yang kalian pasang di episode 13. Tidak semua atribut internal memerlukan index — entryCSN eq dan entryUUID eq saja sudah cukup untuk hampir semua kasus.
Index dikonfigurasi per database lewat atribut olcDbIndex pada cn=config:
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: uid pres,eq,sub
olcDbIndex: cn eq,sub
olcDbIndex: mail pres,eq,sub
olcDbIndex: objectClass eq
olcDbIndex: member,memberOf eq
olcDbIndex: uidNumber,gidNumber eq
olcDbIndex: entryCSN eq
olcDbIndex: entryUUID eqSatu baris olcDbIndex bisa memuat banyak atribut sekaligus, seperti uidNumber,gidNumber eq. entryCSN dan entryUUID adalah index yang dimanfaatkan replikasi di episode 13 — tanpa index ini, contextCSN dan sinkronisasi bisa melambat. Perubahan langsung diterapkan, tapi index untuk data yang sudah ada baru terbentuk saat rebuild.
Index bukan untuk semua atribut, melainkan untuk yang sering dipakai sebagai filter:
objectClass — selalu, hampir setiap pencarian memfilter object class.uid — atribut bind paling umum; wajib pres,eq,sub.cn — pencarian nama; eq,sub sudah cukup, pres jarang.mail — login alternatif dan pencarian alamat; pres,eq,sub.member, memberOf — pencarian keanggotaan grup dari overlay memberOf.uidNumber, gidNumber — pencarian kesetaraan untuk mapping POSIX.Aturan sederhananya: index setiap atribut yang muncul di klausa filter pada aplikasi kalian. Aplikasi yang sering memfilter (employeeType=contractor) misalnya akan diuntungkan oleh employeeType eq meski tidak ada di daftar di atas.
Index mempercepat pencarian secara drastis — pencarian (uid=budi) tanpa index memindai seluruh 100.000 entry; dengan index eq, slapd langsung menuju key-nya di B-tree. Akan tetapi index bukanlah gratis:
Rebuild index dilakukan offline dengan slapindex, yang harus dijalankan setelah slapd berhenti:
slaptest -u -v
systemctl stop slapd
sudo -u openldap slapindex -b dc=example,dc=com
systemctl start slapdslaptest -u memvalidasi konfigurasi sebelum index baru dipakai. Jalankan slapindex sebagai user openldap (bukan root) agar kepemilikan file database tetap benar, dan pastikan slapd berhenti selama proses rebuild.
Index yang hilang tidak selalu terlihat secara kasat mata. Beberapa cara mengawasinya:
stats di olcLogLevel; entri pencarian yang lambat dan memindai seluruh data mudah dikenali dari pola lognya.(attr=value) tanpa index memaksa full scan; temukan dengan menguji filter itu langsung dan mengukur waktunya.time ldapsearch untuk mengukur, dan monitor backend lewat cn=Monitor untuk melihat aktivitas database.time ldapsearch -x -D cn=admin,dc=example,dc=com -W \
-b ou=people,dc=example,dc=com "(cn=*bang*)"Cara membaca hasilnya: jika time menunjukkan puluhan milidetik, index bekerja; jika angka melonjak ke detik ketika ukuran database bertambah, hampir pasti index hilang atau salah tipe. Bandingkan filter ber-index dan tanpa index pada dataset yang sama untuk merasakan selisihnya secara nyata.
Tip
Uji setiap filter baru di lingkungan staging sebelum produksi. Sebuah filter (memberOf=cn=dev,ou=groups,dc=example,dc=com) tanpa index memberOf eq akan berubah menjadi full scan yang menenggelamkan CPU begitu jumlah member membesar.
Satu kebiasaan yang menyelamatkan: dokumentasikan peta index di dokumen arsitektur. Tulis atribut mana yang di-index dengan tipe apa dan untuk filter aplikasi mana. Ketika sebuah aplikasi baru tiba-tiba lambat, peta ini menjadi langkah pertama untuk menebak apakah index yang dibutuhkan sudah ada — sebelum membuka log slapd dan membedah query yang berjalan lambat.
Pada episode 14 ini kalian memahami indexing OpenLDAP: perbedaan index pres, eq, sub, dan approx, konfigurasi olcDbIndex di cn=config, atribut yang umum di-index seperti objectClass, uid, cn, dan mail, biaya overhead index untuk disk dan tulis, rebuild dengan slapindex, serta cara memantau efisiensi index lewat log dan pengukuran waktu.
Inti yang harus dibawa pulang:
eq untuk autentikasi, sub hanya saat perlu — substring paling mahal di antara index standar.entryCSN dan entryUUID mendukung replikasi — jangan diabaikan di setup multi-server.slapindex dijalankan dengan slapd berhenti dan sebagai user openldap.Di episode 15 berikutnya, kita masuk ke fase keamanan dan enkripsi: LDAP security fundamentals — jenis-jenis bind, risiko password plaintext, mekanisme SASL, dan prinsip least privilege. Index yang kalian pasang akan melayani autentikasi yang jauh lebih aman.