Aplikasi lambat?

Aplikasi lambat?

Mungkin sudah banyak yang mengetahui hal ini… tetapi tidak mengapa kita ingat kembali dengan membaca artikel ini, karena mungkin bisa berguna bagi rekan-rekan yang belum mengetahuinya..

Banyak developer berprinsip “Asal cepat jadi”, karena hal ini biasanya optimasi terhadap query jarang sekali dilakukan, awalnya tidak akan terasa , tetapi semakin banyak data akan semakin berat pula aplikasi, siapa yang salah ? pasti DBA nya nih ? hahahaha….

DBA salah ? belum tentu dong…
coba lihat dulu query anda, apa sudah optimal ? kalau belum ya harus diubah dong…
wah butuh waktu lama ? ya iyalah masa ya iya dong…

nah sebelum hal itu terjadi tidak ada salahnya kita pelajari hal hal kecil berikut.

1. Jangan pernah gunakan cursor For Loop ketika membuat code untuk aplikasi multiuser production deployment

2. Jika ingin mendapatkan hanya satu baris data, gunakan implisit SELECT INTO query

3. Jika ingin mendapatkan lebih dari satu baris data, dan bisa diketahui jumlah maksimal data, gunakan BULK COLLECT dalam collection varray

4. Jika ingin mendapatkan lebih dari satu baris data, dan tidak bisa diketahui jumlah maksimal data, gunakan BULK COLLECT dengan statement FETCH

Contoh Fetch

SQL> declarecursor c1 is select object_name from t_all_objects;
2
3 rec1 c1%rowtype;
4 begin
5 open c1;
6 loop
7 fetch c1 into rec1;
8 exit when c1%notfound;
9
10 null;
11
12 end loop;
13 end;
14 /

Contoh Bulk Collect

SQL> declare
2 cursor c1 is select object_name from t_all_objects;
3 type c1_type is table of c1%rowtype;
4 rec1 c1_type;
5 begin
6 open c1;
7 loop
8 fetch c1 bulk collect into rec1 limit 200;
9 for i in 1..rec1.count loop
10 null;
11 end loop;
12 exit when c1%notfound;
13 end loop;
14
15
16 end;
17 /

Pada contoh Bulk Collect diatas, menggunakan limit = 200, jika data kita sejumlah 225 maka yang akan tampil adalah sejumlah 200 saja.

Kenapa hal ini bisa terjadi ? karena limit = 200 akan bernilai True jika data hasil query benar benar atau lebih dari 200, tetapi jika kurang dari 200 maka akan bernilai False.
Penyebab dari hal ini adalah adanya statement

exit when c1%notfound;

sehingga untuk menampilkan sisanya (25 data) maka script diatas perlu diubah menjadi

exit when rec1.count = 0;

Untuk BULK COLLECT sebaiknya juga dimanfaatkan dengan tepat, “right statement at the right position”.
Mengapa ? bukannya itu solusi supaya cepat ? benar, hal ini akan mempercepat proses query anda, tetapi yang perlu di perhatikan adalah BULK COLLECT akan memakan memory cukup besar, sehingga akan memberatkan memory PGA anda.

Semoga bermanfaat.

Regards
Ferry Setiawan

Source : Oracle Magazine, http://www.Oracle.com

Iklan

6 responses to “Aplikasi lambat?

  1. thank’s P.Ferry kadi diingatkan kembali : tarik ulur antara developer – dba – hardware – vendor ?, umumnya jalan yang praktis adalah nambah hardware (memory, processor, rpm harddisk) atau upgrade db (10g, 11g) atau 32 menjadi 64 bit, he…he….he….

  2. Nah itu memang jalan paling praktis pak…he he he…tapi rasanya bukan solusi yang bisa digunakan dalam jangka panjang …karena yang harus di upgrade bukan hanya dari segi hardware, tetapi penting juga untuk tuning aplikasinya, misalnya terlalu banyak looping…

    terkadang aplikasi tidak memanfaatkan feature yang ada di database, sehingga semua fungsi yang seharusnya tinggal pakai dari DB nya tidak digunakan, malah akhirnya membuat fungsi sendiri di Front End …

    Ini agak lucu sih menurut saya…hehehe…

  3. Menarik, berhati-hati dengan penggunaan cursor… harus cermat…
    Hindari juga membuat function atau stored procedure dengan keluaran Cursor, sebagai ganti bisa coba function table, sudah ada yang pernah mencoba?
    function table = function yang bisa di “select”, seperti table…
    select * from table (nama_function(‘paramater1’));
    hasilnya adalah rows, keuntungannya dibanding view adalah bisa membuat rule2x program, pengecekan dengan PL/SQL bisa diterapkan.
    Kadang-kadang kita perlu mengeluarkan rows dari sebuah tabel dengan kondisi yang cukup banyak, sehingga dengan where condition atau function2x seperti decode, masih belum mencukupi. Table function dapat menjadi alternatif, tanpa harus memberikan keluaran bertipe cursor yang lebih beresiko ke resource.

    Salam

  4. Salah satu event yang paling sering saya pakai di gambas adalah event keypress, dan biasanya kita memanfaatkan fungsi dari tombol enter di keyboard.

  5. sangat membantu pak untuk menambah pengetahuan, saya masih nyubi untuk future Oracle…

    Trimakasih ,
    salam Kenal,
    Riyas

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s