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.
8
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 perhitunganperhitungan 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 kolomkolom 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 nonnull 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 select last_name from employees where salary < (select avg(salary) from employees);
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 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
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
20 select (select max(salary) from employees) * (select max(commission_pct) from employee) from dual;
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 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);
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 barisbaris 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.
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 DECLARE name VARCHAR2(30); BEGIN SELECT employee_name INTO name FROM employees WHERE emp_id=99999; END; /
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
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.
• 1.2.4.1
Pertimbangkan partitioning, apabila diperlukan. 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 kolomkolom yang ditunjuk tidak akan digunakan. 1.2.4.2 1.2.4.2.1
Partitioning 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 masingmasing 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 berkalikali. 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. Perintahperintah 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 nonrekursif. 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. Informasiinformasi 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
Deskripsi
Timing Name
48
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 Blocked 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 merupakan waktu yang diperlukan untuk DNS Lookup
mengubah nama host (seperti www.google.com) menjadi alamat IP numerik (seperti 216.239.59.99). Connect merupakan waktu yang diperlukan untuk membuat koneksi TCP ke web server (atau proxy). Jika
Connect
sebuah koneksi HTTPS yang aman digunakan, maka waktu
Connect
akan
memasukkan
proses
SSL
handshake. Send
merupakan
waktu
yang
digunakan
untuk
mengirim pesan HTTP request ke server dan Send tergantung pada jumlah data yang dikirim ke server. Sebagai contohnya, waktu Send yang lama biasanya
49
diakibatkan proses unggah file menggunakan HTTP POST. Wait merupakan waktu idle yang digunakan untuk menunggu responsemessage dari server. Nilai ini Wait
mencakup penundaan karena latensi jaringan dan waktu yang diperlukan untuk memproses request pada webserver. Receive merupakan waktu yang diperlukan untuk membaca responsemessage dari server. Nilai ini
Receive
tergantung pada ukuran dari hasil yang dikembalikan, bandwith jaringan, dan apakah kompresi HTTP digunakan atau tidak. CacheRead merupakan waktu untuk membaca hasil
Cache Read dari browser cache.