[요청내용]

  • 2개의 아이템코드의 4년치 리뷰를 전부 뽑아라

[WorkLog]

  • 불필요한 필드제거 & 주석입력
    • 조회쿼리 중 불필요한 필드에 서브쿼리 오라클 펑션이 조회쿼리 속도를 늦출거라 생각해서 뽑을 데이터 필드만 두고 다 제거함
    • 컬럼명으로 필드 역할 구분이 힘들어서 필드에 주석을 전부 달았다.
  • 조회 후 암호화필드 확인
    • 요청받은 필드 중 3~4의 필드가 암호화 되어있음을 확인
    • 복호화할 수 있는 코드가 있는 지 살펴봄
    • 암호화 되지 않은 허점있는 Table이 있는지 살펴봄
    • => 복호화 할수 있는 방법도 암호화 되어있지 않은 Table도 없다는 것을 확인 (답변: 황M)
      • 1시간 이상 날렸다.
  • 기본적인 Tunnig
    • 현재 요청 받은 내용에선 의미없는 CASE/NVL제거
    • 조인 순서 변경 (데이터 많은건 -> 데이터 적은건)
    • Where 조건 순서 변경
      • => ORCLE에서 From의 Table 혹은 조건절의 순서가 속도에 영향을 미치는 지 확인 필요
  • 복잡한 Tunnig
    • Try1. 의미없는 Outer join 제거 시도
      • Inner Join으로 바꿨을 때 데이터 건수가 미세하게(갯수로 봤을때 0.2~0.3 %) 맞지 않음
      • 각 Table에 역할이 뭔지 정확히 몰라서 데이터 갯수가 틀리면 마음대로 바꾸지도 못함
    • Index 걸려있나 Check
      • Try1 데이터 조회의 주가 되는 Table들만 Index가 걸려있나 확인
        • => 걸려있을 만한 거는 다 걸려 있음
        • => 걸어야 하나 판단이 안되는 부분이 있음 
          • 필드가 뭔 역할인지 파악이 안됨
  • 데이터 조회 속도&데이터 조회 건수 확인 
    • 느리긴 하지만 일회성 쿼리이기 때문에 대충 시간걸려서 뽑자고 판단
      • =>이게 미스였다(나중에 안 사실)
        • 내가 궁극적으로 할일은 DB Tool을 이용해서 Data를 추출하는 것 데이터를 추출하게 되면 예를 들어 총데이터가 만건이고 한번에 조회되는게 500건이면 한번에 조회해서 CSV에 쓰는 것이 아니라 500건 조회해서 CSV에 쓰고 또 조회하고를 반복 즉, 5분 정도 걸리는 쿼리를 20번 돌려야 함
  • 쿼리의 속도자체를 빠르게 할 방법이 필요하다
    • 방법을 못찾아서 도움을 받음(황M)
    • 도움 내용 : where 조건에서 아이템를 통해서 조회하는 것이 아닌 아이템 코드를 통해 상품코드 조회 후 in절에 넣어서 쓰기
      • notepad++ 정규식 표현 & 바꾸기 이용
    • 이걸 어떻게 알았을까...?
      • 시스템에서 아이템코드로 검색하는 것이 일반적이지 않음 상품코드로 검색하는 게 일반적임 아이템코드 필드가 추가된 인덱스들 보다 상품코드가 추가된 인덱스들의 우선순위가 높음 쿼리플랜에서도 메인테이블 조회에 cost가 많이 먹음
      • 결론은 직관적으로...경험적으로...?
  • 최M에게 Query전달 & 데이터 추출 요청 
    • 최M 님은 암호화된 테이블 조회권한이 있음
    • DataGrip 으로 뽑은 CSV로 파일 전달받음 
      • 한글 다 깨짐
      • 내용이 줄이 바뀌며 잘려서 나옴
    • Try1. 메모장의 Charset / Notepad++ 정규식 교체 / Excel의 Data불러오기
      • 기타등등 인터넷에 나와있는거 전부 시도했지만 데이터가 깔끔하게 안나옴
        • 10만건의 데이터를 전부 다 확인하고 하나하나 고치는 거 불가
        • 쿼리 다시 뽑는 요청은 죄송스러움 
          • 분명 DataGrip에서 CSV 추출 옵션이 있을 거라 생각함
    • Try2. DataGrip도 Intelli J도 Jetbrain 회사 거니까 뭔가 될거라 생각하고 구글링
      • IntelliJ에서 CSV 파일열고 -> Edit>Edit as Table -> Export 
        • 데이터 이쁘게 잘 뽑힘

[Todo]

  • 각 Table 및 필드가 이 무슨 역할을 하는 지 그리고 어떤 필드가 중요한지 대충은 알고 있어야 함
  • Query plan을 보고 튜닝하는 법
  • 서비스단 쿼리 튜닝
  • ERD 찾아봐야함 => 

 

[느낀점]

  • 업무와 Table을 정확히 모르니까 이런 한시간짜리 잡무를 8시간을 하고 있네  다음부터는 시간단축하자!

 

+ Recent posts