"ORACLE 튜닝 대상 조회"의 두 판 사이의 차이
DB CAFE
(새 문서: ##46 CPU를 많이 사용하는 세션의 식별 <source lang="sql"> SELECT A.SID , C.SERIAL# , A.VALUE , C.USERNAME , C.STATUS , C.PROGRAM FROM V$SE...) |
|||
1번째 줄: | 1번째 줄: | ||
− | |||
− | < | + | ##46 CPU를 많이 사용하는 세션의 식별 |
+ | |||
+ | | ||
+ | <syntaxhighlight lang="sql"> | ||
SELECT A.SID | SELECT A.SID | ||
16번째 줄: | 18번째 줄: | ||
, V$SESSION C | , V$SESSION C | ||
− | WHERE A.STATISTIC# = B.STATISTIC# AND A.SID = C.SID AND B.NAME = 'CPU used by this session' AND A.VALUE > 0 ORDER BY A.VALUE DESC; </ | + | WHERE A.STATISTIC# = B.STATISTIC# AND A.SID = C.SID AND B.NAME = 'CPU used by this session' AND A.VALUE > 0 ORDER BY A.VALUE DESC; </syntaxhighlight> |
# | # | ||
##47 Disk Read 가 많은 SQL문 찾기 | ##47 Disk Read 가 많은 SQL문 찾기 | ||
+ | | ||
+ | <syntaxhighlight lang="sql"> | ||
− | + | SELECT DISK_READS, SQL_TEXT FROM V$SQLAREA WHERE DISK_READS > 100 ORDER BY DISK_READS DESC; </syntaxhighlight> | |
− | |||
− | SELECT DISK_READS, SQL_TEXT FROM V$SQLAREA WHERE DISK_READS > 100 ORDER BY DISK_READS DESC; </ | ||
# | # | ||
##48 Rollback Segment를 사용하고 있는 SQL문 조회 | ##48 Rollback Segment를 사용하고 있는 SQL문 조회 | ||
− | + | | |
− | < | + | <syntaxhighlight lang="sql"> SELECT A.NAME |
, B.XACTS | , B.XACTS | ||
45번째 줄: | 47번째 줄: | ||
, V$TRANSACTION E | , V$TRANSACTION E | ||
− | WHERE A.USN = B.USN AND B.USN = E.XIDUSN AND C.TADDR = E.ADDR AND C.SQL_ADDRESS = D.ADDRESS AND C.SQL_HASH_VALUE = D.HASH_VALUE ORDER BY A.NAME, C.SID, D.PIECE; </ | + | WHERE A.USN = B.USN AND B.USN = E.XIDUSN AND C.TADDR = E.ADDR AND C.SQL_ADDRESS = D.ADDRESS AND C.SQL_HASH_VALUE = D.HASH_VALUE ORDER BY A.NAME, C.SID, D.PIECE; </syntaxhighlight> |
# | # | ||
##49 오래도록 수행되는 Full Table Scan를 모니터링 | ##49 오래도록 수행되는 Full Table Scan를 모니터링 | ||
− | + | | |
− | < | + | <syntaxhighlight lang="sql"> SELECT SID |
, SERIAL# | , SERIAL# | ||
58번째 줄: | 60번째 줄: | ||
, (SOFAR / TOTALWORK) * 100 AS "PERCENT_COMPLETE" | , (SOFAR / TOTALWORK) * 100 AS "PERCENT_COMPLETE" | ||
− | FROM V$SESSION_LONGOPS; </source> | + | FROM V$SESSION_LONGOPS; </syntaxhighlight> |
+ | |||
+ | ##56 CPU를 많이 사용하는 세션의 식별(SQL TEXT 조회) | ||
+ | |||
+ | |||
+ | <source lang="sql"> SELECT A.* | ||
+ | |||
+ | , (SELECT SS.SQL_TEXT | ||
+ | FROM V$SQLAREA SS | ||
+ | WHERE SS.ADDRESS = A.SQL_ADDRESS | ||
+ | AND ROWNUM <= 1 | ||
+ | ) AS SQL_TEST | ||
+ | |||
+ | FROM ( | ||
+ | |||
+ | SELECT A.SID | ||
+ | , C.SERIAL# | ||
+ | , A.VALUE | ||
+ | , C.USERNAME | ||
+ | , C.STATUS | ||
+ | , C.PROGRAM | ||
+ | , C.SQL_ADDRESS | ||
+ | , ROW_NUMBER() OVER (ORDER BY A.VALUE DESC) RN | ||
+ | FROM V$SESSTAT A | ||
+ | , V$STATNAME B | ||
+ | , V$SESSION C | ||
+ | WHERE A.STATISTIC# = B.STATISTIC# | ||
+ | AND A.SID = C.SID | ||
+ | AND B.NAME = 'CPU used by this session' | ||
+ | AND A.VALUE > 0 | ||
+ | AND C.STATUS = 'ACTIVE' | ||
+ | AND C.USERNAME IS NOT NULL | ||
+ | ) A | ||
+ | |||
+ | WHERE A.RN <= 10; </source> | ||
+ | |||
+ | # | ||
+ | ##57 현재 세션에서 10초이상 걸리는 쿼리 조회 (SELECT절) | ||
+ | |||
+ | |||
+ | <source lang="sql"> | ||
+ | |||
+ | SELECT ABS(SYSDATE - A.LAST_LOAD_TIME) * 24 * 60 * 60 AS SEC_TIEM, A.* FROM V$SQLAREA A | ||
+ | |||
+ | , V$SESSION B | ||
+ | |||
+ | WHERE A.SQL_TEXT LIKE '%SELECT%' AND A.ADDRESS = B.SQL_ADDRESS AND B.STATUS = 'ACTIVE' AND A.ELAPSED_TIME >= 10 * 1000000 -- 실행계획에서 10초 이상 걸리는 쿼리를 조회(실제 걸리는 시간은 아님.) AND A.PARSING_SCHEMA_NAME NOT IN ('SYS', 'SYSTEM', 'SYSMAN') AND B.USERNAME IS NOT NULL; </source> | ||
+ | |||
+ | # | ||
+ | ##58 현재 세션에서 PGA, UGA, CPU 사용량 세션별로 조회하는 쿼리 | ||
+ | |||
+ | |||
+ | <source lang="sql"> | ||
+ | |||
+ | SELECT B.USERNAME | ||
+ | |||
+ | , A.SID | ||
+ | , A.PGA_USAGE | ||
+ | , A.UGA_USAGE | ||
+ | , A.CPU_USAGE_SECONDS | ||
+ | , B.MACHINE | ||
+ | , B.PROGRAM | ||
+ | , B.MODULE | ||
+ | |||
+ | FROM (SELECT B.SID | ||
+ | |||
+ | , MAX(DECODE(C.NAME, 'session pga memory', TRUNC(B.VALUE / 1024 / 1024) || 'MB', 0)) AS PGA_USAGE | ||
+ | , MAX(DECODE(C.NAME, 'session uga memory', TRUNC(B.VALUE / 1024 / 1024) || 'MB', 0)) AS UGA_USAGE | ||
+ | , MAX(DECODE(C.NAME, 'CPU used by this session', (B.VALUE / 100) || ' Sec', 0)) AS CPU_USAGE_SECONDS | ||
+ | FROM V$SESSTAT B | ||
+ | , V$STATNAME C | ||
+ | WHERE B.STATISTIC# = C.STATISTIC# | ||
+ | GROUP BY B.SID) A | ||
+ | , V$SESSION B | ||
+ | |||
+ | WHERE B.SID = A.SID AND B.STATUS = 'ACTIVE' AND B.USERNAME IS NOT NULL; </source> |
2018년 8월 22일 (수) 14:29 판
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
- 46 CPU를 많이 사용하는 세션의 식별
<syntaxhighlight lang="sql">
SELECT A.SID
, C.SERIAL# , A.VALUE , C.USERNAME , C.STATUS , C.PROGRAM
FROM V$SESSTAT A
, V$STATNAME B , V$SESSION C
WHERE A.STATISTIC# = B.STATISTIC# AND A.SID = C.SID AND B.NAME = 'CPU used by this session' AND A.VALUE > 0 ORDER BY A.VALUE DESC; </syntaxhighlight>
-
- 47 Disk Read 가 많은 SQL문 찾기
<syntaxhighlight lang="sql">
SELECT DISK_READS, SQL_TEXT FROM V$SQLAREA WHERE DISK_READS > 100 ORDER BY DISK_READS DESC; </syntaxhighlight>
-
- 48 Rollback Segment를 사용하고 있는 SQL문 조회
<syntaxhighlight lang="sql"> SELECT A.NAME
, B.XACTS , C.SID , C.SERIAL# , C.USERNAME , D.SQL_TEXT
FROM V$ROLLNAME A
, V$ROLLSTAT B , V$SESSION C , V$SQLTEXT D , V$TRANSACTION E
WHERE A.USN = B.USN AND B.USN = E.XIDUSN AND C.TADDR = E.ADDR AND C.SQL_ADDRESS = D.ADDRESS AND C.SQL_HASH_VALUE = D.HASH_VALUE ORDER BY A.NAME, C.SID, D.PIECE; </syntaxhighlight>
-
- 49 오래도록 수행되는 Full Table Scan를 모니터링
<syntaxhighlight lang="sql"> SELECT SID
, SERIAL# , OPNAME , TO_CHAR(START_TIME, 'HH24:MI:SS') AS "START" , (SOFAR / TOTALWORK) * 100 AS "PERCENT_COMPLETE"
FROM V$SESSION_LONGOPS; </syntaxhighlight>
- 56 CPU를 많이 사용하는 세션의 식별(SQL TEXT 조회)
SELECT A.*
, (SELECT SS.SQL_TEXT
FROM V$SQLAREA SS
WHERE SS.ADDRESS = A.SQL_ADDRESS
AND ROWNUM <= 1
) AS SQL_TEST
FROM (
SELECT A.SID
, C.SERIAL#
, A.VALUE
, C.USERNAME
, C.STATUS
, C.PROGRAM
, C.SQL_ADDRESS
, ROW_NUMBER() OVER (ORDER BY A.VALUE DESC) RN
FROM V$SESSTAT A
, V$STATNAME B
, V$SESSION C
WHERE A.STATISTIC# = B.STATISTIC#
AND A.SID = C.SID
AND B.NAME = 'CPU used by this session'
AND A.VALUE > 0
AND C.STATUS = 'ACTIVE'
AND C.USERNAME IS NOT NULL
) A
WHERE A.RN <= 10;
-
- 57 현재 세션에서 10초이상 걸리는 쿼리 조회 (SELECT절)
SELECT ABS(SYSDATE - A.LAST_LOAD_TIME) * 24 * 60 * 60 AS SEC_TIEM, A.* FROM V$SQLAREA A
, V$SESSION B
WHERE A.SQL_TEXT LIKE '%SELECT%' AND A.ADDRESS = B.SQL_ADDRESS AND B.STATUS = 'ACTIVE' AND A.ELAPSED_TIME >= 10 * 1000000 -- 실행계획에서 10초 이상 걸리는 쿼리를 조회(실제 걸리는 시간은 아님.) AND A.PARSING_SCHEMA_NAME NOT IN ('SYS', 'SYSTEM', 'SYSMAN') AND B.USERNAME IS NOT NULL;
-
- 58 현재 세션에서 PGA, UGA, CPU 사용량 세션별로 조회하는 쿼리
SELECT B.USERNAME
, A.SID
, A.PGA_USAGE
, A.UGA_USAGE
, A.CPU_USAGE_SECONDS
, B.MACHINE
, B.PROGRAM
, B.MODULE
FROM (SELECT B.SID
, MAX(DECODE(C.NAME, 'session pga memory', TRUNC(B.VALUE / 1024 / 1024) || 'MB', 0)) AS PGA_USAGE
, MAX(DECODE(C.NAME, 'session uga memory', TRUNC(B.VALUE / 1024 / 1024) || 'MB', 0)) AS UGA_USAGE
, MAX(DECODE(C.NAME, 'CPU used by this session', (B.VALUE / 100) || ' Sec', 0)) AS CPU_USAGE_SECONDS
FROM V$SESSTAT B
, V$STATNAME C
WHERE B.STATISTIC# = C.STATISTIC#
GROUP BY B.SID) A
, V$SESSION B
WHERE B.SID = A.SID AND B.STATUS = 'ACTIVE' AND B.USERNAME IS NOT NULL;