database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Tutorials 9278 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 9278
유용한 오라클 tuning scripts (1)
작성자
정재익(advance)
작성일
2002-01-05 21:23
조회수
11,156

RowCache의 Miss율을 보여준다

 

/* rowCache 의 MissRatio를 조사하는 스크립트

** <<박제용 99.11>>

** Row chache 의 Miss ratio는 15% 이하로 유지하는 것이 좋다.

** 그렇지 않을경우 shared_pool_size를 늘리는것을 고려해야 한다.

*/

select sum(gets) "Gets",

sum(getmisses) "Misses",

(1-(sum(getmisses)/(sum(gets)+sum(getmisses))))*100 "HitRate"

from v$rowcache;

 

Library Cache의 Hitratio를 보여준다.(shared_pool의 size결정을위해)

 

/* library Cache Hitratio 출력 스크립트

** <<박제용 99.11>>

** library Cache 의 hitratio 가 0.9 이하이면

** Shared Pool Size를 늘려주거나, SQL 문의 이상을

** 조사해야 한다.

*/

select sum(pins) Executions,

sum(pinhits) "Execution Hits",

sum(reloads) Misses,

((sum(pins) / (sum(pins) + sum(reloads))) * 100) hitratio

from v$librarycache;

 

SQL Cursor를 보여주는 스크립트

 

/* SQL Cursor를 조사하는 스크립트.

** <<박제용 99.11>>

** SQL Cursor 를 조사하여 부하가 많이 걸리는 SQL문과

** 메모리를 조사한다.

** loads : 캐쉬에서 나갔다 들어온 횟수(best=1).

** invalidations : LRU에서 무효화된 횟수. 이 값이 4이상이면

** shared_pool_area를 확장해야한다.

** parse_calls : 이 커서의 호출 수.

** sorts : 수행된 소트횟수

** command_type: 2 - insert, 3-select, 4-update, 7-delete

*/

select sql_text, loads, invalidations, parse_calls, sorts

FROM v$sqlarea

WHERE sql_text NOT LIKE '%$%'

AND command_type IN(2,3,6,7);

 

explain을 보기 쉽게 출력해주는 SQL

 

*

** expain plan 결과를 보기 쉽게 출력해주는 스크립트.

**

** 1) expain을 처음 사용할 경우엔 [ORACLE_HOME]/rdbms/admin/utlxplan.sql을 실행,

** plan_table을 생성한다.

** 2) 처음 사용이 아니면 delete from plan_table; 을 실행하여 이전 결과를 삭제.

**

** 실행결과 파싱번호(id)가 길면 SQL이 비효율적이거나, shared_pool_size가 작은것이다.

** 기타 SQL문이 인덱스를 사용하는지 등등을 알수 있다.

*/

col operation format a30

col options format a20

col id format 99

 

select id, lpad(' ',2*level) || operation ||

decode(id, 0, ' Cost= ' || position )"operation",

options, object_name "object"

from plan_table

connect by prior id=parent_id

start with id =0;

 

세션별로 과도한 memory read를 하는 SQL문을 찾아주는 스크립트

 

/*

** SQL query 튜닝 스크립트.. <박제용>

**

** 유저별로 과도한 logical read를 수행하는 sql 문 찾기

**

**

*/

Break on User_Name On Disk_Reads on Buffer_Gets on Rows_Processed

Select A.User_Name, B.Disk_Reads, B.Buffer_Gets, B.Rows_Processed, C.SQL_Text

From V$Open_Cursor A, V$SQLArea B, V$SQLText C

Where A.User_Name = Upper('&&User') And A.Address = C.Address

And A.Address = B.Address

Order By A.User_Name, A.Address, C.Piece;

 

과도한 memory read를 하는 SQL문을 찾아주는 스크립트

 

/*

** SQL query 튜닝 스크립트.. <박제용>

**

** 과도한 logical read를 수행하는 SQL문을 V$SQLAREA 에서 검색해줌.

**

** 원인 => 1) 인덱스 컬럼에 distinct한 값이 적은, 부적절한 인덱스의 사용. (대체로 인덱스를 지워야 할 경우)

** 2) 최적화 되지 않은 SQL 문장

*/

select buffer_gets, sql_text from v$sqlarea

where buffer_gets > 200000

order by buffer_gets desc;

 

과도한 disk read를 하는 SQL문을 찾아주는 스크립트

 

/*

** SQL query 튜닝 스크립트.. <박제용>

**

** 과도한 disk read를 수행하는 SQL문을 V$SQLAREA 에서 검색해줌.

**

** 원인 => 1) SQL문이 최적화 되지 않아 disk read를 많이 할 수 밖에 없는 쿼리일경우.

** (index가 없거나 사용되지 않을때)

** 2) db_block_buffers 또는 shared_pool_size 가 작은 경우. (메모리가 적음)

*/

select disk_reads, sql_text from v$sqlarea

where disk_reads > 10000

order by disk_reads desc;

 

SGA의 shared pool내에 캐쉬된 object중 큰 영역을 차지 하고 있는 것을 찾아주는 스크립트

 

/*

** Shared_pool에 저장된 내용보기 <박제용>

**

** 프로시져나 패키지등은 shared_pool에 저장되며 저장된 객체중

** 그 크기가 100K 가 넘는것을 보여준다.

*/

col name format a30

 

select name, sharable_mem

from v$db_object_cache

where sharable_mem > 100000

and type in ('PACKAGE', 'PACKAGE BODY', 'FUNCTION', 'PROCEDURE')

and kept = 'NO';

 

SGA의 shared pool 의 현재 사용도를 출력해주는 SQL

 

/*

** shared_pool_size의 현재 사용 현황을 보여줌. <박제용>

**

** shared_pool_size의 현재의 사용현황을 보여준다.

** 이 데이터를 주기적으로 보관하여 분석한다.

*/

col value for 999,999,999,999 heading "Shared Pool Size"

col bytes for 999,999,999,999 heading "Free Bytes"

select to_number(v$parameter.value) value, v$sgastat.bytes,

(v$sgastat.bytes/v$parameter.value)*100 "Percent Free"

from v$sgastat, v$parameter

where v$sgastat.name = 'free memory'

and v$ parameter .name = ‘shared_pool_size;

[Top]
No.
제목
작성자
작성일
조회
9281init.ora 파일중 메모리 튜닝에 영향을 주는 파라미터
정재익
2002-01-05
6308
9280SQL문 튜닝 방법에 관하여
정재익
2002-01-05
8743
9279유용한 오라클 tuning scripts (2)
정재익
2002-01-05
8981
9278유용한 오라클 tuning scripts (1)
정재익
2002-01-05
11156
9276몇가지 유용한 SQL scripts
정재익
2002-01-05
10831
9273MANIPULATING LARGE OBJECTS USING BMS_LOB PACKAGE
정재익
2002-01-05
6037
9272ORACLE DATABASE 재설치하기
정재익
2002-01-05
6517
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.050초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다