DC yang lambat tidak selalu soal hardware — bisa jadi query LDAP boros, database terfragmentasi, atau cache RAM yang kurang. Episode ini membedah baseline performa, sizing DC, optimasi query LDAP, defragmentasi database, dan penempatan Global Catalog.

Di episode 23 kita membangun sistem security monitoring: menangkap anomali, memberi peringatan saat akun terkunci massal, dan mendeteksi serangan lewat event log serta SIEM. Monitoring adalah radar — ia memberitahu kalian ada masalah bahkan sebelum kerusakan meluas. Episode 24 ini menjawab pertanyaan berikutnya: bagaimana memastikan radar itu tidak sering berbunyi karena infrastruktur yang sebenarnya tidak sehat?
Performance tuning di Active Directory adalah pekerjaan pencegahan, bukan reaksi. Tujuannya sederhana: DC yang melayani logon, query LDAP, dan replikasi tetap cepat di bawah beban normal maupun lonjakan. Performa AD jarang menjadi masalah karena satu penyebab tunggal — hampir selalu kombinasi hardware yang kurang, query yang boros, dan database yang membesar tanpa perawatan. Mari kita bedah satu per satu.
Aturan pertama tuning: jangan menyetel apa pun tanpa baseline. Baseline adalah foto kondisi "sehat" infrastruktur kalian — angka-angka yang diambil saat semuanya berjalan normal. Tanpa baseline, kalian tidak punya pembanding untuk menilai apakah sebuah perubahan memperbaiki atau justru merusak.
Tip
Ambil baseline di dua momen: jam sibuk (misal pukul 08.00 saat seluruh karyawan logon bersamaan) dan jam sepi. Performa yang kalian butuhkan adalah performa di puncak beban, bukan rata-rata.
Windows menyediakan kumpulan counter khusus AD di bawah objek NTDS. Lihat counter yang tersedia, lalu rekam sampelnya secara berkala ke file baseline:
Get-Counter -ListSet "NTDS*" -ComputerName dc01.corp.local |
Select-Object -ExpandProperty PathsWithInstancesGet-Counter -SampleInterval 15 -MaxSamples 60 -Counter "\\DC01\NTDS\*" |
Export-Csv -Path "C:\Data\baseline-ntds.csv" -NoTypeInformationCounter yang paling informatif untuk dipantau setiap hari:
| Counter | Arti | Nilai sehat |
|---|---|---|
NTDS\LDAP Client Sessions | Sesi klien yang aktif | Stabil di beban normal |
NTDS\DRA Pending Replication Synchronizations | Antrean replikasi tertunda | Mendekati nol |
NTDS\Kerberos Authentications | Autentikasi Kerberos per detik | Landasan kapasitas |
NTDS\LDAP Searches/Sec | Query LDAP per detik | Landasan kapasitas |
Bandingkan angka hari ini dengan baseline: lonjakan tajam LDAP Searches yang tidak diiringi lonjakan user adalah tanda query boros — topik yang akan kita bedah sebentar lagi.
Baseline memberitahu beban aktual; dari situ kalian menyetel hardware. Tidak ada formula ajaib, tapi arahnya jelas:
% Processor Time konsisten di atas 70-80%.ntds.dit. Semakin besar database, semakin besar RAM yang berguna. Aturan praktis kasar: 2-4 GB per 10.000 objek, ditambah ruang untuk Windows dan proses lain. Di lab 4 GB cukup; di produksi 16 GB ke atas bukan pemborosan.ntds.dit dibaca saat query tidak tertutup cache — disk yang lambat langsung terasa sebagai latensi query. Letakkan database dan log di volume terpisah dari sistem operasi, dan pisahkan dari SYSVOL bila trafiknya besar.RAM adalah investasi termudah: tidak ada konfigurasi, hanya menambah kapasitas cache. Kalau baseline menunjukkan query LDAP lambat tapi CPU rendah, hampir selalu RAM yang kurang — bukan CPU.
Baseline bukan kegiatan sekali jalan. Saat melakukan capacity planning, pertimbangkan empat kurva pertumbuhan:
Tinjau ulang baseline setiap kuartal dan bandingkan trennya. Tuning yang baik membuat lonjakan beban terasa biasa saja.
Query LDAP adalah bahasa tanya AD: aplikasi, Group Policy, dan perintah PowerShell berbicara dengannya. Query yang ditulis malas bisa menelan sumber daya DC tanpa disadari siapa pun.
AD memelihara indeks untuk atribut tertentu. Query yang memfilter atribut terindeks diselesaikan lewat indeks; yang tidak, memaksa pemindaian seluruh database. Atribut seperti samAccountName, objectSid, userPrincipalName, dan memberOf sudah terindeks. Untuk atribut kustom yang sering difilter, tandai sebagai indeks lewat skema:
Get-ADObject -SearchBase (Get-ADRootDSE).SchemaNamingContext -Filter "Name -eq 'extensionAttribute5'" |
Set-ADObject -Replace @{ searchFlags = 1 }Warning
Mengindeks atribut menambah ukuran database karena indeks disimpan sebagai struktur terpisah. Hanya indeks atribut yang benar-benar sering dipakai untuk filter — bukan semua atribut.
Filter seperti (cn=*santoso*) memaksa AD memeriksa setiap entri — indeks tidak bisa membantu karena polanya tidak diawali karakter tetap. Jika memungkinkan, gunakan awalan tegas: (cn=santoso*) tetap bisa memanfaatkan indeks.
Windows mencatat query mahal (expensive) dan tidak efisien (inefficient) lewat event 1644 pada log Directory Service. Aktifkan dengan menyetel nilai diagnostik 15 Field Engineering ke 5 pada registry di bawah HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Diagnostics, lalu setel ambang Search Time Limit Exceeded pada key yang sama. Setelah itu, event 1644 memberitahu persis: siapa pengirim query, filter apa, dan berapa lama ia berjalan. Ini umpan terbaik untuk menemukan query boros di lapangan.
Ambang bawaan LDAP dirancang konservatif: MaxPageSize 1000 objek per halaman dan MaxQueryDuration 120 detik. Aplikasi yang menarik data besar bisa tersedak oleh MaxPageSize default. Setel lewat ntdsutil:
ntdsutil
ldap policies
set MaxPageSize to 2000
set MaxQueryDuration to 60
show values
quit
quitPerubahan langsung berlaku. Hati-hati menaikkan MaxQueryDuration: satu query rakus yang tadinya dibunuh di menit kedua kini boleh makan sumber daya lebih lama — selalu imbangi dengan pemantauan event 1644. Perhatikan juga MaxConnections dan MaxDatagramRecv yang membatasi koneksi bersamaan dan paket UDP per detik; angka default-nya aman untuk mayoritas lingkungan.
ntds.dit tumbuh sepanjang hidup DC. Penghapusan objek menyisakan ruang kosong di halaman database. Ada dua jenis defragmentasi:
ntds.dit baru yang lebih kecil. Wajib dilakukan saat DC sedang tidak melayani (misal dalam mode DSRM) dan membutuhkan ntdsutil.Prosedur offline defrag:
ntdsutil
activate instance ntds
files
compact to C:\compact
quit
quitHasil kompresi ditulis ke C:\compact\ntds.dit. Sebelum menimpa file asli: matikan DC (bukan sekadar restart), pindahkan database lama sebagai cadangan, salin file baru ke lokasi asli, lalu jalankan dcdiag untuk memastikan database valid. Ukur hasilnya dengan membandingkan ukuran file sebelum dan sesudah:
ntdsutil
activate instance ntds
files
info
quit
quitImportant
Selalu backup database sebelum compact offline. Kesalahan saat menimpa file database tanpa cadangan bisa berubah menjadi bencana yang seharusnya dicegah oleh episode 17 dan 26.
Global Catalog (GC) adalah DC yang menyimpan salinan sebagian atribut seluruh domain di forest. Saat klien atau aplikasi menanyakan objek lintas-domain (termasuk saat logon), GC-lah yang menjawab. Dua kesalahan umum:
Saat merencanakan RAM, ingat: DC yang juga GC harus menampung cache untuk dataset forest, bukan hanya domain sendiri. Konsekuensinya, aturan 2-4 GB per 10.000 objek berlaku pada total objek forest bagi sebuah GC.
Di episode 24 ini kalian belajar bahwa performa AD adalah disiplin pengukuran: baseline sebagai pembanding, sizing hardware berdasarkan data bukan tebakan, optimasi query lewat indeks, pola filter, event 1644, dan LDAP policies, defragmentasi database online maupun offline dengan ntdsutil, serta placement GC dan RAM cache yang menyatukan semuanya.
Poin kunci:
Setelah infrastruktur berjalan cepat, pertanyaan logis berikutnya: bagaimana memindahkan semuanya ke struktur baru tanpa menghentikan produksi? Di episode 25 selanjutnya kita bedah Active Directory Migration: inventarisasi dan perencanaan, ADMT, SID History, migrasi profil, hingga cutover dan rollback. Sampai jumpa!