in

WSS-ID Community

Indonesian IT-Pro Community discussing almost anything about Windows Server System.

fery.afrial

Index Maintenance di SQL Server 2005 dan Index Tool

Desain database yang baik tentunya perlu memperhatikan juga index untuk table-table yang memerlukannya. Tidak semua table memerlukan index, namun untuk table-table transaksi, index mutlak diperlukan. Dengan menyediakan index yang tepat, pencarian data akan menjadi lebih cepat. Peran index sama halnya seperti index dari sebuah buku. Ketika kita mencari pembahasan tentang Left Join dalam buku SQL Server, maka akan jauh lebih mudah apabila kita mencari dulu kedalam index, mencari entry Left Join, mendapatkan nomor halamannya, lalu pergi ke halaman yang ditunjuk oleh index untuk mendapat penjelasan mengenai Left Join. Cara ini jauh lebih mudah daripada harus mencari satu per satu kata didalam buku tersebut. Kurang lebih seperti itulah peran index pada suatu table.

Index yang tersusun dengan baik tentunya akan memudahkan pencarian. Namun ada kalanya terjadi fragmentasi pada index sehingga perlu dilakukan perawatan secara berkala agar performa tetap terjaga. Melakukan maintenance index tentunya adalah hal biasa yang dilakukan oleh para DBA. Umumnya kita membuat suatu job untuk melakukan maintenance index yang akan bekerja secara otomatis pada waktu yang dapat kita tentukan. Cara lainnya adalah membuat script T-SQL.

Tindakan yang dapat dilakukan yaitu merebuild atau mereorganize index.  Untuk dapat menentukan tindakan mana yang perlu diambil, maka kita perlu menganalisa seberapa besar fragmentasi terjadi pada suatu index. Sebagai contoh, script berikut untuk menganalisa index dari table Orders di database Penjualan:

 

declare @db_id tinyint

declare @ob_id int

set @db_id = db_id()

set @ob_id = object_id('Orders')

select a.index_id,b.name,index_type_desc,alloc_unit_type_desc,

avg_fragmentation_in_percent,fragment_count,

avg_fragment_size_in_pages from sys.dm_db_index_physical_stats(@db_id,@ob_id,null,null,'LIMITED') a

inner join

sys.indexes b on a.object_id = b.object_id and a.index_id = b.index_id

 

Hasilnya sebagai berikut (beberapa kolom tidak ditampilkan):

index_id

name

avg_fragmentation_in_percent

1

PK_Orders

25

2

CustomerId

66.6666666666667

 

(cont)

fragment_count

avg_fragmentation_in_pages

8

2.5

3

1

 

Sebagai acuan, kita bisa menggunakan panduan dari BOL:

Nilai avg_fragmentation_in_percent

Tindakan

< = 30%

ALTER INDEX namaindex ON namatable REORGANIZE

> 30%

ALTER INDEX namaindex ON namatable REBUILD

 

Tabel ini punya dua index, index pertama PK_Orders terfragment 25% dan index kedua CustomerId terfragment 67%. Berdasarkan angka acuan, kita akan melakukan REBUILD index untuk index PK_Orders dan REORGANIZE untuk index CustomerId.

 

ALTER INDEX PK_Orders ON Orders REBUILD

 

ALTER INDEX CustomerId ON Orders REORGANIZE

 

Hasilnya,

index_id

name

avg_fragmentation_in_percent

1

PK_Orders

0

2

CustomerId

0

 

(cont)

fragment_count

avg_fragmentation_in_pages

1

1

1

1

 

Average fragmentation menunjukkan seberapa parah index tersebut teracak dalam database. Semakin rendah, berarti semakin tersusun baik index tersebut.

 

Ada sebuah tool yang bisa digunakan untuk melakukan pekerjaan ini, yaitu IdxMtc yang penulis buat sendiri. Namun sayangnya baru ada untuk SQL Server 2005. Silahkan mendownloadnya disini secara gratis.

 

Demikian, semoga bermanfaat.

 

Share this post: | | | |
Published Jan 04 2008, 03:16 PM by fery.afrial
Filed under:

Comments

 

rocker_lyra said:

thanks.......................

i can do it

May 4, 2008 7:39 PM
 

gunawan_mkp said:

lagi jalan jalan...eh nemu blog elo.........

great job......;))

October 6, 2008 10:31 AM
Copyright © WSS-ID, 2006. All rights reserved.
Powered by Community Server (Commercial Edition), by Telligent Systems