TINJAUAN PUSTAKA
2.5 Optimasi Query
2.5.1 Konsep Dasar Optimasi Query
Menurut SilberSchatz et al. (2002) , query adalah sebuah pernyataan yang meminta pengaksesan informasi. Query (permintaan) merupakan metode pengaksesan yang paling sering digunakan. Dalam DBMS, query dinyatakan dalam SQL (Structured Query Languange).
Dalam Database Management System (DBMS), query di proses melalui tahapan berikut :
Gambar 2.12 Tahapan Pemrosesan Query
Sebuah query yang diekspresikan dalam sebuah bahasa query tingkat tinggi seperti SQL mula-mula harus dibaca, diuraikan dan disahkan (parser and translator). Query tersebut kemudian dibentuk menjadi sebuah struktur data yang biasa disebut dengan query tree. Dan kemudian DBMS (Database management system) harus merencanakan sebuah strategi eksekusi untuk mendapatkan kembali hasil dari query dari file-file database.
Query Optimizer memeriksa semua ekspresi-ekspresi aljabar yang sama untuk query yang diberikan dan memilih salah satu dari ekspresi tersebut yang terbaik yang memiliki perkiraan termurah. Dengan kata lain, tugas dari query optimizer adalah menghasilkan sebuah rencana eksekusi. Proses ini disebut dengan optimisasi query. Output dari Optimizer adalah evaluation plan, yaitu urutan rencana proses eksekusi query oleh DBMS. Optimasi query merupakan sebuah proses untuk memilih evaluation planyang terbaik untuk suatu query (Lewis, 2006). Query optimizeradalah bagian dari DBMS yang melakukan fungsi optimasi query.
Ada beberapa tahapan dalam optimasi query, yaitu (Ramakrishnan, 1998) : 1. Membangkitkan plan-plan alternatif yang akan dipilih sebagai evaluation
plan.
2. Mengestimasi biaya eksekusi untuk setiap alternatif plan yang dihasilkan pada tahap satu. Dari beberapa plan yang diperhitungkan, query optimizer memilih satu plan optimal, yaitu plan dengan estimasi biaya terkecil.
Optimasi query dapat dikategorikan menjadi 2 bagian, antara lain : 1. Cost Based Optimization
Pemilihan plan berdasarkan pada perkiraan biaya untuk setiap alternatif plan. Optimizer akan memutuskan rencana eksekusi (execution plan ) mana yang terbaik dan paling efisien dengan mempertimbangkan pada ketersediaan path aksesnya dan juga berdasar pada statistik informasi untuk skema objek (tabel/indeks) yang di akses oleh sebuah sql statement.
Secara konsep, pendekatan cost-based terdiri atas 3 langkah berikut :
Optimizer membangkitkan seperangkat rencana eksekusi yang potensial untuk SQL Statement berdasar pada ketersediaan path dan petunjuk tentang sql statement tersebut.
Optimizer memperhitungkan cost pada tiap rencana eksekusi berdasarkan statistik pada kamus data untuk distribusi data dan karakteristik maupun informasi tentang penyimpanan dari tabel, indeks, dan partisi yang di akses oleh sebuah sql statement.
Optimizer membandingkan biaya setiap execution plan, dan kemudian memilih plan dengan biaya paling rendah
Adapun beberapa catatan mengenai hal ini, yaitu :
Cost dapat diartikan sebagai sebuah nilai resource yg dibutuhkan untuk eksekusi sql statement dari beberapa execution plannya
Optimizer menghitung cost dari tiap kemungkinan metode akses dan urutan pen-joinan berdasar estimasi resource seperti CPU time, memori,I/O untuk ekseskusi statement sql menggunakan plan
Execution plan secara serial dengan cost besar butuh waktu eksekusi lebih banyak daripada cost yg kecil
Execution plan secara parallel, penggunaan resource tidak langsung berpengaruh pada waktu yg dibutuhkan untuk eksekusi statement sql
2. Rule Base Optimization
Pemilihan plan mengacu pada heuristic / petunjuk baku yang menentukan prioritas eksekusi suatu operasi.
Pada dasarnya tujuan dari optimasi query menemukan jalan akses yang termurah untuk meminimumkan total waktu pada saat proses sebuah query. Untuk mencapai tujuan tersebut, maka diperlukan optimizeruntuk melakukan analisa query dan untuk melakukan pencarian jalan akses.
2.5.2 Metode Akses
Metode akses /access method adalah metode-metode yang dapat dilakukan untuk mengakses tuple dalam suatu relasi. Sebuah metode akses dapat berupa file scan ataupun indeks dengan kondisi seleksi tertentu (Ramakrishnan, 1998).
Indeks adalah suatu metoda pengaksesan file data dari disk dengan menyimpan alamat entri data file tersebut pada file lain yang berukuran lebih kecil dan lebih cepat diakses. Indeks yang biasanya dipakai adalah indeks B+Tree dan Hash. Indeks B+Tree dapat menjadi metode akses untuk seleksi operator <, <=, =, !=, >=, atau >. Indeks hash dapat menjadi metode akses untuk seleksi dengan operator =.
Selektivitas sebuah metode akses adalah jumlah block yang diambil dengan menggunakan metode akses tersebut. Metode akses yang paling selektif adalah metode akses yang mengambil block paling sedikit. Penggunaan metode akses yang paling selektif akan meminimalkan biaya pengambilan data.
2.5.3 Perhitungan Cost Operasi Query
Cost dari operasi query dapat dihitung dengan menjumlahkan beberapa parameter, antara lain : biaya pengaksesan disk dan waktu proses CPU. Pengaksesan disk merupakan faktor terpenting. Hal ini dikarenakan pengaksesan disk memakan biaya lebih besar dibandingkan operasi dalam memori utama. Pada tugas akhir ini parameter yang digunakan hanya biaya pengaksesan disk dimana merupakan jumlah pengambilan page dari disk ke memori.
Sintaks umum SQL adalah sebagai berikut : SELECT <daftar Attribute> FROM <daftar Tabel> WHERE <kondisi>
Dalam aljabar relasional, pernyataan SQL diatas terdiri atas beberapa operasi yaitu projection, selection, dan join. Operasi select terdapat pada term-term klausa WHERE. Operasi project terdapat pada daftar atribut list klausa SELECT. Operasi join terdapat pada klausa FROM yang menyatakan daftar relasi lebih dari satu. Kondisi join ditentukan dari term-term pada klausa WHERE.
1. Operasi Select
Operasi Select adalah operasi SQL yang digunakan untuk memilih sebuah subset tuple-tuple dari sebuah relasi berdasarkan kondisi tertentu. Kondisi tersebut terdapat dalam bentuk term-term pada klausa WHERE. Pada umumnya, operasi select ditunjukkan oleh :
<kondisi pilihan>(R)
2. Operasi Project
Operasi Project adalah operasi SQL yang digunakan untuk memilih atribut-atribut tertentu dari suatu relasi dan membuang atribut-atribut lainnya yang tidak diperlukan. Pada umumnya operasi project ditunjukkan oleh :
π<daftar attribute>(R) 3. Operasi Join
Operasi Join adalah operasi SQL yang digunakan untuk mengkombinasikan hubungan tuple-tuple dari dua relasi dengan suatu kondisi penggabungan tertentu.Pada umumnya operasi project pada dua relasi R(A1,A2,…An) dan S(B1,B2,…Bm) ditunjukkan oleh :
Dua relasi yang terlibat dibedakan menjadi relasi luar dan relasi dalam. Untuk memudahkan, dalam left deep planterdapat konversi yaitu sub plan kiri (L) dianggap sebagai relasi luar dan sub plan kanan (R) dianggap sebagai relasi dalam.
2.5.4 Pemrosesan Querypada Oracle 10g
Pada saat sebuah query diproses, Oracle server prosesakan memeriksa apakah blok data yang dibutuhkan ada di database buffer cache. Jika blok yang dibutuhkan tidak terdapat di database buffer cache, maka server process akan melakukan pembacaan untuk mencari blok yang dibutuhkan di data file untuk kemudian meletakkan salinannya di database buffer cache. Jika saat pemrosesan query berikutnya memerlukan blok yang sama dengan query sebelumnya, maka pemrosesan query tersebut tidak memerlukan pembacaan data ke file fisik. Blok data yang berada di memory dan tidak sering diakses akan dikeluarkan dari database buffer cache.
2.5.5 Explain Plan
Explain plan adalah suatu perintah yang digunakan untuk menampilkan perintah eksekusi suatu query.
Dengan memanfaatkan explain plan kita bisa melihat langkah eksekusi yang diambil oleh oracle, sehingga kita bisa meningkatkan performansi query kita. Optimizer mengambil informasi tentang objek dan tipe dari query yang dijalankan, kemudian memberikan keputusan bagaimana suatu query akan dieksekusi.
Contoh dari explain plan :
EXPLAIN PLAN SET statement_id = 'example_plan1' FOR SELECT full_name FROM per_all_people_f
WHERE UPPER(full_name) LIKE 'Pe%' ;
Plan
--- SELECT STATEMENT
Diatas menunjukan suatu contoh execution plan dari sebuah SELECT statement. Tabel per_all_people_f diakses menggunakan full table scan.Seriap baris dalam tabel per_all_people_f diakses, klausa WHERE clause dievaluasi untuk setiap row.Kemudian SELECT statement mengembalikan row yang memenuhi klausa where.
2.6 RAID
2.6.1 Konsep RAID
Dalam media penyimpanan data, disk rentan akan kerusakan yang akan mengakibatkan hilangnya data dan turunnya kinerja disk. Salah satu cara dalam meningkatkan kinerja dan performansi disk adalah RAID. RAID singkatan dari Random Array of Inexpensive Disk. Metodenya dengan membentuk suatu sistem dari beberapa harddisk/drive sehingga terbentuk satu partisi dari beberapa harddisk, dimana biasanya kita melakukan pembagian banyak partisi pada satu harddisk. Kegunaan RAID adalah sebagai media perlindungan penyimpanan data sehingga reliability data terjaga. RAID merupakan gabungan beberapa harddisk fisik ke dalam sebuah unit logis penyimpanan, dengan menggunakan perangkat lunak atau perangkat keras khusus.
Peningkatan Kehandalan dan Kinerja dari disk dapat dicapai melalui dua cara (SilberSchatz,et al. 2002) :
1. Redudansi
Peningkatan kehandalan disk dapat dilakukan dengan redundansi, yaitu menyimpan informasi tambahan yang dapat dipakai untuk membentuk kembali informasi yang hilang jika suatu disk mengalami kegagalan.Salah satu teknik untuk redundansi ini adalah dengan caramirroring atau shadowing, yaitu dengan membuat duplikasi dari tiap - tiap disk. Jadi, sebuah disk logical terdiri dari 2 disk physical, dan setiap penulisan dilakukan pada kedua disk, sehingga jika salah satu disk gagal, data masih dapat diambil dari disk yang lainnya, kecuali jika disk kedua gagal sebelum kegagalan pada disk pertama diperbaiki.Pada cara ini, berarti diperlukan media penyimpanan yang dua kali lebih besar daripada ukuran data sebenarnya. Akan tetapi, dengan cara ini
pengaksesan disk yang dilakukan untuk membaca dapat ditingkatkan dua kali lipat dengan menggunakan RAID controller. Hal ini dikarenakan setengah dari permintaan membaca dapat dikirim ke masing-masing disk.
2. Paralelisme
Peningkatan kinerja dapat dilakukan dengan mengakses banyak disk secara paralel. Pada disk mirroring, di mana pengaksesan disk untuk membaca data menjadi dua kali lipat karena permintaan dapat dilakukan pada kedua disk, tetapi kecepatan transfer data pada setiap disk tetap sama. Kita dapat meningkatkan kecepatan transfer ini dengan cara melakukan data striping ke dalam beberapa disk. Data striping, yaitu menggunakan sekelompok disk sebagai satu kesatuan unit penyimpanan, menyimpan bit data dari setiap byte secara terpisah pada beberapa disk (paralel).
Adapun teknik-teknik yang digunakan dalam RAID sebagai berikut : 1. Teknik Stripping
Stripping merupakan teknik atau cara untuk pemecahan data ke beberapa disk. Teknik ini meningkatkan performansi harddisk, dimana sekumpulan data dapat dibaca dari beberapa harddisk pada satu waktu. Namun, apabila salah satu harddisk mengalami kegagalan, maka harddisk lain pun tidak dapat berfungsi. 2. Teknik Mirroring
Mirroring merupakan teknik atau cara untuk penyalinan data ke lebih dari satu harddisk. Teknik ini dapat meningkatkan proses pembacaan data, namun untuk menulis kinerjanya lebih buruk karena data yang sama akan tertulis pada beberapa harddisk yang tergabung dalam penggabungannya.
2.6.2 Standar Level
Untuk skema level standard tersusun atas beberapa level. Beberapa variasi dikembangkan untuk non nested level dan nested level.
Berikut ini jenis-jenis dari RAID non-nested level : 1. RAID 0
Dikenal dengan modus stripping.Membutuhkan minimal 2 harddisk.Sistemnya adalah menggabungkan kapasitas dari beberapa harddisk.Sehingga secara logikal hanya "terlihat" sebuah harddisk dengan kapasitas yang besar (jumlah kapasitas keseluruhan harddisk).
Pada awalnya, RAID 0, digunakan untuk membentuk sebuah partisi yang sangat besar dari beberapa harddisk dengan biaya yang efisien.
Contoh: Peneliti membutuhkan suatu partisi dengan ukuran 2TB. Harga sebuah harddisk berukuran 500GB adalah Rp.400.000,- sedangkan harga harddisk berukuran 2TB adalah Rp.2.500.000,-. Maka peneliti dapat membetuk suatu partisi berukuran 2TB dari 4 unit harddisk berukuran 500GB dengan menggunakan RAID 0. Tentunya skenario ini lebih murah karena memakan biaya lebih murah: 4 x Rp.400.000,- = Rp.2.000.000,-. Lebih murah daripada harus membeli harddisk yang berukuran 2TB.Oleh sebab itu kenapa pada awalnya disebut redundant array of inexpensive disk.
Data yang ditulis pada harddisk-harddisk tersebut terbagi-bagi menjadi fragmen-fragmen.Dimana fragmen-fragmen tersebut disebar di seluruh harddisk.Sehingga, jika salah satu harddisk mengalami kerusakan fisik, maka data tidak dapat dibaca kembali.
Namun ada keuntungan dengan adanya fragmen-fragmen ini: kecepatan. Data bisa diakses lebih cepat dengan RAID 0, karena saat komputer membaca sebuah fragmen di satu harddisk, komputer juga dapat membaca fragmen lain di harddisk lainnya.
Gambar 2.13 RAID 0
2. RAID 1
Biasa disebut dengan modus mirroring.Membutuhkan minimal 2 harddisk. Sistem ini memiliki kelebihan, yaitu menyalin isi sebuah harddisk ke harddisk lain dengan tujuan: jika salah satu harddisk rusak secara fisik, maka data tetap dapat diakses dari harddisk lainnya. Proses untuk membaca data dapat dilakukan dengan setengah dari permintaan membaca dikirim ke masing-masing disk (proses membaca data baik) atau membaca data dilakukan dengan membaca dari kedua disk (proses membaca data buruk). Hal ini tergantung kepada RAID Controllernya.
Contoh: Sebuah server memiliki 2 unit harddisk yang berkapasitas masing-masing 500GB dan dikonfigurasi RAID 1. Setelah beberapa tahun, salah satu harddisknya mengalami kerusakan fisik.Namun data pada harddisk lainnya masih dapat dibaca, sehingga data masih dapat diselamatkan selama bukan semua harddisk yang mengalami kerusakan fisik secara bersamaan.
3. RAID 2
RAID 2, juga menggunakan sistem stripping. Namun ditambahkan tiga harddisk lagi untuk pariti hamming, sehingga data menjadi lebih handal.Karena itu, jumlah harddisk yang dibutuhkan adalah minimal 5 (n+3, n > 1).Ketiga harddisk terakhir digunakan untuk menyimpan hamming code dari hasil perhitungan tiap bit-bit yang ada di harddisk lainnya.
Contoh: Peneliti memiliki 5 buah harddisk (sebut saja harddisk A,B,C, D, dan E) dengan ukuran yang sama, masing-masing 500GB. Jika mengkonfigurasi keempat harddisk tersebut dengan RAID 2, maka kapasitas yang didapat adalah: 2 x 500GB = 1TB (dari harddisk A dan B). Sedangkan harddisk C, D, dan E tidak digunakan untuk penyimpanan data, melainkan hanya untuk menyimpan informasi pariti hamming dari dua harddisk lainnya: A dan B. Ketika terjadi kerusakan fisik pada salah satu harddisk utama (A atau B), maka data tetap dapat dibaca dengan memperhitungkan pariti kode hamming yang ada di harddisk C,D, E.
Gambar 2.15 RAID 2
4. RAID 3
RAID 3, juga menggunakan sistem stripping. Namun hanya ditambahkan sebuah harddisk lagi untuk parity.. Karena itu, jumlah harddisk yang dibutuhkan adalah minimal 3 (n+1 ; n > 1). Harddisk terakhir digunakan untuk menyimpan parity dari hasil perhitungan tiap bit-bit yang ada di harddisk lainnya.
Contoh: Peneliti memiliki 4 harddisk (sebut saja harddisk A,B,C, dan D) dengan ukuran yang sama, masing-masing 500GB. Jika mengkonfigurasi
keempat harddisk tersebut dengan RAID 3, maka kapasitas yang didapat adalah: 3 x 500GB = 1,5TB. Sedangkan harddisk D tidak digunakan untuk penyimpanan data, melainkan hanya untuk menyimpan informasi parity dari ketiga harddisk lainnya: A, B, dan C. Ketika terjadi kerusakan fisik pada salah satu harddisk utama (A, B, atau C), maka data tetap dapat dibaca dengan memperhitungkan parity yang ada di harddisk D. Namun, jika harddisk D yang mengalami kerusakan, maka data tetap dapat dibaca dari ketiga harddisk lainnya.
Gambar 2.16 RAID 3
5. RAID 4
Sama dengan sistem RAID 3, namun menggunakan parity dari tiap block harddisk, bukan bit. Kebutuhan harddisk minimalnya juga sama, 3 (n+1 ; n >1). Kelebihannya yaitu pembacaan data transaksi dan tingkat perpindahan saat penggabungan proses baca sangat tinggi. Akan tetapi data sulit dibentuk ulang jika terjadi kegagalan disk,serta penulisan data transaksi dan tingkat perpindahan saat penggabungan proses tulis sangat buruk.
6. RAID 5
RAID 5 pada dasarnya sama dengan RAID 4, namun dengan pariti yang terdistribusi. Yakni, tidak menggunakan harddisk khusus untuk menyimpan paritinya, namun paritinya tersebut disebar ke seluruh harddisk. Kebutuhan harddisk minimalnya juga sama, 3 (n+1 ; n >1). Hal ini dilakukan untuk mempercepat akses dan menghindari bottleneck yang terjadi karena akses harddisk tidak terfokus kepada kumpulan harddisk yang berisi data saja. Kekurangan dari RAID 5 adalah sulit untuk membentuk kembali jika terjadi kegagalan disk.