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 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 computernotebook,
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
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 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.
  
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
END;
/
SELECT employee_name INTO name
FROM employees
WHERE emp_id=99999;
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.
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  insertupdate,  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 
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
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.