Oracle 성능 최적화 SQL

7200 단어
높은 리소스를 사용하는 SQL
사용자가 SQL을 실행하는 것과 관련된 동적 보기는 v$sql, v$sqlarea, v$sqltext, v$sqlplan, v$sqlstats 등.v$sql에는 모든 사용자가 실행하는 모든 SQL 정보가 포함되어 있습니다. 사용자, 세션에 따라 같은 SQL을 실행하는 의미, 실행 계획이 다를 수 있습니다. 이 SQL 글자의 값은 같습니다(같은 sql id를 가지고 있음), 다른child 를 통해number로 구분합니다.v$sqlarea에는 SQL 문장의 글씨체 정보만 포함되어 있으며, 같은 SQL 문장은 실행 세션, 의미, 실행 계획에 따라 다르고, 같은 SQL 문장은 v$sqlara에서 한 줄로만 표시됩니다.v$sqltext는 여러 개의piece 형식으로 SQL 문장의 전체 텍스트를 제공합니다. 필드address와hash 를 통해value의 결합은 유일하게 SQL 문장을 표시할 수 있습니다.v$sql_plan은address,hash 를 통해 SQL 문장의 실행 계획 정보를 포함합니다value、 child_number 세 필드 (v$sql와 연결할 수 있음) 는 SQL 문장의 실행 계획을 유일하게 표시합니다.v$sqlstats는 SQL 문장의 성능 통계 정보를 포함하고 sql 을 통해id와planhash_value는 SQL 문의 성능 통계를 고유하게 식별합니다.v$sqlstats 보기의 필드는 v$sql와 v$sqlarea 필드의 서브집합입니다. 즉, 보기의 내용은 그것들에서 나온 것이지만, v$sqlstats 보기의 데이터는 v$sql와 v$sqlarea보다 오래 저장됩니다.
각종 자원 소모에 따라 top SQL을 찾아야 할 때, 서로 다른 성능 통계 필드에 따라 v$sql를 조회할 수 있습니다. 이 보기는 사용자가 데이터베이스에 제출한 SQL 문장과 텍스트를 포함할 뿐만 아니라, 이 문장의 성능 통계 데이터도 포함합니다.표13.1은 자원 소모와 v$sql 보기와 관련된 필드에 대한 설명을 제공합니다.
자원 소모
필드 및 설명
수행대가cost
optimizer_cost 최적화기가 주는 실행 대가
CPU 사용량
cpu_time、elapsed_time CPU가 실행될 때마다 소요되는 시간 = cputime/executions 매번 실행에 소모되는 시간 = elapsedtime/executions
I/O 소비
disk_reads에서 실행되는 디스크 읽기 횟수 = diskreads/executions
메모리 소모
buffer_gets、sharable_mem(shared pool 소모) 매번 실행되는 캐시 소모 = buffergets/executions
문장 해석 소모
parse_calls 이 문장 (하드) 해석 횟수
정렬 소모
sorts
레코드 검색
rows_processed、fetches
top SQL 쿼리 예
(1) CPU 시간이 가장 많이 소요되는 처음 10개의 SQL 문을 질의합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SQL> SELECT *
  2    FROM (SELECT sql_id,
  3                 child_number
  4            FROM v$sql
  5           ORDER BY cpu_time DESC)
  6   WHERE rownum <= 10;
SQL_ID        CHILD_NUMBER
------------- ------------
f5mkwycvxw09f            0
d0knq1hqbsunv            0
5khbzgpncr2an            0
0v9u9pcwk93xq            0
65p9vk5a6khar            0
a1vukjd565f1p            0
9ur5wdahzm0r8            0
7ht68a765a5wk            0
g1ppkt6aam9q8            0
5zruc4v6y32f9            0
10 rows selected

(2) 디스크를 가장 많이 읽는 10개의 SQL 문을 조회한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SQL> SELECT *
  2    FROM (SELECT sql_id,
  3                 child_number,
  4                 round(disk_reads / executions) dsk_rds
  5            FROM v$sql
  6           WHERE executions > 0
  7           ORDER BY dsk_rds DESC)
  8   WHERE rownum <= 10;
SQL_ID        CHILD_NUMBER    DSK_RDS
------------- ------------ ----------
3trrg5vyyp34v            0     503659
6mcpb06rctk0x            0     357586
9t76mbbnfd6qx            0     313762
2zsg19udkb16g            0     275046
gbmz0s1k7c0hd            1     221525
5zruc4v6y32f9            0     167840
3mh20bujr6cd0            0     147844
b1wtt4gzadtqs            0      98749
0f0unwp9ypug8            0      98747
05s9358mm6vrr            0      87929
10 rows selected

또한 ORACLE은 뷰 v$session 을 제공합니다.백업 및 복구 작업, 통계 정보 수집 등 6초 이상 실행된 모든 세션 작업이 기록되어 있으며, 6초 이상 실행된 SQL 문장을 포함한다(timed statistics를true로 설정하고 통계 정보 지원이 필요하다).이 보기를 통해 응답 시간이 긴 SQL 문장 정보를 얻을 수 있으며, 필드 sqladdress 및 sqlhash_value는 보기 v$sql(또는 v$sqltxt)와 연결하면 완전한 SQL 문장의 텍스트를 얻을 수 있습니다.
이 문서의 주소:http://blog.sunansheng.com/2016/04/22/oracle-vsql/

좋은 웹페이지 즐겨찾기