6.30.2004
SQL perkasa
Judulnya mungkin agak aneh. SQL Perkasa. SQL nya masih Structured Query Language. Perkasanya karena bisa matiin DB server. Matiin Server ? Ya. Matiin Server. Bukan mesinnya tapi program DB Server-nya.
Beberapa bulan belakangan ini saya sedang terlibat dalam pekerjaan software development dengan menggunakan Delphi sebagai front end dan DB2 sebagai back end. Untuk Development DB2 dipasang diatas Linux sedangkan untuk deployment diatas AIX (Mesin IBM).
Ketika program yang sudah selesai dibuat dan ditest di atas AIX, tiba-tiba DB Servernya mati. Karena waktu itu secara bersamaan programmer lain sedang nge-test proses yang melibatkan ratusan ribu record, diduga penyebabnya berhubungan sama proses itu tadi.
Tapi setelah beberapa kali Databasenya mati, akhirnya ketahuan juga bahwa penyebabnya adalah bagian program yang menjalankan suatu perintah SQL.
Karena sistem-nya rada complicated SQL-nya digenerate oleh program. Jadi mungkin rada-rada aneh. SQL-nya seperti dibawah ini (karena rada sensitif, nama field dirubah dari aslinya).
Ternyata yang jadi masalah adalah order by. Di bagian atas ada KD_INI, KD_APA, KD_XY dan KD_SUBXY yang di-order lagi di bagian bawah. Setelah KD_INI dan teman-temannya tadi saya buang dari order by di bagian atas, akhirnya SQL tidak lagi "perkasa".
Setelah diskusi sama temen-temen programmer lain, sebelumnya memang pernah ada beberapa kali DB Server mati sendiri. Tapi tidak ketahuan penyebabnya. Tapi sudah beberapa bulan belakangan tidak muncul lagi. Dugaan kami akhirnya ya si perkasa tadi yang jadi gara-gara.
Beberapa bulan belakangan ini saya sedang terlibat dalam pekerjaan software development dengan menggunakan Delphi sebagai front end dan DB2 sebagai back end. Untuk Development DB2 dipasang diatas Linux sedangkan untuk deployment diatas AIX (Mesin IBM).
Ketika program yang sudah selesai dibuat dan ditest di atas AIX, tiba-tiba DB Servernya mati. Karena waktu itu secara bersamaan programmer lain sedang nge-test proses yang melibatkan ratusan ribu record, diduga penyebabnya berhubungan sama proses itu tadi.
Tapi setelah beberapa kali Databasenya mati, akhirnya ketahuan juga bahwa penyebabnya adalah bagian program yang menjalankan suatu perintah SQL.
Karena sistem-nya rada complicated SQL-nya digenerate oleh program. Jadi mungkin rada-rada aneh. SQL-nya seperti dibawah ini (karena rada sensitif, nama field dirubah dari aslinya).
select a.UR_ITU, '' as KD_ANU, '' as UR_ANU, TMP2.KD_ITU, TMP1.SATUAN,
TMP1.KD_INI, TMP1.KD_APA, TMP1.KD_XY, TMP1.KD_SUBXY, TMP1.UR_SUBXY,
TMP1.KD2, TMP1.UR2, TMP1.KD3, TMP1.UR3, TMP1.KD4, TMP1.UR4,
TMP2.DATA1, TMP2.DATA2, TMP2.DATA3, TMP2.DATA4, TMP2.DATA5, TMP2.DATA6
from
table( select KD_INI, KD_APA, KD_XY, KD_SUBXY, UR_SUBXY, 'SET' as SATUAN,
'01' as KD2, 'MESIN' as UR2, '00' as KD3, '00' as UR3, '00' as KD4, '00' as UR4
from TABEL_SUBXY
where KD_INI = '3' and KD_APA = '5'
and KD_XY = '15'
and ( ( KD_SUBXY between '0009' and '0013' ) )
order by KD2, KD3, KD4, KD_INI, KD_APA, KD_XY, KD_SUBXY ) as TMP1,
table( select kd_ITU, kd_INI, kd_APA, kd_XY, kd_subXY, sum(DATA1) as DATA1,
sum(DATA2) as DATA2, sum(DATA3) as DATA3, sum(DATA4) as DATA4,
sum(DATA5) as DATA5, sum(DATA6) as DATA6
from DATA_ANU
where kd_DDD = '0'
and tangg ='2005'
group by kd_ITU, kd_INI, kd_APA, kd_XY, kd_subXY ) as TMP2,
TABEL_PROGRAM a
where TMP1.KD_INI=TMP2.KD_INI and TMP1.KD_APA=TMP2.KD_APA
and TMP1.KD_XY = TMP2.KD_XY and TMP1.KD_SUBXY=TMP2.KD_SUBXY
and TMP2.KD_ITU = a.KD_ITU
order by TMP2.KD_ITU, TMP1.KD_INI, TMP1.KD_APA, TMP1.KD_XY, TMP1.KD_SUBXY
Ternyata yang jadi masalah adalah order by. Di bagian atas ada KD_INI, KD_APA, KD_XY dan KD_SUBXY yang di-order lagi di bagian bawah. Setelah KD_INI dan teman-temannya tadi saya buang dari order by di bagian atas, akhirnya SQL tidak lagi "perkasa".
Setelah diskusi sama temen-temen programmer lain, sebelumnya memang pernah ada beberapa kali DB Server mati sendiri. Tapi tidak ketahuan penyebabnya. Tapi sudah beberapa bulan belakangan tidak muncul lagi. Dugaan kami akhirnya ya si perkasa tadi yang jadi gara-gara.