현재 오라클을 ODAC으로 열결시켜 테스트를 하는데 한 프로그램에서 MS_SQL과 오라클을
동시에 연결하여 사용하고 있습니다.
그런데 오라클은 읽기만 하는데 속도가 무척 늦게 뜨네요.
처음 사용해서 그런지 Session쪽과 OraQuery에서 속도와 관련된 옵션 또는 파라메터들이
어떤것이 있는지 사용해 보신 분 있으시면 조언 부탁드립니다.
참고로 해당되는 부분을 첨부합니다.
with ORAQuery1 do
begin
i_row := 0;
sglist2.rowcount := 0;
close;
SQL.CLEAR;
SQL.ADD(' select * from xxx ');
SQL.ADD(' where (DT = '''+t_Key+''')' );
// SQL.Add(' order by DT ');
OPEN;
while not EOF do
begin
sglist2.cells[0, i_row] := inttostr(i_row + 1);
sglist2.cells[1, i_row] := fieldbyname('a').asstring + '-' + fieldbyname('SEQ').asstring;
t_cust := fieldbyname('b').asstring;
t_prod := fieldbyname('c').asstring;
t_dept := fieldbyname('d').asstring;
t_no := fieldbyname('e').AsString;
t_kind := fieldbyname('f').AsString;
with ORAQuery2 do
begin
close;
SQL.Clear;
SQL.ADD('select * from x1 where (a = '''+t_cust+''') and (b = '''+t_dept+''')');
OPEN;
sglist2.cells[2, i_row] := fieldbyname('a').asstring;
end;
with ORAQuery2 do
begin
close;
SQL.Clear;
SQL.ADD('select * from x2 where (a = '''+t_cust+''') and (b ='''+t_dept+''') and (c = '''+t_prod+''')');
OPEN;
sglist2.cells[3, i_row] := fieldbyname('a').asstring;
end;
with ORAQuery2 do
begin
close;
SQL.Clear;
SQL.ADD('select * from x3 where DT = ('''+t_key+''') and (a ='''+t_no+''') and (b = '''+t_kind+''')');
OPEN;
sglist2.cells[4, i_row] := fieldbyname('a').asstring;
end;
with ORAQuery2 do
begin
close;
SQL.Clear;
SQL.ADD('select * from x4 where a = ('''+t_mst+''')');
OPEN;
sglist2.cells[8, i_row] := fieldbyname('a').asstring;
sglist2.cells[9, i_row] := fieldbyname('b').asstring;
end;
inc(i_row);
sglist2.rowcount := sglist2.rowcount + 1;
next;
end;
sglist2.rowcount := sglist2.rowcount - 1;
end;
이런것은 SQL-Tunnig에 속하는 것으로 님께서 작성하신 중복 Query문은
1개의 SQL문장으로 수정할 수 있습니다.
왜냐하면, key를 가진 xxx 테이블의 자료와 x1,x2,x3,x4등등의 자료와 비교를 하기 때문이죠..
즉, master와 detail구조와 같은 것으로..
이것은 한개의 SQL구문으로 변환할 수 있다는 결론이 나옵니다..
이렇게 했을 경우..
님이 처리해 놓은 구문들의 결과값이 나오는 반응시간이 1/10 보다 더 줄어들 것이라 판단되네요..
님께서는 SQL-Tunning을 연구하심이 좋을 것으로 보입니다..
저도 실무에서 SQL-Tunning으로 개선을 봤던 것 중의하나가..
집계부분이었는데..
결론만 말씀드리면, 전임자가 결과값이 나오는데 약 20~25분정도 걸리던 것을..
8~12초정도까지 줄여봤던 경험이 있습니다..
물론, 결과값까지 나오는 시간이 분단위였던것을 초단위로 바꿨던적은 수도 없이 많지만..
예를들어 그렇다는 것이니까.. 오해는 마십시오..
사용자(Client)가 조회 후 결과값까지 나오는 시간이 짧으면 짧을수록 그 직원은
업무적으로 빠른 대처가 생기므로 이는 회사의 경쟁력을 높이고
보이지 않는 무한자산을 끌어올리는 업무적 특성을 가지고 있습니다.. ^^;
그래서, 어플리케이션 개발자나 DB를 다루는 사람은 공부를 많이하는것이
회사의 능력을 올리는 일인것이겠죠..
이거 쓸데 없는 곳으로 말이 셌습니다.. 죄송합니다.. (--)(__)
각설하구요..
결과적으로
님의 경우는 Connection과 Parsing,Execution이 빈번하게 발생하게 하여
서버의 성능을 저하시키는 요인을 가지고 있는
Application단위의 가장 큰 문제점이라고 할 수 있습니다.
이와같이 여러개의 SQL문장을 1개의 문장으로 변환하는 것이 Tunning작업의 정석이 되겠죠..
우쨌든, SQL-Tunning을 해 보심이 정답일것 같습니다.
다시 한 번, 최용일님께 한표!!