|
Bagi Anda yang belum mengetahui apa itu page split, maka mari kita
simak penjelasan singkat mengenai hal tersebut. Ketika Anda
menyimpan data ke database dengan perintah INSERT, atau pada kasus
tertentu menggunakan UPDATE, maka bisa jadi ruangan yang tersedia
bagi data yang baru di-INSERT atau UPDATE tadi tidak cukup di data
page. Pada kasus ini, SQL Server harus memindahkan beberapa data
yang tidak cukup disimpan pada data page saat itu ke data page lain
yang baru. Dengan kejadian tersebut, SQL Server tidak hanya
menghadapi masalah I/O yang normal, tetapi juga harus memindahkan
data dan juga melakukan update yang diperlukan terhadap index-index
yang berhubungan. Ini akan mengakibatkan banyaknya proses I/O yang
terjadi. Page split pada database memang hal yang normal terjadi,
tetapi jika begitu banyak page split pada database, maka performa
SQL Server akan menurun dan Anda harus mengambil tindakan yang tepat
untuk mengurangi terjadinya page split.
Jadi seberapa banyak page split bisa dikatakan "sering terjadi"?
Seperti yang sering ditanyakan pada forum-forum SQL Server pada
masalah performance tuning, maka jawabannya adalah "tergantung".
Jumlah dari page split akan sangat bergantung pada beberapa faktor
berikut ini.
- Jumlah user
- Level dari aktivitas user
- Apakah aktivitas ke database lebih sering menulis atau
membaca, atau kombinasi keduanya
- Penggunaan fillfactor pada index tabel
- Seberapa sering Anda me-rebuild index
- Apakah primary key adalah suatu clustered index
- Performa dari I/O subsystem
Salah satu cara untuk mengukur aktivitas page split pada SQL
Server adalah dengan menggunakan aplikasi Performance Monitor dan
silakan Anda lihat pada bagian SQLServer:Access Methods: Page
Splits/sec counter.
Sebagai contoh, misalkan suatu sistem SQL Server yang memiliki
75-100 user yang aktif dan page split per second kurang dari 1
dengan puncaknya mencapai 10 page split per second.
Contoh lainnya misalnya suatu sistem SQL Server yang memiliki
sekitar 500 user yang aktif dan mengalami page split per second
sekitar 100 dan bisa mencapai puncaknya pada angka 800 page split
per second.
Kita lihat kembali kedua contoh di atas. Contoh pertama nampaknya
tidak terlalu mengalami masalah page split yang parah dan itu adalah
hal yang normal. Pada contoh kedua nampaknya terjadi page split yang
sangat tinggi dan ini berkontribusi pada performa yang kurang
optimal. Jika ada 100 page split per second, maka disk subsystem
harus melakukan kerja keras untuk memindahkan record ke data page
yang baru dan melakukan update terhadap index-index yang relevan.
Idealnya adalah Anda memiliki page split per second seminimal
mungkin. Langkah awal Anda adalah dengan memonitor SQLServer:Access
Methods:Page Splits/sec counter pada saat-saat database sibuk dan
lihat hasilnya. Pada saat yang sama, monitor pula aktivitas disk I/O
untuk melihat apakah Anda mengalami bottleneck. Jika di sini Anda
korelasi yang kuat antara page split dan aktivitas I/O yang
berlebihan maka dapat disimpulkan Anda telah mengalami masalah page
split yang serius. Aktivitas disk I/O bisa Anda lihat melalui
PhysicalDisk: % Disk Time dan PhysicalDisk: Average Disk Queue
Length. Lihatlah pada Performance Monitor.
Jika Anda menemui bahwa sistem Anda mengalami page split yang
terlalu tinggi, maka berikut ini adalah langkah-langkah yang bisa
diambil untuk mengatasinya:
- Tingkatkan fillfactor pada index Anda.
Dengan meningkatkan fillfactor pada index Anda, maka sebenarnya
Anda telah melakukan peningkatan jumlah ruang kosong pada setiap
data page. Dengan lebih banyak ruang kosong yang ada, maka
terjadinya page split akan lebih sedikit. Di sisi lain, jika
Anda terlalu banyak memiliki ruang kosong pada data page, maka
dapat juga mengganggu performa, karena itu berarti semakin
sedikit data yang disimpan pada data page, yang artinya akan
terjadi lebih banyak disk I/O activity untuk membaca tabel. Anda
sebaiknya melakukan eksperimen untuk menentukan fillfactor yang
pas.
- Rebuild index sesering mungkin.
Seiring dengan berjalannya waktu, ruang kosong yang telah
diciptakan oleh fillfactor akan digunakan juga dan page split
juga akan sering terjadi. Setiap kali Anda melakukan rebuild
index, maka ruang kosong hasil fillfactor tadi akan
diperbaharui, dan ini berarti akan menimbulkan lebih banyak
ruang bagi data dan page split akan berkurang.
- Tambahkan clustered index pada primary key.
Dengan melakukan hal ini, maka Anda telah membunuh page split
secara keseluruhan, karena semua record baru akan ditambahkan
pada bagian akhir dari tabel. Tapi lakukan hal ini selama Anda
mengerti bahwa suatu clustered index pada primary key merupakan
pilihan terbaik bagi Anda terhadap masalah query performance.
- Dapatkan I/O subsystem yang lebih baik.
Intinya semakin cepat hardware Anda, maka semakin kecil isu page
split yang dirasakan.
Referensi
- sql-server-performance.com
Demikian tulisan singkat mengenai page split pada SQL Server dan
berbagai cara untuk menguranginya. Semoga berguna bagi Anda
semuanya. Jika ada komentar atau saran bisa dikirimkan melalui
ariesa.rahardjo@gmail.com. Untuk membaca tulisan menarik lainnya
silakan menuju ke situs Sony AK Knowledge Center dengan alamat di
www.sony-ak.com.
Terima kasih.
| Send
your comments or suggestions |
|
|
|