쿼리 실행계획 조언 부탁드립니다 0 15 767

by oratong [SQL Query] [2020.02.06 13:19:42]



안녕하세요.

운영중인 시스템에서 다음 sql에 대해서 튜닝의 여지가 없을까요.

부득이하게 스크립트를 올릴수 없는 환경이라 스크린샷으로 대신합니다.

TT_06_837332_L테이블은 1억5천만건

인덱스는 TT_06_837332_L테이블은 logseq 컬럼에만 한개

TT_06_USER_COUNT 는 146건

인덱스는 where조건에 해당하는 인덱스 1건

sql안에서 중간 서브쿼리의 이퀄 조건에는 61건이고
!=는 나머지 1억 5천만건 입니다

by 부쉬맨 [2020.02.06 13:37:01]

not in 조건을 not exists조건으로 변경하시고

select /*+ no_merge */ 힌트

줘보세요.

 


by 임상준 [2020.02.06 14:03:50]

첫 번째와 세 번째 인라인뷰 차이가 저 유저카운트 테이블에 없는 애들 체크하는거 뿐인가요?


by jkson [2020.02.06 14:04:36]
-- 숫자가 길어서 대충 999
-- 계산식도 길어서 그냥 '계산식'으로 기입
SELECT COUNT(CASE LOGSEQ WHEN 999 THEN 1 END) AS COUNTMAXMAL
     , MIN(CASE LOGSEQ WHEN 999 THEN NULL ELSE LOGSEQ END) AS MINLOGSEQ
     , MAX(CASE LOGSEQ WHEN 999 THEN NULL ELSE LOGSEQ END) AS MAXLOGSEQ
     , COUNT(CASE LOGSEQ WHEN 999 THEN NULL ELSE 1 END) AS COUNTLOGSEQ
     , MIN(CASE WHEN NVL(LOGSEQ,0) != 999 AND NOT EXISTS(SELECT 1 FROM CCADMIN.TT_06_USER_COUNT B WHERE B.USERCOUNT = A.FT_CASHEGROUP AND B.CASHEGROUP = 계산식) THEN LOGSEQ END)--LOGSEQ가 NOT NULL 속성이라면 NVL 불필요
     , MAX(CASE WHEN NVL(LOGSEQ,0) != 999 AND NOT EXISTS(SELECT 1 FROM CCADMIN.TT_06_USER_COUNT B WHERE B.USERCOUNT = A.FT_CASHEGROUP AND B.CASHEGROUP = 계산식) THEN LOGSEQ END)
  FROM CCADMIN.TT_06_837332_L A

by oratong [2020.02.06 14:12:15]

모두 답변 정말 감사드립니다.

임상준님 예 그렇습니다.

해당 쿼리는 오라클  timesten에서 자동으로 생성 되는 sql이라 변경이 불가 합니다...


by jkson [2020.02.06 14:18:13]

가장 중요한 사항을 안 적어주셨네요. 변경 불가한데 어떻게 튜닝을 하시려고요.

쿼리가 고정이지 않고 동적으로 자꾸 바뀌는 쿼리가 생성된다면 방법 없을 것 같고요.

저 쿼리로 고정이라면.. 아래 방법을 사용할 수 있겠습니다.

SQL Profile을 통한 튜닝

http://www.gurubee.net/lecture/2770


by oratong [2020.02.06 14:32:45]

jkson 쿼리가 동적으로 바뀐다고 말한적 없는데요.

쿼리를 변경 불가해도 out line변경해서 spm등으로도 실행계획 튜닝은 얼마든지 가능합니다.


by jkson [2020.02.06 14:35:09]

저는 timesten이라는 것을 모르는 상태고 자동으로 생성된다고 말씀하시니

동적쿼리인지 고정쿼리인지 제가 알 수 있는 방법이 있나요?

그래서 동적쿼리라면 방법 없을 것 같고 고정쿼리라면 프로파일 통해서 튜닝하시라고 링크 남긴 거고요.

outline 변경해서 튜닝가능한 걸 아시는 거라면 질문을 자세히 해주셨어야지요.

여러 사람 시간 낭비하게 하시지 마시고요.


by oratong [2020.02.06 14:38:35]

jkson 부족하게 올린 부분이 있다고 님에게 혼나야 하나요?

쓸데없이 지적질 하지 마시고 조용히 계세요 그냥


by jkson [2020.02.06 14:45:58]

여기 계산 많은 분들이 질문 올리면 개인 시간 투자해서 답변 작성합니다.

저도 업무시간에 잠시 시간 나면 답변 달고요.

첨부터 상황을 자세히 적어주셨으면 많은 분들이 시간 낭비할 필요도 없었습니다.

제일 중요한 부분(쿼리 변경 불가)은 빼고 질문 올리셨으니

적어주신 정보로만 쿼리 작성해드렸던 거고요.

댓글로 쿼리 불가라는 정보를 뒤늦게 알려주셨으니

저는 동적일 때는 방법 없고 고정일 때는 방법 있다고 알려드렸는데

거기에다가 동적으로 바뀐다고 말한 적 없다느니 그렇게 적어놓으시니 드린 말씀입니다.

입장 바꿔놓고 생각해보시고요.

더 이상 댓글 달지 않겠습니다.

기분 아주 드럽네요.


by oratong [2020.02.06 14:50:50]

jkson

질문에 대해서 timsten에서 자동으로 생성 된다고 했습니다.

그리고 해당 쿼리를 찍어서 이곳에서 조언을 구하는것이구요 자동으로 변경되는거면 얘기의 대상이 아니겠죠?

설명 부족은 인정 하는데 

왜 본인 혼자 오해 하신걸로 뭘 하셨어야죠 어쩌죠 이런말 하실 시간에 그냥 서로 물어보고 답하고 그랬을거 같은데요?


by 임상준 [2020.02.06 15:15:59]

저도 테이블 엑세스 한번만 하는 방향으로 답변 드리려 했는데 쿼리 변경이 불가능하다고 하니.. 대부분 원하는 답변이 한번에 나오지 않는 이유가 질문이 모호해서죠. 물어보고 답하고 길게 댓글 쓰면서 다른사람들이 글 쓰신 분에게 시간 투자 하는게 당연한 건 아닌 것 같네요.

실행계획 조정하는 방법까지 잘 아시니 튜닝도 저보다 더 잘 하시겠군요;; 화이팅 하세요.


by DarkBee [2020.02.06 15:30:47]

 

jkson // 시간 낭비 노노


by oratong [2020.02.06 17:12:16]

by 임상준님

말씀 감사드립니다.

네 맞습니다. 대부분이 질문에 잘못이 있지요.

저역시 위에도 말씀 드렸지만 인정하는 부분입니다.

만약 jkson 이분이 변경안되는데 튜닝을 어떻게 하려고 하냐고 단정적으로 얘기 하지 않았다면 저역시 먼저 정보 부족해서 미안하다고 답했을겁니다. 그게 매너죠 알고있습니다.

단정적으로 말하시니까 저역시 sql변경 방법 말고도 다른방법도 있다고 단정적으로 답이 나간거구요.

여러사람 시간 낭비하게 하지 말라는 말을 듣고는 기분이 정말 더럽게 된건 저역시 마찬가지입니다.

서로 얘기를 얘기를 나누다가 부족한 부분이 있으면 아 이런게 부족했네요 먼저 말해주셨으면 좋았을텐데. 이런건 어떤가요 라는 얘기의 흐름이 이렇게 힘든가 싶습니다.

서로 부족한 부분 나누자고 만든 장소 아닌가요? 저라면 커뮤니티에서 상대한테 어떤 상황에서도 사람 시간 낭비시키지말라는 말은 안하겠습니다.

그리고 아무쪼록 그런식의 말을 할생각이 조금이라도 있다면 답글은 안다는게 도와주는거라거 생각합니다.

저도 더이상 글을 쓰지는 않을거 같네요.


by jkson [2020.02.06 20:12:12]

변경 안 되는데 튜닝하려 하냐는 의미로 단정적으로 이야기한 것 아닙니다.

만약 그렇다면 프로파일을 통한 튜닝방법을 설명하지도 않았을 것이고요.

어떠한 것도 단정적으로 이야기한 것 없습니다.

설명이 없으니 SQL변경 안 되는 상황에서 프로파일을 통한 튜닝에 대한 질문인지,

만약 그러한 질문이라면 방법에 대한 질문인지 어떤 건지에 대해 여쭤본 거고요.

제가 아는 범위 안에서 동적인 쿼리와 고정 쿼리일 때를 나눠서 설명 드렸는데

동적 쿼리는 이야기한 적도 없는데 답변한다는 식으로 이야기하시니

기분이 나빴던 것이고요.

시간 내서 답글 달았는데 그런식으로 댓글 다시니 저 역시 

시간낭비하게 하지 말라고 무례하게 답글 달았습니다.

이점 죄송합니다.

온라인 상에서 댓글로 이야기 나누어보았자 서로 자기 주장만 하고 기분만 상할 뿐

해결점을 찾기 어려워서 되도록 논쟁이 생기면 답글을 달지 않습니다만,

제가 잘못한 부분은 죄송하다 말씀드리는 게 나을 것 같아 답글 답니다.


by 우리집아찌 [2020.02.07 09:44:51]

배우러 오신분의 자세는 아닌듯해 보입니다.

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입