1 BAB 2 LANDASAN TEORI 1.1 Teori Umum -...
Transcript of 1 BAB 2 LANDASAN TEORI 1.1 Teori Umum -...
8
1 BAB 2
LANDASAN TEORI
1.1 Teori Umum
1.1.1 Definisi Data dan Informasi
MenurutWilliams-Sawyer (2011, p40),data adalah fakta-fakta dan gambar
mentah yang akan diproses menjadi informasi. Sedangkan menurut Indrajani (2009, p2),
data adalah fakta atau observasi mentah yang biasanya mengenai fenomena fisik atau
transaksi bisnis.
Sementara itu, menurut Williams-Sawyer (2011, p41), informasi adalah data
yang telah dirangkum atau dimanipulasi dalam bentuk lain untuk tujuan pengambilan
keputusan. Sedangkan menurut Rainer-Cegielski (2011, p11), informasi adalah data
yang telah diolah sehingga memiliki arti dan nilai yang berguna bagi penerima.
1.1.2 Definisi Aplikasi
Menurut Connolly-Begg (2010, p67), aplikasi adalah sebuah program komputer
yang berinteraksi dengan database dengan melakukan pengaksesan data melalui DBMS.
Sedangkan menurut Indrajani (2009, p5), aplikasi adalah program untuk menentukan
aktivitas pemrosesan informasi yang dibutuhkan untuk penyelesaian tugas-tugas khusus
dari pemakai komputer.
9
1.1.3 Subprogram
Menurut Sebesta (2010, p411), subprogram adalah blok-blok pembangun dasar
dari program-program yang ada. Karakteristik dari subprogram, yaitu sebagai berikut:
• Setiap subprogram memiliki sebuah entry point.
• Program unit yang memanggil subprogram akan tertunda selama pemanggilan
subprogram, yang mengindikasikan bahwa hanya satu subprogram yang dapat
dieksekusi dalam waktu yang sama.
• Kontrol selalu dikembalikan ke pemanggil ketika eksekusi subprogram berhenti.
Terdapat 2 kategori dari subprogram, yaitu sebagai berikut:
o Procedure
Procedure merupakan kumpulan perintah yang melakukan perhitungan-
perhitungan terhadap parameter yang diterima.
o Function
Function secara struktur menyerupai procedure, namun secara semantik
menyerupai fungsi-fungsi matematis. Function dipanggil dengan menyebutkan
nama function beserta parameter aktual yang akan dikirim. Nilai yang dihasilkan
oleh sebuah function akan dikembalikan ke pemanggil dan menggantikan bagian
dari pemanggilan function itu sendiri.
1.1.4 Active Server Pages
Menurut Macdonald (2010, p7), Active Server Pages (ASP)adalah bahasa
pemrograman script-based yang membutuhkan pemahaman menyeluruh mengenai
HTML dan berorientasi objek model yang memungkinkan kita membuat sebuah
10
halaman web dalam membangun sebuah aplikasi dengan mudah. Sedangkan menurut
Connolly-Begg (2010, p1035), ASP adalah suatu model pemrograman yang
memungkinkan pembuatan halaman-halaman web yang dinamis dan interaktif pada web
server.
ASP dibangun pada file dengan ekstensi ‘.asp’, yang berisi kombinasi dari
komponen-komponen berikut:
• Teks
• HTML tags, dibatasi oleh simbol kurung lancip (< dan >)
• Perintah-perintah script dan ekspresi output, dibatasi oleh simbol <% dan %>
1.1.5 Sistem Database
1.1.5.1 Definisi Database
Definisi database menurut Connolly-Begg (2010, p65) adalah kumpulan data,
beserta deskripsinya, yang saling berhubungan secara logis dan dirancang untuk
memenuhi kebutuhan informasi oleh suatu organisasi. Sedangkan menurut Bryla-Loney
(2008, p4),database adalah kumpulan data dalam disk yang terdapat dalam satu atau
beberapa filepada sebuah database server yang mengumpulkan dan mengelolainformasi
yang saling berkaitan.
Empat elemen database menurut Whitten-Bentley (2007, p520-p522), yaitu
sebagai berikut:
1. Field
Field merupakan unit terkecil dari data, yang memiliki arti, yang disimpan di
dalam file atau database. Ada empat jenis field, yaitu sebagai berikut:
11
a. Primary key, adalah field yang nilainya mengidentifikasikan satu dan hanya
satu record di dalam sebuah file. Contohnya, CUSTOMER NUMBER
secara unik mengidentifikasi satu record CUSTOMER di dalam database.
Primary key dapat dibuat dengan mengkombinasikan dua atau lebih field,
disebut sebagai concatenated key.
b. Secondary key, merupakan identifier alternatif bagi database. Nilai dari
secondarykey dapat mengidentifikasi satu record tunggal (seperti
primarykey) atau himpunan record (misalnya semua ORDERS yang
memiliki ORDER STATUS berupa “back ordered”).
c. Foreign key, merupakan penunjuk ke record dari file lain di dalam
database. Foreign key memungkinkan database untuk menghubungkan
record-record dengan tipe tertentu ke record dengan tipe lain. Contohnya,
ORDER RECORD mengandung foreign key CUSTOMER NUMBER
untuk “mengidentifikasi” atau “menunjuk ke” record CUSTOMER yang
berhubungan dengan ORDER. Foreign di suatu tabel harus memiliki
pasangan primary key di tabel yang berhubungan. Dengan demikian,
CUSTOMER NUMBER di dalam tabel ORDERS harus memiliki pasangan
CUSTOMER NUMBER yang sama di dalam tabel CUSTOMERS agar
dapat terjadi relasi antara kedua tabel tersebut.
d. Descriptive field, adalah field lain (bukan key) yang menyimpan data bisnis.
Contohnya EMPLOYEE NAME, DATE HIRED, dan PAY RATE.
12
2. Record
Record adalah kumpulan field yang disusun dalam format yang sudah
ditentukan sebelumnya. Contohnya, suatu CUSTOMER RECORD
dideskripsikan oleh field-field berikut:
CUSTOMER (NUMBER, LAST-NAME, FIRST-NAME, ...)
3. File dan Tabel
Record-record sejenis disusun ke dalam kelompok yang disebut file. Dalam
sistem database, file seringkali disebut tabel. File adalah kumpulan dari semua
kejadian dari suatu struktur record. Tabel adalah database relasional yang
ekuivalen terhadap file.
1.1.5.2 Database Management System
Menurut Connolly-Begg (2010, p66),Database Management System, atau
seringkali disingkat DBMS, adalah sebuah perangkat lunak sistem yang memungkinkan
pemakai untuk mendefinisikan, membuat, mengelola, dan mengontrol akses ke
database.
Menurut Indrajani (2009, p12-p17), lima komponen penyusun DBMS, yaitu
sebagai berikut:
1. Perangkat Keras (Hardware)
Yang termasuk perangkat keras, antara lain personal computer, notebook,
mainframe, hingga jaringan komputer.
2. Perangkat lunak (Software)
Beberapa penggunaan software, antara lain sebagai berikut:
13
a. Software untuk sistem operasi PC biasa atauserver, contohnya Windows 7,
Windows XP, dan Linux.
b. Software untuk database, contohnya Microsoft SQL 2005, Oracle, dan
MySQL.
c. Software untuk pemrograman, contohnya Visual Basic, ASP.Net, C, dan
C++.
d. Software untuk mengatur jaringan, contohnya CISCO.
3. Data
Data merupakan komponen terpenting dalam DBMS karena data merupakan
penghubung antara komputer dan manusia.
4. Prosedur
Prosedur adalah instruksi yang menentukan perancangan dan pengaturan basis
data dimana pengguna sistem dan basis data memerlukan dokumentasi ini
untuk menggunakan sistem.
5. Orang
Peranan orang dapat dibedakan berdasarkan fungsinya, yaitu sebagai berikut:
a. Data dan Database Administrator, yaitu orang atau sekelompok orang yang
bertanggung jawab pada manajemen dan pengendalian basis data.
b. Databasedesigner, dibedakan menjadi perancang basis data secara logika
dan fisik.
c. Application developer atau programmer, berfungsi untuk mengembangkan
program-program aplikasi yang diperlukan dalam manajemen basis data.
14
d. End user, di antaranya adalah pemilik sistem (enterprise), para manajer,
supervisor, operator, dan pelanggan.
1.1.6 Structured Query Language (SQL)
Menurut Williams-Sawyer (2011, p514),Structured Query Language (SQL)
adalah sebuah bahasa query yang digunakan untuk mengakses dan memanipulasi data
dari sebuah database management system.
1.1.6.1 Komponen-komponen SQL
Dua komponen utama SQL, menurut Connolly-Begg (2010, p92), yaitu sebagai
berikut:
1. Data Definition Language (DDL), merupakan sebuah bahasa yang
memungkinkan DBA atau pemakai untuk mendeskripsikan dan membuat nama
entitas, atribut, dan relasi yang dibutuhkan untuk sebuah aplikasi.
2. Data Manipulation Language (DML), merupakan sebuah bahasa yang
menyediakan sebuah kumpulan operasi untuk mendukung operasi manipulasi
dasar terhadap data di dalam database. Operasi DML bisanya mengandung
hal-hal sebagai berikut:
• Menambahkan sebuah data baru ke dalam database
• Memodifikasi data yang sudah tersimpan dalam database
• Mengambil atau mengakses data yang sudah ada di database
• Menghapus data yang sudah ada di dalam database
15
1.1.6.2 SQL Function
Menurut Feuerstein dan Pribyl (2009, p571), SQL function adalah sebuah
modul yang mengembalikan data melalui klausa RETURN alih-alih menggunakan
argumen OUT atau IN OUT.
Menurut Alapati (2009, p1228), SQL function dapat dibagi menjadi beberapa
jenis, yaitu sebagai berikut:
1. Single-Row Function
Single-row function adalah perintah-perintah yang digunakan untuk melakukan
tugas seperti mengubah karakter huruf kecil menjadi huruf kapital atau
sebaliknya, atau mengubah potongan teks pada baris. Berikut ini adalah
beberapa single-row function yang digunakan dalam Oracle:
• LENGTH: berfungsi untuk mengembalikan panjang dari sebuah string.
• LOWER: berfungsi mengubah huruf kapital menjadi huruf kecil.
• UPPER: berfungsi mengubah hurufkecil menjadi huruf kapital.
• SUBSTR: berfungsi untuk mengembalikan potongan dari sebuah string.
• LPAD: berfungsi untuk mengembalikan sebuah string setelah ditambahkan
dengan karakter tertentu di awal string dengan panjang yang telah
ditentukan.
• RPAD: berfungsi untuk mengembalikan sebuah string setelah ditambahkan
dengan karakter tertentu di akhir string dengan panjang yang telah
ditentukan.
• TRIM: berfungsi untuk menghapus suatu karakter tertentu dari sebuah
string.
16
2. Aggregate Function
Aggregate functions digunakan untuk melakukan perhitungan seperti rata-rata
dan total dari suatu kolom di dalam query. Beberapa aggregate function yang
penting, antara lain sebagai berikut:
• MIN: berfungsi untuk mengembalikan nilai terkecil.
• MAX: berfungsi untuk mengembalikan nilai terbesar.
• AVG: berfungsi untuk mengembalikan nilai rata-rata.
• SUM: berfungsi untuk mengembalikan jumlah dari sebuah kolom.
• COUNT: berfungsi untuk mengembalikan banyaknya baris dari kolom-
kolom tertentu.
3. Number dan Date Function
Number function pada Oracle menerima nilai numerik dan juga
mengembalikan nilai-nilai numerik, sedangkan datefunction membantu kita
mengatur format tanggal dan waktu. Beberapa number dan date function yang
penting, antara lain sebagai berikut:
• ROUND: berfungsi untuk mengembalikan nilai hasil pembulatan ke tingkat
desimal tertentu.
• TRUNC: berfungsi untukmengembalikan tanggal hasil pemotongan ke
format tanggal tertentu.
• SYSDATE: berfungsi mengembalikan tanggal dan waktu sekarang.
• TO_DATE: berfungsi untukmengubah format tanggal atau mengkonversi
tipe data CHAR atau VARCHAR2 menjadi tipe data DATE.
• TO_CHAR: berfungsi untukmengkonversi tanggal menjadi karakter string.
17
• TO_NUMBER: berfungsi untuk mengkonversi karakter string menjadi
angka.
4. General dan Conditional Function
General dan conditional function memungkinkan kita untuk memperluas
kemampuan dari perintah SQL yang sederhana menjadi sesuatu yang
menyerupai konstruksi bahasa pemrograman tradisional. Sedangkan
conditional function membantu kita untuk menentukan di antara beberapa
pilihan. Beberapa general dan conditional function yang penting dalam Oracle,
antara lain sebagai berikut:
• NVL: berfungsi untuk mengganti nilai dari suatu kolom pada tabel dengan
nilai dengan suatu nilai tertentu apabila nilai kolom tersebut adalah null.
• COALESCE: memiliki fungsi yang hampir sama dengan NVL.
Perbedaannya adalah fungsi COALESCE akan mengembalikan nilai non-
null pertama daftar kolom yang ditentukan.
Contoh: SQL>COALESCE(region1,region2,region3,region4)
• DECODE: berfungsi untuk menyertakan fungsionalitas dasar IF-THEN ke
dalam SQL. Pada contoh di bawah, voter dengan nilai affiliation ‘D’ akan
diberi nama ‘Democrat’ dan voter dengan affiliation ‘R’ akan diberi nama
‘Republican’. Voter dengan affiliation selain itu akan didaftarkan sebagai
‘Independent’.
SQL> SELECT DECODE(affiliation, 'D', 'Democrat',
'R', 'Republican', 'Independent') FROM voters;
18
• CASE: menyediakan fungsionalitas yang sama seperti functionDECODE,
namun dengan cara yang lebih intuitif dan elegan, seperti pada contoh
berikut:
SQL> SELECT ename,
(CASE deptno
WHEN 10 THEN 'Accounting'
WHEN 20 THEN 'Research'
WHEN 30 THEN 'Sales'
ELSE 'Unknown'
END)
department
FROM employees;
1.1.6.3 Subquery
Menurut Watson-Ramklass-Bryla (2010, p516),subquery adalah query yang
berada di dalam sebuah perintah SELECT, INSERT, DELETE, atau di dalam subquery
lainnya. Subquery sering dianggap sebagai innerquery, dan perintah yang mengandung
subquery dinamakan outerquery. Bagian-bagian dalam sebuah query yang menggunakan
subquery yaitu:
• Dalam daftar SELECT yang digunakan untuk columnprojection
• Dalam klausa FROM
• Dalam klausa WHERE
• Dalam klausa HAVING
19
Menurut Watson-Ramklass-Bryla (2010, p517-p519), beberapa situasi di mana
kita memerlukan hasil dari suatu querysebagai input bagi query lainnya, antara lain
sebagai berikut:
1. Penggunaan hasil subquery untuk perbandingan
Tabel 1.1Contoh Penggunaan Subquery untuk Perbandingan
Pada contoh yang menggunakan subquerypada tabel 2.1, subquery digunakan
untuk menggantikan nilai ke dalam klausa WHERE dari parentquery. Nilai ini
merupakan nilai tunggal yang kemudian akan digunakan untuk perbandingan
dengan baris-baris yang dihasilkan parent query.
2. Menghasilkan tabel untuk bagian FROM dari sebuah query
Subquery juga dapat digunakan dalam klausa FROM, di mana subquery jenis
ini biasa dianggap sebagai inlineview.
Tabel 1.2Contoh Penggunaan Subqueryuntuk Menghasilkan Tabel
3. Menghasilkan nilai-nilai untuk projection
Bagian ketiga yang dapat dimasuki oleh subquery adalah bagian SELECT dari
sebuah query.
Tabel 1.3Contoh Penggunaan Subquery dalam Klausa SELECT
select avg(salary), country_id from (select salary, department_id, location_id, l.country_id from employee join departments d using (department_id) join locations l using (location_id)) group by country_id
select last_name from employees where salary < (select avg(salary) from employees);
20
4. Menghasilkan baris-baris untuk diberikan pada perintah DML
Subquery juga dapat digunakan pada perintah DML seperti pada contoh
berikut:
Tabel 1.4Contoh PenggunaanSubquerypada Perintah DML
1.1.6.4 Multi-Table Query
Menurut Connolly-Begg (2010, p158), operasi join adalah operasi SQL yang
mengkombinasikan informasi dari dua tabel dengan membentuk pasangan dari baris-
baris yang berkaitan dari dua tabel.
Apabila kita ingin memperoleh informasi dari beberapa tabel, pilihan yang
tersedia yaitu menggunakan subquery atau menggunakan operasi join. Apabila tabel
hasil berisi kolom-kolom dari tabel lain, maka diperlukan penggunaan join. Untuk
melakukan join, cukup menyertakan lebih dari satu nama tabel pada klausa FROM,
menggunakan tanda baca koma (,) sebagai pemisah, dan biasanya menyertakan klausa
WHERE untuk menentukan kolom-kolom join. Nama-nama tabel pada klausa FROM
juga dapat diwakilkan oleh suatu alias. Alias dipisahkan dari nama tabel dengan spasi.
insert into sales_hist select * from sales where date > sysdate-1;
update employees set salary=
(select avg(salary) from employees); delete from departments where department_id not in
(select department_id from employees);
select (select max(salary) from employees) * (select max(commission_pct) from employee)
from dual;
21
1.1.7 PL/SQL
Menurut Alapati (2009, p1241), PL/SQL merupakan singkatan dari Oracle’s
propietary extension to SQL. Salah satu keuntungan yang ditawarkan oleh PL/SQL
adalah bahwa Anda dapat menggunakan program unit yang disebut procedure atau
package di dalam database, sehingga meningkatkan performance dari penggunaan
kembali kode yang pernah ditulis.
1.1.7.1 Blok PL/SQL Dasar
Menurut Alapati (2009, p1241), blok PL/SQL adalah sebuah program yang
dapat dieksekusi. Suatu blok PL/SQL, baik yang terenkapsulasi dalam sebuah program
unit seperti procedure atau yang ditulis sebagai suatu anonymous block yang bebas,
tersusun dari struktur-struktur berikut:
a. DECLARE
DECLARE merupakan bagian opsional. Sebelum digunakan, variabel dan
konstanta pada blok PL/SQL harus dideklarasikan terlebih dahulu pada bagian
DECLARE. Variabel PL/SQL dapat berupa tipe built-in, seperti DATE,
NUMBER, VARCHAR2 atau CHAR, atau dapat berupa sebuah tipe komposit
seperti VARRAY.
b. BEGIN
BEGIN merupakan perintah wajib dalam blok PL/SQL. Semua perintah
PL/SQL harus dituliskan setelah perintah BEGIN. Terdapat beberapa
perbedaan dalam cara menangani perintah SELECT pada PL/SQL dengan
perintah SELECT biasa. Ketika menggunakan perintah SELECT dalam
22
PL/SQL, kita perlu menyimpan nilai-nilai yang dihasilkan ke dalam suatu
variabel, seperti yang ditunjukkan pada contoh berikut:
Tabel 1.5Contoh Blok PL/SQL
c. EXCEPTION
EXCEPTION merupakan perintah opsional untuk menetapkan mekanisme
penanganan error.
d. END
END merupakan perintah wajib yang mengindikasikan akhir dari blok
PL/SQL.
1.1.7.2 Struktur Kontrol dalam PL/SQL
Menurut Alapati (2009, p1243), jenis-jenis struktur kontrol dalam PL/SQL,
yaitu sebagai berikut:
a. Conditional control
Struktur conditional control utama dalam PL/SQL adalah perintah IF, yang
memungkinkan eksekusi perintah secara kondisional. Tiga bentuk penulisan
perintah IF yaitu: IF-THEN, IF-THEN-ELSE, dan IF-THEN-ELSEIF.
b. Konstruksi Looping
DECLARE name VARCHAR2(30);
BEGIN SELECT employee_name INTO name FROM employees WHERE emp_id=99999;
END; /
23
PL/SQL loop menyediakan cara untuk melakukan iterasi terhadap suatu code
tertentu sebanyak frekuensi yang ditentukan atau hingga suatu kondisi bernilai
benar atau bernilai salah. Jenis-jenis konstruksi looping, yaitu sebagai berikut:
• Simple Loop
Pada simple loop, sekumpulan perintah SQL ditulis di antara keyword
LOOP dan END LOOP. Perintah EXIT akan menghentikan iterasi.
Konstruksi simple loop digunakan apabila jumlah iterasi tidak dapat
ditentukan secara pasti.
• WHILE loop
Pada WHILE loop, sekumpulan perintah tertentu akan dieksekusi selama
kondisi tertentu bernilai benar. Pada konstruksi ini, kondisi dievaluasi
diluar loop. Kondisi akan dievaluasi setiap kali perintah di antara LOOP
dan END LOOP dieksekusi. Apabila kondisi sudah bernilai salah, maka
iterasi akan berhenti.
• FOR loop
Konstruksi FOR loop digunakan apabila jumlah eksekusi dapat ditentukan
secara pasti.
1.1.7.3 Subprogram PL/SQL
Menurut Moore (2009, p1-17), subprogram PL/SQL adalah blok PL/SQL yang
dapat dipanggil dengan menyertakan sekumpulan parameter. Subprogram PL/SQL dapat
berupa procedure ataupun function. Biasanya, procedure digunakan untuk melakukan
suatu tugas, sedangkan function digunakan untuk melakukan perhitungan sekaligus
24
mengembalikan sebuah nilai. Subprogram dapat dibuat pada tingkat schema, dalam
sebuah package, atau dalam suatu blok PL/SQL.
Subprogram yang dibuat pada tingkat schema dinamakan standalone stored
subprogram. Kita dapat membuat subprogram ini dengan perintah CREATE
PROCEDURE atau CREATE FUNCTION. Subprogram ini disimpan dalam database
hingga kita menghapusnya dengan perintah DROP PROCEDURE atau DROP
FUNCTION.
Subprogram yang dibuat dalam sebuah package dinamakan packaged
subprogram. Subprogram ini disimpan dalam database hingga kita menghapus package
dengan perintah DROP PACKAGE.
Subprogram yang dibuat dalam suatu blok PL/SQL dinamakan nested
subprogram. Kita dapat mendeklarasi dan mendefinisikannya pada saat yang sama, atau
kita dapat mendeklarasikannya terlebih dahulu (forward declaration) dan kemudian
mendefinisikannya kemudian dalam blok yang sama. Sebuah nested subprogram
disimpan dalam database hanya jika subprogram tersebut berada di dalam suatu
standalone atau packagedsubprogram.
Sebuah subprogram selalu memiliki nama dan bisa memiliki daftar parameter.
Seperti setiap blok PL/SQL, subprogram PL/SQL memiliki suatu bagian deklaratif yang
opsional, bagian executable yang wajib, dan suatu bagian exception-handling yang
opsional.
25
1.1.8 Definisi Cross Functional Flowchart
Menurut Fauzi (2011, p22),cross functional flowchart adalah sebuah langkah
kerja yang digunakan untuk membuat dan menunjukan hubungan antara proses bisnis
dengan organisasi atau unit fungsional seperti departemen. Sedangkan menurut Biafore
(2007, p324),cross functional flowchart adalah suatu diagram yang digunakan untuk
menunjukkan departemen-departemen atau area fungsional yang berkontribusi dalam
melakukan sebuah proses.
1.1.9 Definisi Teleservice
Menurut Oxford Dictionaries,The World’s Most Trusted Dictionaries, tele
merupakan suatu proses menuju atau berada pada tempat yang jauh, dan service adalah
sebuah aksi yang dilakukan untuk membantu orang lain. Sedangkan menurut Longman
Dictionary of Contemporary English, service adalah sebuah sistem untuk menyediakan
sesuatu untuk orang lain dalam sebuah Negara.
1.1.10 Definisi Telemarketing
Menurut Oxford Dictionaries,The World’s Most Trusted Dictionaries,
telemarketing merupakan pemasaran dari produk-produk atau pelayanan-pelayanan yang
dilakukan dengan memakai telepon terhadap customer yang berpotensi untuk
menggunakannya. Sedangkan menurut Longman Dictionary of Contemporary English,
telemarketing merupakan sebuah cara untuk menjual produk kepada orang-orang dimana
kita menelepon orang tersebut untuk mengetahui apakah orang tersebut ingin membeli
produk kita atau tidak.
26
1.2 Teori Khusus
1.2.1 Definisi Performance
Menurut Longman Dictionary of Contemporary English, performance adalah
seberapa baik atau buruk seseorang, perusahaan, dan lain-lain melakukan suatu
pekerjaan atau aktivitas tertentu. Sedangkan menurut Webster’s New World College
Dictionary, performance berarti operasi atau fungsionalitas yang biasanya berhubungan
dengan efektivitas.
1.2.2 Performance Tuning
1.2.2.1 Definisi Performance Tuning
Menurut Alapati (2009, p1041),performance tuning merupakan usaha untuk
meningkatkan kinerja atau memperbaiki kinerja yang memburuk. Sedangkan menurut
Chan (2008, pp1-2),performance tuning merupakan kegiatan mengidentifikasi masalah
yang paling signifikan dan melakukan perubahan-perubahan yang sesuai untuk
mengurangi atau mengeliminasi efek dari masalah yang bersangkutan.
1.2.2.2 Manfaat Performance Tuning
Menurut Connolly-Begg (2010, p508), manfaat-manfaat yang diperoleh dari
performance tuning, yaitu:
• Mengurangi kebutuhan untuk menambah perangkat keras baru.
• Dapat mengurangi ukuran dari konfigurasi perangkat keras sehingga dapat
menekan biaya dan jumlah perangkat keras yang diperlukan, dan dengan
demikian dapat menurunkan biaya maintenance bagi perangkat keras.
27
• Sistem yang berhasil dilakukan tuning akan menghasilkan response time yang
lebih cepat dan throughput yang lebih baik. Sebagai hasilnya, user maupun
organisasi menjadi lebih produktif.
• Response time yang lebih cepat dapat meningkatkan moral dari staf.
• Response time yang lebih cepat dapat meningkatkan kepuasan pelanggan.
1.2.2.3 Pendekatan Performance Tuning
Menurut Chan (2008, pp1-1), terdapat tiga pendekatan dalam melakukan
performance tuningpada Oracledatabase, yaitu sebagai berikut:
1. Performance planning
Performance planning merupakan peningkatan performance dari Oracle
database dengan memeriksa desain aplikasi dan menggunakan statistik untuk
memantau performance aplikasi.
2. Instance tuning
Instance tuning merupakan pendekatan performance tuning dengan
memperbaiki pengaturan dari Oracle instance, seperti konfigurasi memori,
konfigurasi I/O, penggunaan statistik performance otomatis, penggunaan
diagnosa performance otomatis, dan penggunaan performance view.
3. SQL tuning
SQL tuningdilakukan dengan mencari cara yang lebih efisien untuk memproses
workload yang sama. Dalam SQL tuning, dimungkinkan untuk mengubah
execution planpada perintah yang ada tanpa mengubah fungsionalitas yang ada
untuk mengurangi pemakaian resource.
28
1.2.3 Definisi Response Time
Menurut Alapati (2009, p1162),response time adalah waktu yang dibutuhkan
oleh Oracle untuk mengeksekusi sebuah query, ditambah waktu yang diperlukan proses
tersebut untuk menunggu resource, seperti data buffer. Ruang lingkup utama yang
menjadi fokus dalam melakukan performance tuning adalah mengatasi permasalahan
pada database yang berkontribusi terhadap responsetime yang tinggi.
1.2.4 SQL Tuning
Menurut Bryla-Loney (2008, p247), kunci dari melakukan SQL tuning adalah
meminimalisir pencarian path yang digunakan database untuk mencari data.
Menurut Chan (2008, pp11-5 – pp11-16), langkah-langkah dalam melakukan
SQL tuning, antara lain sebagai berikut:
1. Memeriksa execution plan
Langkah ini diperlukan untuk memeriksa apakah access path yang digunakan
sudah optimal. Ketika memeriksa execution plan, beberapa hal yang perlu
diperhatikan, antara lain sebagai berikut:
• Driving table merupakan tabel yang memiliki filter paling selektif.
• View digunakan secara efisien. Perhatikan daftar SELECT untuk melihat
apakah akses terhadap view diperlukan.
• Apakah terdapat Cartesian product yang tidak diinginkan.
• Apakah setiap tabel diakses secara efisien
Perhatikan predikat dalam perintah SQL dan jumlah baris di dalam tabel.
Perhatikan langkah-langkah yang “mencurigakan”, seperti full table scan pada
29
tabel dengan jumlah baris yang banyak, dengan predikat pada klausa where.
Tentukan mengapa index tidak digunakan pada predikat yang selektif tersebut.
Apabila kondisi-kondisi seperti itu belum optimal, maka pertimbangkan untuk
melakukan restrukturisasi perintah SQL atau mengatur ulang index yang ada.
2. Melakukan restrukturisasi perintah SQL
Seringkali, menulis kembali perintah SQL yang tidak efisien jauh lebih mudah
dibandingkan memodifikasinya. Apabila Anda memahami tujuan dari suatu
perintah SQL, maka Anda bisa dengan cepat dan mudah menulis sebuah perintah
baru yang memenuhi persyaratan yang ditentukan.
3. Melakukan restrukturisasi index
Beberapa hal yang dapat dilakukan, antara lain sebagai berikut:
• Menghapus index yang tidak selektif untuk mempercepat DML
• Mempertimbangkan untuk menata ulang kolom-kolom dalam concatenated
index yang ada
• Menambahkan kolom kepada index untuk meningkatkan selektivitas
4. Memodifikasi atau menonaktifkan trigger
Penggunaan trigger dapat menghabiskan sumber daya sistem. Apabila
penggunaan trigger terlalu banyak, performance bisa menjadi lebih buruk
sehingga Anda perlu melakukan modifikasi atau menonaktifkan beberapa trigger
yang ada.
5. Melakukan restrukturisasi data
Setelah melakukan restrukturisasi index dan perintah SQL, Anda dapat
mempertimbangkan untuk merestrukturisasi data.
30
• Periksa kembali perancangan data Anda. Lakukan perubahan terhadap
perancangan sistem jika hal tersebut dapat meningkatkan performance.
• Pertimbangkan partitioning, apabila diperlukan.
1.2.4.1 Indexing
1.2.4.1.1 PengertianIndex
Menurut Connolly-Begg (2010, p242),index adalah sebuah struktur yang
menyediakan akses ke baris-baris dari sebuah tabel berdasarkan nilai dari satu atau lebih
kolom. Sedangkan menurut Bryla-Loney (2008, p17), index adalah sebuah struktur yang
memungkinkan kita untuk mengakses data lebih cepat dalam sebuah tabel ketika suatu
himpunan bagian dari kumpulan baris yang ada akan diambil atau diakses dalam tabel
tersebut. Sebuah index menyimpan nilai dari kolom-kolom yang di-index, bersama
dengan physical RowID dari baris yang memiliki nilai dari index tersebut. Apabila
terdapat kecocokan antara nilai pencarian dengan nilai pada index, RowID pada index
akan menunjuk ke suatu lokasi baris di dalam tabel.
1.2.4.1.2 Jenis-jenis Index
Menurut Alapati (2009, p297),index pada Oracle database dibagi menjadi
tiga jenis, yaitu sebagai berikut:
• Unique dan nonunique index
Unique index adalah index yang berdasarkan pada kolom yang nilainya unik.
Ketika kita menempatkan unique constraint pada suatu kolom, Oracle akan
secara oromatis membuatkan unique index pada kolom tersebut.
• Primary dan secondary index
31
Primary index adalah unique index pada suatu tabel yang harus selalu
menyimpan suatu nilai, sehingga tidak boleh bernilai NULL. Secondary
index adalah index lain pada tabel yang sama yang tidak harus bersifat unik.
• Composite index
Composite index, atau dikenal juga sebagai concatenated index, adalah index
yang terdiri dari dua kolom atau lebih dari tabel yang sama. Composite index
sangat berguna dalam meningkatkan pemilihan predikat dari klausa WHERE.
Biasanya, jika penggunaan index individual menghasilkan pemilihan yang
kurang baik, maka penggunaan composite index akan meningkatkan
selektivitas.
1.2.4.1.3 Panduan dalam Membuat Index
Menurut Alapati (2009, p297), terdapat beberapa hal yang perlu diperhatikan
dalam membuat index yang efisien pada tabel-tabel Oracle, antara lain sebagai berikut:
• Gunakan index hanya jika Anda perlu mengakses tidak lebih dari 4 atau 5
persen data dari sebuah tabel. Perlu diingat bahwa penggunaan index untuk
mengakses data membutuhkan dua kali pembacaan, yaitu pembacaan index
diikuti oleh pembacaan tabel.
• Hindari penggunaan index pada tabel-tabel yang relatif kecil. Full table scan
sudah cukup bagi tabel-tabel kecil. Tidak perlu menyimpan data tabel dan
index untuk tabel-tabel kecil.
• Buat primary key pada semua tabel. Apabila Anda menetapkan suatu kolom
sebagai primary key, Oracle akan secara otomatis membuatkan index pada
kolom tersebut.
32
• Buat index pada kolom-kolom yang terlibat dalam operasi multitable join.
• Buat index pada kolom-kolom yang sering digunakan dalam klausa WHERE.
• Kolom-kolom yang terdiri dari string yang panjang biasanya bukan kandidat
yang baik untuk dibuatkan index.
• Buat index pada tabel-tabel dengan selektivitas yang tinggi. Artinya, buat
index hanya pada tabel-tabel yang tidak memiliki banyak data dengan nilai
yang sama.
• Usahakan agar jumlah index sesedikit mungkin.
• Composite index dapat digunakan ketika nilai dari satu kolom tunggal tidak
cukup unik.
1.2.4.1.4 Beberapa Hal yang Menyebabkan Index Tidak Digunakan
Menurut Niemec (2007, p40), terdapat beberapa situasi di mana logika dari
klausa WHERE akan membuat Oracle tidak menggunakan index yang ada, antara lain
sebagai berikut:
a. Penggunaan operator NOT EQUAL (<> dan !=)
Index hanya dapat digunakan untuk mencari data yang memang ada dalam
sebuah tabel. Setiap kali operator-operator not equal digunakan dalam klausa
WHERE, maka index pada kolom-kolom bersangkutan tidak dapat
digunakan.
b. Penggunaan IS NULL atau IS NOT NULL
Ketika kita menggunakan IS NULL atau IS NOT NULL dalam klausa where,
index pada kolom yang bersangkutan tidak akan digunakan karena nilai
NULL tidak dikenali. Tidak ada nilai pada database yang sama dengan
33
sebuah nilai NULL, bahkan NULL sendiri tidak dapat dibandingkan dengan
nilai NULL lain. Untuk mencegah nilai-nilai NULL masuk ke sebuah kolom,
kita dapat menggunakan NOT NULL ketika membuat atau melakukan alter
pada tabel.
c. Penggunaan function
Selain function-based index, penggunaan fungsi-fungsi pada kolom-kolom
yang memiliki index pada klausa WHERE dalam sebuah perintah SQL akan
menyebabkan optimizer mengabaikan index yang ada. Beberapa fungsi yang
umum digunakan yaitu TRIM, TRUNC, UPPER, LOWER, SUBSTR,
TO_DATE, TO_CHAR, and INSTR. Semua fungsi ini akan menyebabkan
nilai dari kolom bersangkutan berubah. Oleh karena itu, index dan kolom-
kolom yang ditunjuk tidak akan digunakan.
1.2.4.2 Partitioning
1.2.4.2.1 Pengertian Partitioning
Menurut Oracle Corporation (2011, pp1-1),partitioning adalah pemecahan
tabel dan index yang berukuran besar ke dalam kelompok-kelompok yang lebih kecil,
yang sifatnya transparan terhadap aplikasi. Sedangkan menurut Bryla-Loney (2008,
p266),partitioning adalah pembagian data dari suatu tabel yang berukuran besar ke
dalam beberapa subtabel.
Menurut Alapati (2009, p1076), tabel yang dipartisi biasanya menghasilkan
peningkatan yang besar bagi performance, dan tabel-tabel yang dipartisi lebih mudah
dikelola. Dengan mempartisi suatu tabel menjadi beberapa subpartisi, kita pada dasarnya
telah membatasi jumlah data yang perlu diperiksa untuk memenuhi query yang kita
34
bangun. Apabila terdapat tabel-tabel berukuran besar, dengan jumlah record di atas 10
juta, pertimbangkan untuk mempartisi tabel-tabel tersebut.
1.2.4.2.2 Partitioning Key
Menurut Oracle Corporation (2011,pp2-2),partitioning key adalah satu atau
lebih kolom yang menentukan pada partisi mana setiap baris dalam tabel
disimpan.Oracle secara otomatis mengarahkan operasi insert, update, dan delete ke
partisi yang tepat dengan partitioning key.
1.2.4.2.3 Pengaruh Partitioning Terhadap Performance
Menurut Oracle Corporation (2011, pp2-5),partitioning memberikan
keuntungan bagi performance dengan karakteristik sebagai berikut:
• Partition Pruning
Partition pruning merupakan sarana yang paling sederhana sekaligus paling
penting dalam meningkatkan performance dengan menggunakan
partitioning. Partition pruning seringkali dapat meningkatkan kinerja query
hingga beberapa kali lipat. Sebagai contoh, misalkan terdapat suatu aplikasi
dengan sebuah tabel Orders yang berisi data-data pemesanan historikal, dan
tabel ini sudah dipartisi berdasarkan minggu. Dengan demikian suatu query
yang mengakses data pemesanan dalam satu minggu cukup mengakses satu
partisi dari tabel Orders.
• Partition Wise-Joins
Partitioning juga dapat meningkatkan performance dari multi-table joins
dengan menggunakan teknik yang dikenal dengan partition-wise joins.
Partition wise-joins dapat diaplikasikan ketika dua tabel dilakukan operasi
35
join dan kedua tabel dipartisi pada join key. Partition-wise joins memecah
suatu join yang besar menjadi beberapa join yang lebih kecil antara masing-
masing partisi sehingga waktu join secara keseluruhan menjadi lebih sedikit.
Namun, menurut Alapati (2009, p281), meskipun tabel-tabel yang dipartisi
pada umumnya akan memperbaiki performance dari tabel-tabel berukuran besar,
partitioning bukan jalan keluar bagi masalah-masalah perancangan dan penulisan
aplikasi yang buruk. Selain itu, partitioning juga dapat menghasilkan suatu cost
tambahan dalam hal usaha pengelolaan partisi dan index-nya.
1.2.4.2.4 Strategi Partitioning
Menurut Oracle Corporation (2011, pp2-6 – pp2-9), Oracle partitioning
menawarkan tiga metode dasar dalam distribusi data sebagai strategi partitioning dasar
yang mengontrol bagaimana data ditempatkan ke dalam partisi-partisi individual, yaitu
range, hash, dan list.
Dengan metode-metode distribusi data tersebut, strategi partitioning dapat
dibagi ke dalam dua kategori, yaitu sebagai berikut:
1. Single-Level Partitioning
Pada single-level partitioning, suatu tabel didefinisikan dengan menetapkan
salah satu dari metode distribusi data berikut, dengan satu atau lebih kolom
sebagai partitioningkey:
a. Range partitioning
Range partitioning memetakan data ke partisi berdasarkan rentang dari
nilai-nilai partitioning key yang Anda tentukan untuk setiap partisi.
36
Contohnya, pada suatu tabel dengan kolom Tanggal sebagai partitioning
key, partisi January-2010 akan berisi baris-baris dengan nilai partitioning
key dari 01-Jan-2010 hingga 31-Jan-2010.
Setiap partisi memiliki klausa VALUES LESS THAN, yang menetapkan
batas atas untuk partisi. Literal MAXVALUE dapat didefinisikan untuk
partisi tertinggi. MAXVALUE merepresentasikan suatu nilai tak terbatas
bagi nilai-nilai yang memungkinankan untuk partitioning key, termasuk
nilai NULL.
b. List partitioning
List partitioning memungkinkan Anda untuk mengontrol secara eksplisit
bagaimana baris-baris dipetakan ke dalam partisi dengan menetapkan
suatu daftar nilai-nilai diskrit untuk partitioning key dalam deskripsi
setiap partisi. Contohnya, pada suatu tabel dengan kolom Region sebagai
partitioning key, partisi East Sales Region akan berisi nilai-nilai New
York, Virginia, dan Florida.
Partisi DEFAULT memungkinkan Anda untuk tidak menetapkan semua
nilai-nilai yang memungkinkan pada suatu list-partitioned table dengan
menggunakan partisi default, sehingga semua baris yang tidak terpetakan
ke partisi lain tidak menyebabkan terjadinya error.
c. Hash partitioning
Hash partitioning memerakan data ke partisi berdasarkan algoritma hash
yang diterapkan oleh Oracle kepada partitioning key yang Anda tetapkan.
37
Algoritma hash mendistribusikan baris-baris dalam partisi secara merata,
sehingga partisi memiliki ukuran yang kurang lebih sama.
Gambar 1.1List, Range, dan HashPartitioning
2. Compositepartitioning
Composite partitioning merupakan kombinasi dari metode-metode dasar
distribusi data. Suatu tabel dipartisi dengan salah satu metode distribusi data.
Masing-masing partisi tersebut kemudian dibagi lagi ke dalam beberapa
subpartisi dengan metode distribusi data kedua.
Gambar 1.2Composite Partitioning
1.2.4.3 Efisiensi Eksekusi SQL
Menurut Chan (2008, pp2-13), salah satu hal yang perlu diperhatikan untuk
mendukung efisiensi eksekusi SQL, yaitu meminimalisasi aktivitas parsing pada sistem.
38
Parsing merupakan proses menginterpretasikan suatu perintah SQL dan membangun
suatu execution plan untuk perintah SQL tersebut. Proses ini terdiri dari banyak fase,
mencakup pemeriksaan sintaks, pemeriksaan keamanan, pembuatan execution plan, dan
pemuatan struktur ke dalam shared pool. Terdapat dua jenis operasi parsing, yaitu:
• Hard parsing
Suatu perintah SQL dijalankan untuk pertama kali, dan tidak ditemukan
kecocokan dengan struktur SQL lain di dalam shared pool. Operasi hard
parsing akan menghabiskan sangat banyak resource karena semua operasi
yang terlibat dalam parsing akan dijalankan, sehingga akan meningkatkan
response time dari query.
• Soft parsing
Suatu perintah SQL dijalankan untuk pertama kali, dan ditemukan kecocokan
dengan struktur SQL lain di dalam shared pool. Kecocokan ini bisa merupakan
hasil dari eksekusi sebelumnya oleh user lain. Perintah SQL digunakan
kembali, yang memberikan keuntungan bagi performance.
Oleh karena parsing harus diusahakan agar seminimimal mungkin, maka
pengembang aplikasi harus merancang aplikasinya agar parsing untuk
perintah-perintah SQL cukup dilakukan satu kali dan dapat dieksekusi berkali-
kali. Pengembang aplikasi juga harus memastikan agar perintah SQL di dalam
shared pool dapat digunakan berkali-kali. Untuk melakukannya, gunakan bind
variable untuk merepresentasikan bagian dari query yang berubah-ubah dalam
setiap eksekusi. Apabila bind variable tidak digunakan, maka perintah SQL
39
kemungkinan besar tidak akan pernah digunakan kembali setelah dilakukan
parsing.
Menurut Day (2007, pp3-5),bind variable merupakan variabel yang
memungkinkan kita untuk menggunakan perintah SQL beberapa kali dengan
nilai-nilai yang berbeda, sehingga mengurangi frekuensi parse untuk suatu
perintah SQL. Jadi, untuk memastikan agar SQL digunakan kembali, gunakan
bind variable dan hindari menggunakan literal dalam perintah SQL.
1.2.4.4 Restrukturisasi SQL
Menurut Chan (2008, pp11-7), restrukturisasi SQL adalah penulisan ulang
suatu perintah SQL yang tidak efisien ke dalam bentuk lain yang lebih optimal. Menurut
Chan (2008, pp11-7), beberapa restrukturisasi SQL yang umum dilakukan, antara lain:
1. Menulis predikat menggunakan AND dan =
Untuk meningkatkan efisiensi SQL, sebaiknya gunakan equijoin. Perintah-
perintah yang melakukan equijoin pada kolom yang tidak dikenakan SQL
function akan lebih mudah untuk dilakukan tuning.
2. Menghindari penggunaan SQL function untuk kolom pada klausa WHERE
Penggunaan SQL function dengan suatu kolom tertentu sebagai parameternya
akan menyebabkan optimizer mengabaikan penggunaan index pada kolom
bersangkutan.
Hindari juga penggunaan konversi implisit. Sebagai contoh, misalkan kita
ingin menggunakan index pada kolom charcol dengan tipe data VARCHAR2,
namun klausa WHERE yang digunakan adalah seperti pada contoh berikut:
AND charcol= numexpr
40
Di mana numexpr merupakan ekspresi dengan tipe data NUMBER, maka
Oracle akan menerjemahkan ekspresi tersebut menjadi:
AND TO_NUMBER(charcol)= numexpr
3. Menulis perintah SQL yang terpisah untuk tugas-tugas yang spesifik
SQL bukan bahasa prosedural. Oleh karena itu, penggunaan sebuah SQL untuk
melakukan banyak tugas yang berbeda-beda memberikan hasil yang tidak
optimal. Apabila kita ingin menggunakan SQL untuk melakukan beberapa
tugas, maka hindari menggunakan satu perintah untuk melakukan banyak
tugas, melainkan pisahkan tugas-tugas tersebut ke dalam beberapa perintah
yang berbeda.
4. Penggunaan EXIST dan IN untuk subquery
Dalam kondisi-kondisi tertentu, penggunaan IN akan lebih baik dibandingkan
EXISTS. Apabila predikat yang selektif berada pada subquery, maka sebaiknya
gunakan IN. Apabila predikat yang selektif berada pada parent query, maka
gunakan EXISTS.
Pada situasi tertentu, Oracle dapat menulis ulang suatu subquery dengan klausa
IN untuk memanfaatkan selektivitas yang ditetapkan di dalam subquery.
Sebaliknya, penggunaan EXISTS bermanfaat apabila sebagian besar filter yang
selekif berada pada parent query. Hal ini memungkinkan predikat-predikat
selektif pada parent query diaplikasikan terlebih dahulu sebelum menyaring
baris-baris berdasarkan kriteria EXISTS.
5. Subquery unnesting
41
Seringkali, suatu query yang mengandung subquery yang kompleks dapat
ditingkatkan kinerjanya dengan mengubah subquery menjadi join.
Sementara itu, menurut Alapati (2009, p1066-p1067), selain menghindari
penggunaan SQL functions pada klausa WHERE dan penggunaan EXISTS dan IN untuk
subquery, beberapa panduan lain dalam melakukan restrukturisasi SQL, antara lain
sebagai berikut:
1. Menggunakan join yang tepat
Beberapa hal yang perlu diperhatikan dalam melakukan joining tabel secara
lebih efektif, antara lain:
• Menggunakan equijoin akan menghasilkan query yang lebih efisien. Jadi,
usahakan untuk menggunakan equijoin apabila memungkinkan.
• Melakukan operasi-operasi filtering lebih awal akan mengurangi jumlah
baris untuk dilakukan join pada langkah selanjutnya. Gunakan tabel yang
memiliki filter yang paling selektif sebagai driving table karena dengan
demikian, jumlah baris yang diteruskan ke langkah berikutnya akan lebih
sedikit.
• Lakukan join dengan urutan tabel dari yang menghasilkan baris paling
sedikit bagi langkah parent-nya.
2. Menggunakan perintah CASE
Dalam melakukan kalkulasi beberapa agregat dari tabel yang sama, hindari
menulis query yang terpisah untuk masing-masing agregat. Dengan query yang
terpisah, Oracle harus membaca tabel secara keseluruhan untuk setiap query.
Akan lebih efisien apabila Anda menggunakan perintah CASE karena perintah
42
ini memungkinkan Anda untuk mengkomputasi beberapa agregat dari tabel
yang bersangkutan dengan hanya sekali pembacaan pada tabel.
3. Meminimalisasi pengaksesan tabel
Salah satu moto utama dalam penulisan query adalah “batasi jumlah
pengaksesan data sesedikit mungkin”. Jadi, hindari SQL yang berulang kali
mengakses suatu tabel untuk kolom yang berbeda-beda.
1.2.5 Explain Plan
Menurut Bryla-Loney (2008, p250),explain plan adalah sebuah perintah yang
akan mengevaluasi execution path untuk sebuah query dan akan menempatkan hasil
evaluasinya ke dalam sebuah table di dalam database yang bernama PLAN_TABLE.
Sedangkan menurut Alapati (2009, p1090),explain plan adalah sebuah tool yang
membantu kita dalam melakukan SQL tuning denganmenyediakan execution plan dari
sebuah SQL statement. Menurut Smith (2010, p4), dalam white paper yang berjudul A
Toad for Oracle, setiap langkah plan memiliki hal-hal berikut:
1. Nomor langkah plan
2. Metode akses yang digunakan
Setiap execution plan step yang berbeda-beda merepresentasikan metode
pengaksesan data yang juga berbeda-beda. Metode pengaksesan data yang ada
tidak dapat secara langsung dikatakan baik atau buruk. Jika terdapat sebuah
index, maka penggunaan index akan mempercepat pengaksesan data daripada
melakukan full table scan. Meskipun demikian, jika memang tujuan sebuah
43
query adalah melakukan pembacaan semua data dari sebuah tabel, maka
penggunaan index menjadi kurang efisien.
3. Cost
Cost merupakan sebuah ukuranrelatif yang akan dihasilkanoleh Oracle untuk
merepresentasikan jumlah work yang diperlukan untuk menjalankan sebuah
langkah spesifik. Jumlah cost dari semua langkah yang ada merepresentasikan
cost yang dibutuhkan untuk mengeksekusi sebuah statement secara keseluruhan.
Pada umumnya, sebuah plan dengan cost yang lebih rendah merepresentasikan
suatu kinerja yang lebih baik daripada sebuah plan dengan cost yang lebih tinggi.
Meskipun demikian, sering juga ditemukan bahwa plan yang memiliki cost yang
tinggi memiliki kinerja yanglebih baik daripada plan dengan cost yang rendah.
Menurut Alapati (2009, p1093), hal-hal yang perlu diingat dalam membaca
explain plan, yaitu sebagai berikut:
• Setiap langkah dalam plan mengembalikan hasil dalam bentuk sekumpulan baris
kepada langkah parent.
• Bacalah plan dari dalam ke luar, dimulai dari baris yang memiliki indentasi
paling dalam.
• Apabila dua operasi berada pada level yang sama dalam hal indentasi, baca yang
paling atas terlebih dahulu.
1.2.6 SQL Trace dan TKPROF
Menurut Alapati (2009, p1099), SQL trace adalah utilitas Oracle yang
membantu kita dalam menelusuri perintah-perintah SQL. Sedangkan, TKPROF adalah
44
utilitas Oracle yang membantu kita untuk mengubah trace file yang dihasilkan oleh SQL
trace ke dalam bentuk yang dapat dibaca. Apabila EXPLAIN PLAN menampilkan
execution plan yang diharapkan, maka SQL trace memberikan hasil eksekusi aktual dari
sebuah query SQL. Sementara itu, menurut Chan (2008, pp20-8), TKPROFadalah suatu
tool yang memungkinkan kita untuk secara akurat mengakses efisiensi dari SQL
statements yang dijalankan oleh sebuah aplikasi.
1.2.6.1 Mengaktifkan SQL Trace
Menurut Alapati (2009, p1101), untuk menggunakan SQL Trace dan
TKPROF, hal pertama yang harus dilakukan adalah mengaktifkan fasilitas trace. Kita
dapat melakukannya pada level instance dengan menggunakan statement ALTER
SESSION atau DBMS_SESSION package. Berikut adalah statement yang digunakan
untuk mengaktifkan SQL trace:
SQL>ALTER SESSION SET sql_trace = true;
1.2.6.2 Menginterpretasikan Trace File dengan TKPROF
Menurut Alapati (2009, p1102), setelah kita telah mengaktifkan tracing untuk
sebuah session, semua perintah SQL yang dijalankan pada session tersebut akan di-trace
dan output berupa trace file akan disimpan dalam direktori (UDUMP). Nama file
memiliki format db_name_ora_nnnnn.trc, dimana nnnnn biasanya merupakan 5 digit
angka.
Utilitas TKPROF menggunakan trace files sebagai input besertadengan
parameter yang kita tentukan. Berikut ini adalah parameter TKPROF yang dapat kita
gunakan untuk mengatur format yang sesuai dengan keinginan kita:
1. FILENAME, yaitu trace file yang dibuat melalui SQL Trace.
45
2. EXPLAIN, yaitu EXPLAIN PLAN untuk SQL statements.
3. RECORD, membuat sebuah SQL script dengan semua perintah SQL non-
rekursif.
4. WAITS, merekam summary wait events.
5. SORT, menunjukkan data yang telah terurut berdasarkan item tertentu, seperti
PRSCPU (CPU time parsing), PRSELA (elapsed time parsing).
6. TABLE, mendefinisikan nama tabel dimana execution plans disimpan oleh
utilitas TKPROF.
7. SYS, melakukan enable dan disable perintah SQL yang dijalankan oleh SYS.
8. PRINT, hanya menunjukkan daftar sejumlah perintah SQL.
9. INSERT, membuat script yang menyimpan informasi trace dalam database.
Contoh: $tkprof finance_ora_16340.trc test.txt sys=no
explain=y
File test.txt berisi output dari SQL trace yang telah diformat dengan
menggunakan utilitas TKPROF.
1.2.6.3 Memeriksa File Output
Menurut Alapati (2009, p1103-p1104), setiap laporan TKPROF berisi
informasi untuk setiap perintah SQL yang dijalankan selama session di-trace. Informasi-
informasi tersebut, yaitu sebagai berikut:
1. CPU, merupakan total waktu penggunaan CPU dan dinyatakan dalam detik.
2. Elapsed,merupakan total waktu yang digunakan yang dinyatakan dalam detik.
3. Disk,menunjukkan total physical reads.
4. Query,menunjukkan jumlah consistent buffer gets.
46
5. Current,menunjukkan jumlah database block gets.
6. Rows,menunjukkan jumlah baris data yang diproses.
1.2.7 Toad® for Oracle
Menurut Indrajani (2009, p405), Toad® for Oracle adalah suatu program 3rd
party yang berfungsi untuk menjembatani rumitnya sintaks SQL menjadi tampilan GUI
(Graphical User Interface) yang diharapkan akan mempermudah proses transaksi
dengan Oracle database.
Toad®for Oracle memberikan banyak kemudahan dan memaksimalkan
produktivitas seorang DBA,business analyst, pengembang aplikasi, serta pengembang
PL/SQL. Toad®for Oracle meningkatkan produktivitas dengan semua fungsionalitas
yang kita butuhkan dalam membuat dan menjalankan queries, memodifikasi objek
database dan mengembangkan serta melakukan debugging terhadap SQL dan PL/SQL
code. Pekerjaan sehari-sehari seperti eksporting atau importing data, membandingkan
skema dan pembaharuan statistik, akan dipermudah dan dipercepat jika menggunakan
Toad®for Oracle.
Pada Toad®for Oracle, terdapat tab Query Viewer yang menampilkan query
yang sedang dijalankan, database mana yang diakses oleh query tersebut, serta waktu
eksekusi dari query.
1.2.8 SQL*Plus
Menurut Feuerstein dan Pribyl (2009, p25), SQL*Plus adalah utilitas yang
menyediakan sebuah command-line interpreter untuk SQL dan PL/SQL yang bertugas
47
untuk menerima statement dari pemakai dan mengirimnya ke Oracle server dan
menampilkan hasilnya. Sedangkan menurut Alapati (2009, p97), SQL*Plus adalah
utilitas yang umum digunakan untuk melakukan koneksi dan bekerja dengan Oracle
database. Setelah terdapat perangkat lunak SQL*Plus pada mesin client atau server, kita
dapat melakukan proses log in dan melakukan start SQL*Plus session.
1.2.9 HttpWatch Professional Edition
HttpWatch adalah perangkat lunak yang terintegrasi dengan Internet Explorer
dan Firefox yang digunakan untuk menunjukkan HTTP traffic saat kita mengakses
sebuah halaman web.
Beberapa manfaat dari penggunaan HttpWatch, antara lain sebagai berikut:
1. Mengatahui bagaimana suatu situs bekerja dan bagaimana situs tersebut
mengimplementasikan beberapa fitur.
2. Memeriksa informasi yang disediakan browser ketika mengunjungi situs.
3. Memeriksa kebutuhan performance tuning terhadap suatu situs web dengan
mengukur waktu page load.
4. Mempelajari bagaimana cara HTTP bekerja.
Pada HttpWatch, hasil pengukuran waktu dari semua request yang menyusun
suatu halaman web ditampilkan dalam bentuk horizontal bar berwarna yang ditampilkan
pada kolom Time Chart. Arti dari warna-warna horizontal bar tersebut, yaitu sebagai
berikut:
Tabel 1.6Tabel Deskripsi Warna pada Kolom Time Chart aplikasi HTTPWatch
Warna Timing Name Deskripsi
48
Blocked
Waktu Blockedmencakup waktu pre-processing
(seperti cache lookup) dan waktu yang digunakan
untuk menunggu ketersediaan koneksi jaringan. IE 7
dan Firefox 2 hanya akan membuat maksimal 2
koneksi jaringan bersamaan untuk setiap nama
host(seperti www.microsoft.com) dan akan
menampung request yang datang hingga sebuah
koneksi jaringan tersedia. Sering sekali waktu Blocked
menjadi faktor yang paling penting dalam mengunduh
gambar-gambar dalam sebuah halaman web.
DNS Lookup
DNS Lookup merupakan waktu yang diperlukan untuk
mengubah nama host (seperti www.google.com)
menjadi alamat IP numerik (seperti 216.239.59.99).
Connect
Connect merupakan waktu yang diperlukan untuk
membuat koneksi TCP ke web server (atau proxy). Jika
sebuah koneksi HTTPS yang aman digunakan, maka
waktu Connect akan memasukkan proses SSL
handshake.
Send
Send merupakan waktu yang digunakan untuk
mengirim pesan HTTP request ke server dan
tergantung pada jumlah data yang dikirim ke server.
Sebagai contohnya, waktu Send yang lama biasanya
49
diakibatkan proses unggah file menggunakan HTTP
POST.
Wait
Wait merupakan waktu idle yang digunakan untuk
menunggu responsemessage dari server. Nilai ini
mencakup penundaan karena latensi jaringan dan
waktu yang diperlukan untuk memproses request pada
webserver.
Receive
Receive merupakan waktu yang diperlukan untuk
membaca responsemessage dari server. Nilai ini
tergantung pada ukuran dari hasil yang dikembalikan,
bandwith jaringan, dan apakah kompresi HTTP
digunakan atau tidak.
Cache Read CacheRead merupakan waktu untuk membaca hasil
dari browser cache.