PENGENALAN SINGKAT PROSES DAN
OPTIMISASI
QUERY
Database Manajemen Sistem (DBMS) adalah kumpulan
dari program- program yang
membolehkan user untuk menciptakan dan memelihara sebuah
database. DBMS sudah menjadi peralatan standar
untuk melindungi pengguna
komputer dari
bagian-bagian kecil dalam
pengelolaan
secondary storage (hard
disk). DBMS didesain untuk meningkatkan produktivitas dari
aplikasi para programmer
dan untuk memberikan
kemudahan pengaksesan data oleh
komputer. Pengaksesan data di dalam DBMS dapat dilakukan dengan berbagai macam
cara. Dan tentunya dalam melakukan pengaksesan data ada hal-hal yang perlu
diperhatikan seperti ketepatgunaan implementasi dari data itu sendiri serta waktu
prosesnya. Ada
banyak plan (rencana) yang dapat diikuti oleh database manajemen
sistem dalam memproses dan menghasilkan jawaban sebuah query. Semua plan
pada akhirnya akan menghasilkan jawaban (output) yang sama tetapi pasti
mempunyai harga yang berbeda-beda, seperti
misalnya total waktu yang diperlukan
untuk menjalankan sebuah query. Optimisasi query
mencoba memberikan suatu pemecahan untuk menangani masalah tersebut dengan cara
menggabungkan sejumlah besar teknik-teknik dan
strategi, yang meliputi transformasi-transformasi logika dari query-query untuk mengoptimisasi jalan akses dan penyimpanan data pada sistem file. Setelah ditransformasikan, sebuah query
harus dipetakan ke dalam sebuah urut-urutan
operasi untuk menghasilkan data-data yang diminta. Sebuah query yang diekspresikan dalam sebuah bahasa query tingkat tinggi
seperti SQL mula-mula harus dibaca, diuraikan dan disahkan (scanning, parsing,
validating)1. Query tersebut kemudian dibentuk menjadi sebuah struktur data yang
biasa disebut dengan query tree. Dan kemudian DBMS (Database Manajemen Sistem) harus
merencanakan sebuah strategi eksekusi untuk mendapatkan kembali
hasil dari query dari file-file database. Tahapan-tahapan proses dari sebuah query
di dalam sebuah sistem, dan
berikut penjelasan dari
masing-masing tahapan
: ·
Scanner
melakukan identifikasi (pengenalan)
token-token
seperti
SQL
keywords,
attribute, dan relation name.
Proses
ini disebut dengan scanning.
·
Query Parser mengecek kevalidan query dan kemudian menterjemahkannya
ke dalam sebuah bentuk internal yaitu ekspresi relasi aljabar atau parse
tree.
Proses
ini disebut dengan parsing. ·
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. · Code
Generator atau
Interpreter mentransformasikan rencana akses yang dihasilkan oleh optimizer
ke dalam kode-kode. Setelah itu, kode-kode tersebut dikirimkan ke dalam
query processor untuk
dijalankan. · Query Processor melakukan eksekusi query untuk mendapatkan hasil query yang diinginkan.
Bagian Query Optimizer adalah merupakan komponen
utama yang berperan penting dalam proses optimisasi query yang menjadi topik utama
dari seluruh pembahasan ini. Alasan dibahasnya tahapan proses
diatas adalah semata-
mata untuk memberikan gambaran yang jelas tentang bagaimana pada umumnya sebuah query diproses
di dalam
sebuah Database Manajemen Sistem
(DBMS).
Hubungan
Database
Dengan Pemrosesan Query
Database adalah kumpulan dari data-data yang berhubungan satu sama lainnya yang digunakan untuk pencarian suatu data tertentu pada saat SQL
query
dijalankan. Sebuah
database dirancang,
dibuat
dan ditempati oleh data dengan tujuan tertentu.
Di dalam sistem database relasional, tabel-tabel dari database
saling
berhubungan satu
sama lainnya. Dan sebuah
tabel
database akan selalu memiliki attribute names (nama-nama attribute), relation
names (nama-nama relasi), dan
tuples (record-record). Attribute digunakan untuk
mengidentifikasikan sebuah nama yang
diikutsertakan dalam
relasi
dan menspesifikasikan
domain (tipe data sederhana
yang menentukan sebuah pemisahan data). Sedangkan tuples adalah kumpulan dari
record-record di dalam sebuah database. Relation name mendefinisikan attribute-
attribute yang
diperlukan dalam predikat dan mendefinisikan arti dari predikat tersebut.
Sistem Katalog Dalam Database
Manajemen
Sistem (DBMS) Sistem katalog
adalah sebuah sistem yang digunakan untuk menyimpan
informasi-informasi mengenai suatu
database. Informasi yang
disimpan dalam
sebuah katalog
dari sebuah relasional database manajemen sistem
meliputi relation names, attribute names, dan attributes domains
(tipe-tipe data), gambaran dari
batasan-batasan (primary key, secondary key, foreign key, NULL/NOT NULL dan
tipe-tipe dari batasan-batasan lainnya),
dan bentuk-bentuk penyimpanan dan index- index. Query optimizer melakukan akses pada katalog untuk jalan akses, implementasi (pelaksanaan)
informasi, dan data statistik untuk menentukan jalan terbaik untuk
menjalankan sebuah query.
Sebagai contoh, optimizer mengakses katalog untuk mengecek field-field
mana dari sebuah relasi yang memiliki akses hash atau akses index-index, sebelum memutuskan bagaimana untuk menjalankan sebuah kondisi pilihan ataupun
kondisi join pada relasi.
Optimisasi Query
Optimisasi Query
adalah suatu proses untuk menganalisa query untuk
menentukan sumber-sumber apa
saja yang
digunakan oleh query tersebut
dan apakah penggunaan dari sumber tersebut dapat dikurangi tanpa merubah output.
Atau bisa juga dikatakan bahwa optimisasi query adalah sebuah prosedur untuk meningkatkan strategi evaluasi dari suatu query untuk membuat evaluasi tersebut
menjadi lebih
efektif. Optimisasi query
mencakup beberapa teknik seperti
transformasi query ke dalam bentuk logika yang sama, memilih jalan akses yang optimal
dan mengoptimumkan
penyimpanan data. Optimisasi query
merupakan bagian dasar dari sebuah sistem database dan
juga merupakan suatu proses untuk menghasilkan rencana
akses yang efisien dari sebuah query di dalam sebuah database. Secara tidak langsung, sebuah rencana akses merupakan sebuah
strategi yang nantinya
akan
dijalankan untuk
sebuah
query, untuk mendapatkan kembali operasi-operasi yang apabila
dijalankan akan menghasilkan database record query. Ada tiga aspek dasar yang
ditetapkan dan
mempengaruhi optimisasi
query, yaitu : search
space, cost model dan search
strategy. Search space adalah sekumpulan rencana-rencana akses yang
sama secara
logika yang
dapat digunakan untuk mengevaluasi sebuah query. Semua rencana- rencana
dalam search
space query mengembalikan
hasil yang
sama biarpun
beberapa rencana lebih
efisien dibandingkan dengan
rencana yang lainnya. Cost
model menandakan sebuah harga untuk tiap
rencana
dalam search
space. Harga dari rencana tersebut adalah sebuah perkiraan dari sumber-sumber
yang digunakan pada saat rencana dijalankan, dimana harga yang
lebih
rendah, merupakan yang terbaik
dari rencana-rencana yang ada. Search strategy adalah sebuah perincian dari
rencana-rencana
mana
dalam search space yang akan diperiksa. Apabila search space-nya kecil, maka strategi yang
dapat diteruskan adalah menghitung dan mengevaluasi setiap rencana. Meskipun kebanyakan search space bahkan untuk query-query yang
sederhana adalah sangat besar, akan tetapi query optimizer selalu memerlukan aturan heuristik
untuk mengontrol nomer dari rencana-rencana yang akan
diperiksa.
Sejarah
Singkat
Optimisasi Query Optimisasi query
lahir sejak sebelum tahun 1970. Pada saat itu yang dikenal dengan jaman
kegelapan
(dark age),
optimisasi query
masih dilakukan
secara
manual oleh manusia.
Selain itu,
pada
jaman tersebut database relasional
juga
belum dikenal sehingga diperlukan seseorang yang benar-benar ahli dalam database untuk melakukan optimisasi query. Jadi pada jaman
kegelapan hingga
tahun
1970- an, optimisasi query
masih
dilakukan oleh manusia dan masih menggunakan cara
yang benar-benar
kuno. Seiring dengan perkembangan jaman di mana teknologi menjadi semakin
maju, maka sekitar pertengahan
tahun 1970-an
sampai
pada pertengahan tahun 1980-an optimisasi query tidak lagi dilakukan secara manual, tetapi dilakukan oleh
suatu sistem yang dikenal dengan sistem R yang kemudian menjadi berkembang pada
optimisasi perintah JOIN, sekumpulan tahapan untuk optimisasi query selanjutnya. Hingga saat ini, optimisasi query terus berkembang bersamaan dengan bermunculannya teknik-teknik baru yang digunakan
dalam proses optimisasi query meskipun
pada dasarnya
hanya ada dua macam teknik utama yang biasanya
digunakan dalam mengoptimisasi sebuah
query. Bisa dikatakan
bahwa optimisasi query merupakan tulang punggung dari sebuah sistem karena ketepatgunaan suatu
sistem sangat
tergantung
dari
optimizernya. Hampir semua DBMS menggunakan sistem optimisasi query
untuk mengurangi waktu eksekusi query sehingga kerja sistem dapat dioptimalkan dan
penggunaan sumber-sumber dapat diminimumkan. Selain itu, akes dari disk yang
sangat lambat dibandingkan dengan akses memory
membuat optimisasi query menjadi
semakin penting.
Tujuan Optimisasi Query
Prinsip ekonomi yang diperlukan
untuk
sebuah
query adalah
mengoptimisasi prosedur-prosedur,
mencoba untuk memaksimumkan output dari sejumlah sumber-sumber yang diberikan ataupun
untuk
meminimumkan penggunaan sumber
untuk memberikan output. Tujuan dari optimisasi query adalah berbeda-beda untuk setiap sistem. Ada yang menggunakan optimisasi
query
untuk meminimumkan waktu proses
sedangkan pada situasi
lain bisa juga optimisasi query diperlukan untuk waktu
respon, meminimumkan
I/O
dan meminimumkan penggunaan memory. Tetapi pada
dasarnya, tujuan dari
optimisasi query adalah
menemukan jalan
akses
yang termurah untuk meminimumkan total waktu pada saat proses sebuah query. Untuk mencapai tujuan tersebut,
maka diperlukan
optimizer
untuk
melakukan
analisa query dan untuk melakukan pencarian jalan akses.
Operasi-operasi Dasar Aljabar Relasional Untuk
menetapkan bentuk dan
batasan-batasan database,
sebuah model data harus
memasukkan sekumpulan operasi-operasi untuk mengontrol
data. Sekumpulan model operasi-operasi relasional standar
merupakan aljabar relasional.
Operasi-operasi ini membolehkan user
untuk menentukan dasar pencarian permintaan. Hasil dari sebuah pencarian adalah relasi yang baru, di mana mungkin
saja dibentuk dari satu atau lebih relasi. Oleh sebab itu, operasi-operasi aljabar menghasilkan relasi-relasi baru yang
dapat menjadi lebih berguna dengan
menggunakan operasi-operasi aljabar yang sama.
Urutan dari
operasi-operasi aljabar relasional
membentuk sebuah
ekspresi
relasi aljabar yang hasilnya
juga
berupa sebuah
relasi. Operasi-operasi relasi aljabar umumnya
dibagi
ke dalam dua kelompok. Kelompok pertama, termasuk sekumpulan operasi-operasi dari sekumpulan teori
matematika yang
dapat dipakai karena tiap-tiap relasi ditetapkan menjadi sekumpulan tuple-tuple. Sekumpulan operasi-operasi tersebut termasuk
UNION, INTERSECTION,
SET DIFFERENCE
dan CARTESIAN
PRODUCT. Kelompok yang
kedua
terdiri dari operasi-operasi yang khusus dibuat untuk database-database relasional. Yang
termasuk dalam kelompok yang kedua adalah SELECT,
PROJECT
dan
JOIN.
Sekumpulan Operasi Beberapa kumpulan operasi digunakan untuk menggabungkan elemen-
elemen dari dua kelompok dalam cara yang bervariasi, termasuk UNION, INTERSECTION dan SET
DIFFERENCE. Operasi-operasi ini adalah operasi- operasi binary
yang masing-masing digunakan untuk
dua kumpulan relasi. Operasi CARTESIAN PRODUCT yang
juga biasa disebut dengan CROSS PRODUCT atau
CROSS JOIN dilambangkan
dengan “X“ yang juga merupakan sebuah kumpulan operasi binary.
Operasi ini digunakan untuk
mengkombinasikan tuple-tuple
dari dua relasi dalam sebuah model gabungan. Umumnya, hasil dari R(A1, A2,…, An) X S( B1, B2, …, Bm) adalah relasi Q
dengan n+m dari attribute-
attribute
R(A1, A2,…, An, B1, B2, …, Bm) dalam urutannya. Hasil dari relasi Q
mempunyai satu tuple untuk masing-masing kondisi dari tuple-tuple. Satu dari R
dan satu dari S.
Algoritma untuk Mengimplementasikan
Operasi SELECT
Ada bermacam-macam metode yang digunakan untuk
mengimplementasikan salah satu syntax SQL, misal operasi SELECT. Dan pengimplementasian operasi select tergantung pada keberadaannya
dan
tipe pengindeks-annya
serta kombinasi conjunctive
dan disjunctive dari pencarian kriteria. Pengimplementasian
dari operasi SELECT
dibagi
lagi
menjadi dua, yaitu implementasi untuk simple
selection (pilihan sederhana) dan implementasi untuk
complex selection (pilihan kompleks). Berikut ini akan dibahas mengenai algoritma
untuk implentasi kedua pilihan tersebut.
Metode untuk Simple
Selection Sejumlah algoritma search memungkinkan untuk menyeleksi
record-record
dari sebuah file.
Algoritma-algoritma search juga
dikenal sebagai file
scan karena
algoritma tersebut melakukan pembacaan record dari sebuah file untuk mencari dan
mendapatkan kembali
record-record yang
memenuhi sebuah
kondisi
seleksi. Apabila algoritma search melibatkan penggunaan index, maka pencarian index disebut dengan index scan.
Metode untuk Complex Selection Apabila
sebuah kondisi dari operasi SELECT adalah sebuah kondisi konjungtif, yaitu terdiri dari beberapa kondisi-kondisi sederhana yang berhubungan
dengan logika AND. Sebaliknya, pendekatan metode
brute force linear
search dapat digunakan.
Optimisasi query untuk sebuah operasi SELECT kebanyakan diperlukan untuk
kondisi-kondisi pilihan konjungtif apabila lebih dari satu attribute terlibat dalam
kondisi-kondisi yang mempunyai
sebuah
jalan akses.
Optimizer harus memilih jalan
akses
yang
mendapatkan record-record paling sedikit dengan
cara
yang paling
efisien dengan memperkirakan
harga-harga yang berbeda dan memilih metode
dengan perkiraan harga yang paling sedikit. Pada saat optimizer memilih antara kondisi-kondisi multiple yang
sederhana
dalam sebuah kondisi pilihan konjungtif, maka
optimizer secara khusus mempertimbangkan
selectivity dari masing-masing kondisi. Selectivity (s)
didefinisikan sebagai perbandingan
dari nomer record-record (tuple-tuple) yang
memenuhi kondisi untuk jumlah nomer dari record-record pada file (relasi). Yaitu sebuah nomer antara 0 (nol)
dan 1 (satu), yang berarti selectivity 0 (nol) berarti tidak ada record
yang memenuhi
kondisi
dan 1 (satu) berarti
semua
record memenuhi kondisi. Meskipun selectivity-selectivity
yang tepat dari semua kondisi- kondisi
mungkin tidak tersedia, perkiraan dari selectivity-selectivity
tersebut seringkali disimpan dalam katalog DBMS dan digunakan oleh optimizer. Perbandingan
untuk sebuah kondisi pilihan konjungtif adalah
sebuah kondisi
disjunctive (dimana kondisi-kondisi sederhana
dihubungkan oleh logika OR lebih
daripada AND) yang
lebih
sulit untuk diproses dan dioptimisasi.
Sebuah DBMS menyediakan beberapa metode yang
sudah didiskusikan sebelumnya dan khususnya beberapa metode-metode tambahan. Query optimizer
harus memilih salah satu metode yang
tepat untuk mengeksekusi tiap-tiap
operasi SELECT dalam
sebuah query. Optimisasi ini menggunakan
rumus-rumus untuk memperkirakan harga-harga untuk tiap-tiap metode akses yang tersedia Pada
akhirnya, optimizer
akan memilih
metode
akses
dengan perkiraan harga terendah. |