데이타베이스 Stored Procedure 성능 관련..

argonne의 이미지

안녕하세요, DB 초보 프로그래머입니다.
현재 DB2를 이용하여 Stored procedure 개발 중인데 기존 프로그램을 분석하고 성능 향상을 위해서 작업을 해야 되는데 어떤 부분부터 시작해야 막막해서요..

기존 코드의 대략적인 형태는 다음과 같습니다.

1) 하나의 Stored Procedure내에 대략 16개의 Cursor를 사용하고 있습니다.
2) Stored procedure가 엄청난 라인으로 구성되어 있습니다. 5천라인이 넘게 작성되어 있네요.. ㅠㅠ
그런데 대부분의 코드 내용은 if-else로 구성되고 있고 각 컨디션내에서 수행되는 작업은 또 엄청나게 길게 작성되어 있습니다.

예를 들면,

if (condition A) { 
  if (condition A-1) { 
     if (condition A-1-a) { ... }
     else if (condition A-1-b) { ... }
     ...
  }
  else if (condition A-2) { ... }
  ...  
}
else if (condition B) {
 ...}
}

다행이 특이한 점은 condition A에서의 전체 작업은 condition B에서의 전체 작업과 유사한 형태로 로직이 구성되어 있습니다.
다른 부분도 마찬가지구요. 예를 들며, condition A-1, condtion A-2, condition A-3.. 등이 내부적으로 약간만 틀리고 유사한 로직들로 구성되어 있습니다.
Codition B-1, condition B-2, .. 등도 약간만 틀리고 수행되는 작업은 유사하구요..

너무 대략적으로 설명드린 것 같긴 하지만 원론적인 성능 향상 방법부터 구체적인 향상 방법까지 아시는 내용 공유해주시면 많은 도움이 될 것 같습니다.

그럼 ~~~~

익명 사용자의 이미지

저장 procedure 5천 줄이라니....

academic의 이미지

1.

일반적으론 커서를 줄이는 것만으로도 성능 향상이 됩니다.

1% 정도의 예외는 있습니다만.

커서를 없애는 방향으로 고쳐보시죠.

2.

condition A-1, condtion A-2, condition A-3.. 등이 내부적으로 약간만 틀리고 유사한 로직들이라고 하셨는데...

동적 SQL문을 사용하는 것도 고려해보시죠. 코드가 상당히 짧아질 겁니다.

원하지 않는 코드가 실행될 가능성 때문에 저도 동적 SQL문은 선호하지 않습니다만,

유효적절하게 쓴다면 좋은 방법입니다.

아니면 비슷한 로직을 따로 모아 별도의 프로시저를 만들고 이를 호출하게끔 하는 것도 좋을 것 같습니다.

----
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.