'Database' 카테고리의 다른 글
무료 DB 접근 툴 (0) | 2019.08.19 |
---|---|
무료 ERD 툴 ERMASTER (0) | 2019.08.08 |
damo 암호화 컬럼 복원시 주의사항 (0) | 2017.08.20 |
JNDI Log4SQL 적용 예... (0) | 2011.04.21 |
SQL LITE 사용 프로그램 (0) | 2010.04.14 |
무료 DB 접근 툴 (0) | 2019.08.19 |
---|---|
무료 ERD 툴 ERMASTER (0) | 2019.08.08 |
damo 암호화 컬럼 복원시 주의사항 (0) | 2017.08.20 |
JNDI Log4SQL 적용 예... (0) | 2011.04.21 |
SQL LITE 사용 프로그램 (0) | 2010.04.14 |
출처 : http://blog.naver.com/onlywin7788?Redirect=Log&logNo=140155221360
출처 : http://cafe.naver.com/ocmkorea/book2025209/9365
/*
--> 방식 1. (이 sql문은 이 방식임)
1. 테이블 전체 목록 조회
SQL> select * from tab;
2. 수행한 쿼리의 Plan을 조회
SQL> @xplan.sql
3. 정확한 통계를 위해 힌트 실행
SQL> select /*+ gather_plan_statistics */ * from tabs;
* 오타 나지 않도록 주의함.
--> 방식 2
1. 실행시 Plan 수집
SQL> EXPLAIN FOR
SELECT * FROM TAB;
2. 실제 정보 조회
SQL> select * from tab(dbms_xplan.display());
or
SQL> select *
from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST +alias +outline +predicate'))
/
--> 인자 정보
dbms_xplan.display_cursor(인자1, 인자2, 인자3);
인자1 : plan table 명을 입력하며, 따로 지정하지 않았을 때는 기본으로 'PLAN_TABLE'이다.
인자2 : Execution Plan시 Set STATEMENT_ID를 지정한 경우 이를 불러올 수 있다.
값이 Null일 경우 마지막에 실행된 문장을 불러온다.
인자3 : 출력 포맷 형태 지정한다.
--> 세번째 인자의 포맷 정보
1) 기본 Format Controller : 반드시 적용되어야 하는 기본적인 Controller임.
적용하지 않더라도 자동으로 기본값으로 적용된다.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
basic : 가장 기본적인 포맷으로서 Id, Operation, Object Name을 출력한다.
typical : basic 옵션에서 한발 더 나아가서 Optimizer가 예상할 수 있는 모든 것을 보여준다.
출력되는 정보로는 예상 Rows, 예상 Bytes, 예상 Temporary Space 사용량, Cost 예상 시간 Predicate Imformat(Operation 별로 Access 및 Filter 정보)이다.
serial : typical과 같으나 Parallel 쿼리 사용시 관련정보가 나오지 않는다.
all : Plan 정보는 typical과 같으나 Plan이외의 정보 중에서 Outline Data 정보를 제외하고 전부 출력한다.
advanced : all과 같지만 Peeked Binds, Outline Data, Note 등을 더 보여준다.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
2) 세부 Format Controller : 기본 포맷정보에 의해서 표시되거나 생략되는 세부적인 포맷을 Control한다.
이 Control은 +표시로 추가되거나 - 표시로 생략이 가능하다.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
alias : 가장 기본적인 포맷으로서 Id, Operation, Object Name을 출력한다.
bytes : basic 옵션에서 한발 더 나아가서 Optimizer가 예상할 수 있는 모든 것을 보여준다.
출력되는 정보로는 예상 Rows, 예상 Bytes, 예상 Temporary Space 사용량, Cost 예상 시간 Predicate Information (Operation 별로 Access 및 Filter 정보)이다.
cost : typical과 같으나 Parallel쿼리 사용시 관련 정보가 나오지 않는다.
note : Plan 정보는 typical과 같으나 Plan이외의 정보 중에서 Outline Data 정보를 제외하고 전부 출력한다.
outline : all과 같지만 Peeked Binds, Outline Data, Note 등을 더 보여준다.
parallel : Parallel 쿼리인 경우 TQ, IN-OUT, PQ Distribute 등의 정보를 Control한다.
partition : Partition Access가 포함된 경우
peeked_binds : Bind 변수의 값을 control 한다. 단, _optim_peek_user_binds 파라미터의 값이 true로 되어 있는 경우에만 해당되며 파라미터는 세션 단위로 수정이
가능하다. (Explain Plan은 출력되지 않음)
predicate : Predicate Information을 Control한다. Operation 별로 Access 및 Filter 정보를 나타낸다.
일반적인 튜닝시 가장 눈 여겨봐야 할 정보이다.
projection : Projection Information을 Control한다. Operation 별로 Select 되는 컬럼 정보를 나타낸다.
remote : DB Link를 사용할 때 Remote 쿼리의 수행 정보를 Control한다.
rows : Plan상의 E-Rows 수를 Control한다.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
3) 실행통계 Format Controller : 이 Control을 적용하면 실행시의 PGA 통계를 출력한다.
이 정보들은 DBMS_XPLAN.DISPLAY 함수에는 적용되지 않는다.
왜냐하면 Explain Plan은 실제 수행되는 것이 아니므로 실행통계정보가 없기 때문이다.
또한 DBMS_XPLAN.DISPLAY_CURSOR 이나 DBMS_XPLAN.DISPLAY_AWR등의 함수 수행시에도 GATHER_STATISTICS 힌트를 주거나 아니면 STATISTICS_LEVEL 파라미터를 ALL로 설정해야 출력이 가능하다.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
allstats : I/O 통계정보(Buffers, Reads, Writes)와 PGA 통계 정보(OMem, 1Mem, Used-Mem, Used-Tmp, Max-Tmp 등)를 동시에 Control 한다.
iostats : I/O 통계정보(Buffers, Reads, Writes)를 Control 한다.
last : 실행 통계 출력시 이 Control을 명시하면 가장 마지막에 수행된 실행 통계를 출력한다.
이 Control을 명시하지 않으면 실행 통계츼 누적치를 출력하므로 주의가 필요합니다.
memstats : PGA 통계정보(OMem, 1Mem, Used-Mem, Used-Tmp, Max-Tmp등)를 동시에 Control한다.
runstats_last : iostats과 last Control 과 동일하다.
이 Control은 Oracle 10g Release 1에서만 사용할 수 있다.
runstats_tot : iostats Control과 동일하다.
이 Control은 oracle 10g Release 1 에서만 사용할 수 있다.
* runstats_last와 runstats_tot를 제외한 4가지의 Control은 Oracle 10g Release 2 이상에서만 사용할 수 있다.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
4) format 사용 예제
Format중 가장 많은 정보를 출력 할 수 있는 포맷은 'advanced allstats last'이며 출력 가능한 모든 내용이 출력되게 되므로 상황이나, 자신에 맞는 포맷을 사용해야 적절함.
4-1) 쿼리 변형이 없는 단순 쿼리 튜닝의 경우(최대한 단순한 포맷형태 사용)
SQL> select * from table(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,'allstats last-rows + predicate');
=> 포맷을 'allstats last-rows + predicate'로 주었으므로 예측 Row 수(E-row)가 생략되고 실행통계와 Predicate Information 만 출력된다.
4-2) 쿼리 변형이 발생하거나 복잡한 쿼리 튜닝시 쿼리 블러과 힌트 정보를 추가로 출력
SQL> select * from table(DBMS_XPLAN.DISPLAY_CURSOR(NULL, NULL, 'allstats last-rows + alias + outline + predicate');
=> 'allstats last-rows + alias + outline + predicate' 포맷을 사용하면 Query Block Name / Object Alias 정보와 Outline Data 정보가 추가로 출력된다.
+ alias는 쿼리블럭 정보를 추가하는 것이며, + Outline는 오라클이 내부적으로 사용하는 힌트정보 출력의 의미이다.
쿼리 변형이 발생한 경우나 뷰(혹은 인라인뷰) 등을 튜닝할 경우 적합한 옵션이다.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
10046 + tkprof 와 동일한 정보를 조회는
select /*+ gather_plan_statistics */ * from tab;
select *
from table(dbms_xplan.display_cursor(null, null, 'advanced ALLSTATS LAST +alias +outline +predicate'))
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
AWR 정보를 이용
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR(SQL_ID입력,NULL,NULL, 'ADVANCED ALLSTATS LAST'));
사용 권한 뷰
DISPLAY_CURSOR 함수 : V$SQL_PLAN, V$SESSION, V$SQL_PLAN_STATISTICS_ALL 뷰에 대한 SELECT 권한 필요
DISPLAY_AWR 함수 : DBA_HIST_SQL_PLAN, DBA_HIST_SQLTEXT, V$DATABASE 뷰에 대한 SELECT 권한 필요
DISPLAY_SQLSET 함수 : ALL_SQLSET_STATEMENTS, ALL_SQLSET_PLANS 뷰에 대한 SELECT 권한 필요
*/
select *
from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST +alias +outline +predicate'))
/
오라클 미디어 팩 신청하기 (0) | 2013.01.31 |
---|---|
one port multi listener 설정 하기 (0) | 2012.12.24 |
Automatic SQL Tuning in Oracle Database 10g (0) | 2012.07.20 |
10G OCP 자격증 관련 (2) | 2012.07.08 |
오라클 패키지 CURSOR(커서) 출력 값 조회 (0) | 2012.02.23 |
10g에 추가된 Tuning Advisor
SQL ID 와 Begin SNAP 부분은 addm 을 통해 조회하여 입력하는 것이 좋음.(자동 생성 SH은 비밀글 참조...)
출처 : http://blog.daum.net/onjshop/175
★★ www.oraclejava3.co.kr 에서 더욱 유용한 정보를 확인하실 수 있습니다. ★★
(분당정자점은 양재, 강남에서 15분 거리에 있습니다. ^^)
one port multi listener 설정 하기 (0) | 2012.12.24 |
---|---|
DBMS_XPLAN 정보 조회 (0) | 2012.09.07 |
10G OCP 자격증 관련 (2) | 2012.07.08 |
오라클 패키지 CURSOR(커서) 출력 값 조회 (0) | 2012.02.23 |
일정 시간 별로 쿼리 정보 조회 (0) | 2012.02.20 |
각 시험당 비용이 21만원으로 올랐음 -_-
- 시험코드 : 1z0-007
- 시 험 명 : SQL
- 시험비용 : $125
- 시험시간 : 120분
- 시험문항 : 52문제
- 커트라인 : 72% (37.44)
- 시험장소 : 온라인(피어슨뷰 http://www.vue.com에 신청 가능)
- 시험코드 : 1z0-042
- 시 험 명 : WORKSHOP1
- 시험비용 : $125
- 시험시간 : 120분
- 시험문항 : 84문제
- 커트라인 : 68%(57.12)
- 시험장소 : 오프라인
- 시험코드 : 1z0-043
- 시 험 명 : WORKSHOP2
- 시험비용 : $125
- 시험시간 : 90분
- 시험문항 : 92문제
- 커트라인 : 70%(64.4)
- 시험장소 : 오프라인
오라클 시험 다보고
Hand On 정보 등록 후 OCP 자격증 신청 방법
DBMS_XPLAN 정보 조회 (0) | 2012.09.07 |
---|---|
Automatic SQL Tuning in Oracle Database 10g (0) | 2012.07.20 |
오라클 패키지 CURSOR(커서) 출력 값 조회 (0) | 2012.02.23 |
일정 시간 별로 쿼리 정보 조회 (0) | 2012.02.20 |
오라클 병렬 인덱스 조회 및 수정하기 (0) | 2012.01.27 |
Since Oracle 7.3 the REF CURSOR
type has been available to allow recordsets to be returned from stored procedures and functions. Oracle 9i introduced the predefined SYS_REFCURSOR
type, meaning we no longer have to define our own REF CURSOR
types. The example below uses a ref cursor to return a subset of the records in the EMP
table.
The following procedure opens a query using a SYS_REFCURSOR
output parameter. Notice the cursor is not closed in the procedure. It is up to the calling code to manage the cursor once it has been opened.
CREATE OR REPLACE PROCEDURE get_emp_rs (p_deptno IN emp.deptno%TYPE, p_recordset OUT SYS_REFCURSOR) AS BEGIN OPEN p_recordset FOR SELECT ename, empno, deptno FROM emp WHERE deptno = p_deptno ORDER BY ename; END GetEmpRS; /
The resulting cursor can be referenced from PL/SQL as follows.
SET SERVEROUTPUT ON SIZE 1000000 DECLARE l_cursor SYS_REFCURSOR; l_ename emp.ename%TYPE; l_empno emp.empno%TYPE; l_deptno emp.deptno%TYPE; BEGIN get_emp_rs (p_deptno => 30, p_recordset => l_cursor); LOOP FETCH l_cursor INTO l_ename, l_empno, l_deptno; EXIT WHEN v_cursor%NOTFOUND; DBMS_OUTPUT.PUT_LINE(l_ename || ' | ' || l_empno || ' | ' || l_deptno); END LOOP; CLOSE l_cursor; END; /
The cursor can be used as an ADO Recordset.
Dim conn, cmd, rs Set conn = Server.CreateObject("adodb.connection") conn.Open "DSN=TSH1;UID=scott;PWD=tiger" Set cmd = Server.CreateObject ("ADODB.Command") Set cmd.ActiveConnection = conn cmd.CommandText = "get_emp_rs" cmd.CommandType = 4 'adCmdStoredProc Dim param1 Set param1 = cmd.CreateParameter ("deptno", adInteger, adParamInput) cmd.Parameters.Append param1 param1.Value = 30 Set rs = cmd.Execute Do Until rs.BOF Or rs.EOF -- Do something rs.MoveNext Loop rs.Close conn.Close Set rs = nothing Set param1 = nothing Set cmd = nothing Set conn = nothing
The cursor can also be referenced as a Java ResultSet.
If you are using a version of Oracle before 9i, then create the following package and replace any references toimport java.sql.*; import oracle.jdbc.*; public class TestResultSet { public TestResultSet() { try { DriverManager.registerDriver (new oracle.jdbc.OracleDriver()); Connection conn = DriverManager.getConnection("jdbc:oracle:oci:@w2k1", "scott", "tiger"); CallableStatement stmt = conn.prepareCall("BEGIN get_emp_rs(?, ?); END;"); stmt.setInt(1, 30); // DEPTNO stmt.registerOutParameter(2, OracleTypes.CURSOR); //REF CURSOR stmt.execute(); ResultSet rs = ((OracleCallableStatement)stmt).getCursor(2); while (rs.next()) { System.out.println(rs.getString("ename") + ":" + rs.getString("empno") + ":" + rs.getString("deptno")); } rs.close(); rs = null; stmt.close(); stmt = null; conn.close(); conn = null; } catch (SQLException e) { System.out.println(e.getLocalizedMessage()); } } public static void main (String[] args) { new TestResultSet(); } }
SYS_REFCURSOR
with TYPES.cursor_type
.Hope this helps. Regards Tim...CREATE OR REPLACE PACKAGE types AS TYPE cursor_type IS REF CURSOR; END Types; /
Automatic SQL Tuning in Oracle Database 10g (0) | 2012.07.20 |
---|---|
10G OCP 자격증 관련 (2) | 2012.07.08 |
일정 시간 별로 쿼리 정보 조회 (0) | 2012.02.20 |
오라클 병렬 인덱스 조회 및 수정하기 (0) | 2012.01.27 |
AWR Report 정리본 (0) | 2011.09.28 |
형태
오라클 계정 -> 5분 단위로 해서 -> 아래의 테이블 생성후 -> Crontab 으로 조회하여 입력하는 형태
자세한 것은 Shell, Crontab 정보를 찾으면서 하면됨
-- 임의로 실행하는 쿼리목록 조회하기
select to_char(sysdate,'yyyymmdd'),
to_char(sysdate, 'HH24'),
to_char(sysdate, 'MI'),
A.inst_id,
A.SID,
A.SERIAL#,
A.USERNAME,
A.TYPE,
A.STATUS,
A.STATE,
A.EVENT,
A.OSUSER,
A.PROGRAM,
A.MACHINE,
A.SQL_ADDRESS,
B.SQL_ID,
B.sharable_mem,
B.persistent_mem,
B.runtime_mem,
B.first_load_time,
B.OPTIMIZER_MODE,
B.OPTIMIZER_COST,
B.MODULE,
B.SQL_FULLTEXT
from GV$SESSION a, GV$SQL B
WHERE A.STATUS = 'ACTIVE' -- 현재 활성화된
AND B.ADDRESS=A.SQL_ADDRESS -- FULL SQL TEXT 를 얻기 위해
AND A.MACHINE NOT IN ('NewWas1','NewWas2') -- 접속 Machine 이름이 NewWas1, NewWas2 는 아님
AND UPPER(B.SQL_FULLTEXT) NOT LIKE '%V$%'; -- V$ 로 시작하는 뷰를 보는 경우는 제외
CREATE TABLE MStorage.USER_SQL_LOG
(
VIEW_YMD VARCHAR2(8) DEFAULT to_char(sysdate,'yyyymmdd'),
VIEW_HH VARCHAR2(2) DEFAULT to_char(sysdate, 'HH24'),
VIEW_MI VARCHAR2(2) DEFAULT to_char(sysdate, 'MI'),
INST_ID NUMBER,
SID NUMBER,
SERIAL# NUMBER,
USERNAME VARCHAR2(30),
TYPE VARCHAR2(10),
STATUS VARCHAR2(8),
STATE VARCHAR2(19),
EVENT VARCHAR2(64),
OSUSER VARCHAR2(30),
PROGRAM VARCHAR2(48),
MACHINE VARCHAR2(64),
SQL_ADDRESS RAW(8),
SQL_ID VARCHAR2(13),
SHARABLE_MEM NUMBER,
PERSISTENT_MEM NUMBER,
RUNTIME_MEM NUMBER,
FIRST_LOAD_TIME VARCHAR2(38),
OPTIMIZER_MODE VARCHAR2(10),
OPTIMIZER_COST NUMBER,
MODULE VARCHAR2(64),
SQL_FULLTEXT CLOB
) TABLESPACE MStorage;
COMMENT ON TABLE MStorage.USER_SQL_LOG IS '로그 모니터링 테이블(GV$SESSION) 참조';
-- 인덱스 생성
CREATE INDEX MStorage.IX_USER_SQL_LOG_01 ON MStorage.USER_SQL_LOG
(
VIEW_YMD,VIEW_HH, VIEW_MI
)
TABLESPACE MStorage;
-- 실제 입력 구문
INSERT INTO MStorage.USER_SQL_LOG
(
inst_id,
SID,
SERIAL#,
USERNAME,
TYPE,
STATUS,
STATE,
EVENT,
OSUSER,
PROGRAM,
MACHINE,
SQL_ADDRESS,
SQL_ID,
sharable_mem,
persistent_mem,
runtime_mem,
first_load_time,
OPTIMIZER_MODE,
OPTIMIZER_COST,
MODULE,
SQL_FULLTEXT
)
select A.inst_id,
A.SID,
A.SERIAL#,
A.USERNAME,
A.TYPE,
A.STATUS,
A.STATE,
A.EVENT,
A.OSUSER,
A.PROGRAM,
A.MACHINE,
A.SQL_ADDRESS,
B.SQL_ID,
B.sharable_mem,
B.persistent_mem,
B.runtime_mem,
B.first_load_time,
B.OPTIMIZER_MODE,
B.OPTIMIZER_COST,
B.MODULE,
B.SQL_FULLTEXT
from GV$SESSION a, GV$SQL B
WHERE 1=1-- A.STATUS = 'ACTIVE' -- 현재 활성화된
AND B.ADDRESS=A.SQL_ADDRESS -- FULL SQL TEXT 를 얻기 위해
AND A.MACHINE NOT IN ('NewWas1','NewWas2') -- 접속 Machine 이름이 NewWas1, NewWas2 는 아님
AND UPPER(B.SQL_FULLTEXT) NOT LIKE '%V$%'; -- V$ 로 시작하는 뷰를 보는 경우는 제외
10G OCP 자격증 관련 (2) | 2012.07.08 |
---|---|
오라클 패키지 CURSOR(커서) 출력 값 조회 (0) | 2012.02.23 |
오라클 병렬 인덱스 조회 및 수정하기 (0) | 2012.01.27 |
AWR Report 정리본 (0) | 2011.09.28 |
Table Index 생성시 진행율 또는 종료예상시간 확인 하는 법 있나요? (0) | 2011.08.22 |
SELECT * FROM DBA_INDEXES -- Dictionary를 통해 indexes로 끝나는 것을 모두 조회하여도 됨... WHERE DEGREE NOT IN ('1','DEFAULT','0') AND OWNER NOT IN ('SYS','SYSTEM','WMSYS', 'OUTLN', 'TSMSYS', 'SYSMAN') |
SELECT 'ALTER INDEX ' || OWNER || '.' || INDEX_NAME || ' PARALLEL(DEGREE 4);' FROM DBA_INDEXES WHERE DEGREE = '8' AND OWNER NOT IN ('SYS','SYSTEM','WMSYS', 'OUTLN', 'TSMSYS', 'SYSMAN') |
오라클 패키지 CURSOR(커서) 출력 값 조회 (0) | 2012.02.23 |
---|---|
일정 시간 별로 쿼리 정보 조회 (0) | 2012.02.20 |
AWR Report 정리본 (0) | 2011.09.28 |
Table Index 생성시 진행율 또는 종료예상시간 확인 하는 법 있나요? (0) | 2011.08.22 |
Log - 오라클 log, trc 등 관리 정책 및 쉘 스크립트 예시 (0) | 2011.07.29 |
## AWR REPORT SETTING ##
1. 특정 기간 동안의 Database level성능 @$ORACLE_HOME/rdbms/admin/awrrpt.sql
2. Database ID와 Instance ID를 지정후 성능 Report 작성 [AWR을 Export/Import 후 다수의 Database에 대한 통계
자료가 존재시 혹은 RAC 환경 등에서 , Database ID 와 Instance ID 지정이 필요시]
@ORACLE_HOME/rdbms/admin/awrrpti.sql
3. 특정 SQL문에 대한 성능 Report작성 : SQL_ID 값을 입력해야 한다.[1,2에서 주요 Top을 차지하는 SQL문에 대한 특정기간 동안의 Reporting]
@awrsqrpt.sql
4. 특정 SQL문에 대한 성능 Report작성[특정 Database 혹은 Instance에 대해서, : 마찬가지로 SQL_ID 값을 입력해야 한다.]
@awrsqrpi.sql
성능 비교 자료
5. 두개의 특정 시간 사이의 생성[H/W 변경, Application 변경등 Database 성능에 영향을 줄수 있는 작업 전/후 비교시 사용]
@awrddrpt.sql
6. 두개의 특정 시간 사이의 성능 비교 자료 생성[특정 Database 혹은 Instance 에 대해서]
@awrddrpi.sql
SQL> select snap_interval, retention from dba_hist_wr_control;
--> SNAP_INTERVAL : 스냅샷 주기 , RETENTION : 보관주기
SQL> BEGIN
dbms_workloadd_repository.modify_snapshot_settings(interval=>20,retention=>2*24*60);
----- interval=>20 스냅샷주기를 20분단위로 하겠다.
----- 보관주기를 2일로 하겠다.
);
END;
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS (
RETENTION => 0,
INTERVAL => 0,
DBID => -- SELECT DBID FROM V$DATABASE);
SQL> select snap_interval, retention from dba_hist_wr_control;
# SYS 스키마의 SYSAUX 테이블스페이스 내에 저장되어 있으며, WRM$_* 또는 WRH$_* 의 네임 포맷을 갖습니다.
WRM$_* 테이블은 수집 대상 데이타베이스 및 스냅샵에 관련한 메타데이타 정보를, WRH$_* 테이블은 실제
수집된 통계 정보를 저장하는데 사용됩니다.(WRH$_*의 H는 "HISTORICAL",WRM$_*의 M은 "METADATA"의 약자를 의미합니다.)
#################################################################################################################
## 타임 모델 (Time Model) ##
ORACLE 10G는 여러가지 자원에 관련한 실제 사용 시간을 확인하기 위한 타임 모델(time model)을 구현하고 있습니다. 전체
시스템 관련 소요 시간 통계는 V$SYS_TIME_MODEL 뷰에 저장됩니다. V$SYS_TIME_MODEL 뷰에 대한 쿼리 결과의 예가 아래와 같습니다.
SQL> SELECT STAT_NAME, VALUE FROM V$SYS_TIME_MODEL;
STAT_NAME VALUE
--------- ---------
DB time 791943871 --> 인스턴스 시작 후 DB 사용 누적치
위에서 DB TIME 이라는 통계정보는 인스턴스 시작 이후 데이타베이스가 사용한 시간의 누적치를 의미합니다.
샘플 작업을 실행한 다음 다시 뷰를 조회했을 때 표시되는 DB TIME 의 값과 이전 값의 차이가 해당 작업을 위해
데이타베이스가 사용한 시간이 됩니다.
시스템 / 데이타베이스 레벨이 아닌 세션 레벨의 통계를 원한다면 V$SESS_TIME_MODEL 뷰를 이용할 수 있습니다.
V$SESS_TIME_MODEL 뷰는 현재 연결 중인 ACTIVE/INACTIVE 세션들의 통계를 제공합니다.
세션의 SID 값을 지정해서 개별 세션의 통계를 확인할 수 있습니다.
또 새롭게 추가된 Active Session History(ASH)는 AWR과 마찬가지로 향후 분석 작업을 위해 세션 성능통계를 버퍼에 저장합니다.
V$ACTIVE_SESSION_HISTORY 등을 통해 조회된다는 사실입니다. 데이타는 1초 단위로 수집되며, 엑티브 세션만이
수집 대상이 됩니다. 버퍼는 순환적인 형태로 관리되며, 저장 메모리 용량이 가득 차는경우 오래된 데이타부터 순서대로 삭제됩니다.
이벤트를 위해 대기 중인 세션의 수가 얼마나 되는지 확인하려면 아래와 같이 조회하면 됩니다.
SQL> SELECT session_id||','||session_serial# SID, n.name, wait_time, time_waited
FROM v$active_session_history a, v$event_name n
WHERE n.event# = a.event#;
SID NAME WAIT_TIME TIME_WAITED
------ ----------------- ---------- -------------
166,1 log file parallel write 0 288
166,1 log file parallel write 0 223
161,1 control file sequential read 0 39401
166,1 log file parallel write 0 30367
146,271 null event 0 2712
167,1 db file parallel write 0 385
위 쿼리는 이벤트 별로 대기하는 데 얼마나 많은 시간이 사용되었는지를 알려줍니다. 특정 wait
이벤트에 대한 드릴다운을 수행할 때에도 ASH 뷰를 이용할 수 있습니다. 예를 들어, 세션 중 하나가
buffer busy wait상태에 있는 경우 정확히 어떤 세그먼트에 wait 이벤트가 발생했는지 확인하는 것이 가능합니다.
이때 ASH 뷰의 CURRENT_OBJ# 컬럼과 DBA_OBJECTS 뷰를 조인하면 문제가 되는 세그먼트를 확인할 수 있다.
ASH 뷰는 그 밖에도 병렬 쿼리 서버 세션에 대한 기록을 저장하고 있으므로, 병렬 쿼리의 WAIT 이벤트를 진단하는 데 유용하게 사용된다.
레코드가 병렬 쿼리의 slave process로서 활용되는 경우, coordinator server sesion 의 SID 는 QCC_SESSION_ID 컬럼으로 확인할 수 있다.
SQL_ID 컬럼은 WAIT 이벤트를 발생시킨 SQL구문의 ID 를 의미하며, 이 컬럼과 V$SQL 뷰를 조인하여 문제를 발생시킨 SQL구문을 찾아낼 수 있다.
CLIENT_ID 컬럼은 웹 어플리케이션과 같은 공유 사용자 환경에서 클라이언트를 확인하는 데 유용하며, 이값은 DBMS_SESSION.SET_INDENTIFIER를
통해 설정이 가능하다.
## SNAPSHOT 찍기 ##
SQL> SELECT SYSDATE FROM DUAL;
SQL> SELECT SNAP_ID, BEGIN_INTERVAL_TIME BEGIN, END_INTERVAL_TIME END FROM SYS.DBA_HIST_SNAPSHOT; --> 스냅샵 아이디를 본다.
SQL> EXECUTE DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT; --> 수동으로 스냅샷을 찍는다.
SQL> SELECT SNAP_ID, BEGIN_INTERVAL_TIME BEGIN, END_INTERVAL_TIME END FROM SYS.DBA_HIST_SNAPSHOT; --> 스냅샵 아이디를 본다.
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(10,15): --> SNAPSHOT ID를 범위로 지정해서 삭제한다.
SQL> SELECT SNAP_ID, STARTUP_TIME FROM DBA_HIST_SNAPSHOT ORDER BY 1,2; --> 정렬해서 스냅샵 아이디를 본다.
## SNAPSHOT을 ID를 묶어서 이름을 지정한다. ##
SQL> SELECT DBID, BASELINE_ID, BASELINE_NAME, START_SNAP_ID, END_SNAP_ID FROM DBA_HIST_BASELINE;
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(17,20,'TEST_BASE_1');
SQL> SELECT DBID, BASELINE_ID, BASELINE_NAME, START_SNAP_ID, END_SNAP_ID FROM DBA_HIST_BASELINE;
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE('TEST_BASE_1');
### SQL QUERY ADVISOR ###
SQL> CONN sys/<password> AS SYSDBA
SQL> GRANT ADVISOR TO scott; ?? scott 유저에게 advisor 권한 부여
SQL> CONN scott/tiger
SQL> SELECT ename from emp e
WHERE job = 'SALESMAN'
AND comm not in (SELECT comm FROM emp
WHERE ename=e.ename AND comm is not null); ?? 문제의 쿼리
선택된 레코드가 없습니다.
SQL> DECLARE
2 l_task_id varchar2(30);
3 l_sql varchar2(2000);
4 BEGIN
5 l_sql := 'select ename from emp e where job = :job and comm not in
6 (select comm from emp where ename=e.ename and comm is not null)';
7 l_task_id := dbms_sqltune.create_tuning_task ( ?? dbms_sqltune 패키지를 사용.
8 sql_text => l_sql,
9 user_name => 'SCOTT', ?? [주의] 유저명은 대문자로 해야함.
10 scope => 'COMPREHENSIVE',
11 time_limit => 120,
12 task_name => 'sql_advisor_test14' ?? 테스크 이름
13 );
14 dbms_sqltune.execute_tuning_task ('sql_advisor_test14'); ?? 튜닝 테스크 실행
15 END;
16 /
PL/SQL 처리가 정상적으로 완료되었습니다.
SQL> set serveroutput on size 999999
SQL> set long 999999
SQL> select dbms_sqltune.report_tuning_task ('sql_advisor_test14') from dual; ?? 생성된 테스크 보고서 보기
http://cafe.naver.com/prodba
출처 :
일정 시간 별로 쿼리 정보 조회 (0) | 2012.02.20 |
---|---|
오라클 병렬 인덱스 조회 및 수정하기 (0) | 2012.01.27 |
Table Index 생성시 진행율 또는 종료예상시간 확인 하는 법 있나요? (0) | 2011.08.22 |
Log - 오라클 log, trc 등 관리 정책 및 쉘 스크립트 예시 (0) | 2011.07.29 |
오라클 JDBC 버전별로 확인 (0) | 2011.04.01 |
오라클 병렬 인덱스 조회 및 수정하기 (0) | 2012.01.27 |
---|---|
AWR Report 정리본 (0) | 2011.09.28 |
Log - 오라클 log, trc 등 관리 정책 및 쉘 스크립트 예시 (0) | 2011.07.29 |
오라클 JDBC 버전별로 확인 (0) | 2011.04.01 |
오라클 TRANSLATE (0) | 2011.03.31 |
다음의 내용들은 개인적인 권장하는 사항들이다.
오라클 10g의 경우 엔진 설치를 위한 디렉토리 공간을 20GB 이상 주는 것을 권장한다.
오라클의 adump, bdump, udump, 리스너 로그, 아카이브 로그 등을 백업할 수 있으면
백업하는 것을 권장한다. 하지만 대부분의 경우 백업의 필요성이 절실하지 않기 때문에
삭제한다.
각종 로그의 자동관리를 위하여 첨부한 파일과 같이 CRONTAB에 등록하여 관리하면 편리하다.
각각의 로그관리에 대한 정책이 필요하다.
정책 예시)
1. alert 로그 : 월별로 로그를 관리. 영구 보관하는 것이 좋다.
compress 명령으로 압축하여 보관.
2. adump audit 파일 : 180일 정도 유지, 매일 180일이 지난 trc파일을 삭제
3. bdump trace 파일 : 90일 정도 유지, 매일 90일이 지난 trc파일을 삭제
4. udump trace 파일 : 90일 정도 유지, 매일 90일이 지난 trc파일을 삭제
5. 리스너 로그 : 리스너를 로깅하도록 설정했을 경우 월별로 로그를 관리.
180일이 지난 파일은 삭제. compress 명령으로 압축하여 보관.
6. 아카이브로그 파일 : 기본적으로 1주일에 1번 이상 FULL BACKUP을 받을 경우
백업 툴에서 아카이브로그를 관리해 주지 않을 경우 등록하여 사용
7일전 아카이브로그 파일 삭제.
쉘 예시)
쉘 스크립트 작성 시 오타에 주의할 것. 반드시 테스트 후 적용할 것
#######################################################
#### alert.log ####
#### (매월 1일 실행할 수 있도록 cron job 등록 ) ####
#######################################################
nDate=`date +%Y%m%d`
cp $ORACLE_BASE/admin/TESTDB/bdump/alert_TESTDB.log $ORACLE_BASE/TESTDB/bdump/alert_TESTDB.log.$nDate
cat /dev/null > $ORACLE_BASE/admin/TESTDB/bdump/alert_TESTDB.log
compress -vf $ORACLE_BASE/TESTDB/bdump/alert_TESTDB.log.$nDate
#######################################################
#### listener.log ####
#### (매월 1일 실행할 수 있도록 cron job 등록 ) ####
#######################################################
nDate=`date +%Y%m%d`
cp $ORACLE_HOME/network/admin/listener.log $ORACLE_HOME/network/admin/listener.log.$nDate
cat /dev/null > $ORACLE_HOME/network/admin/listener.log
compress -vf $ORACLE_HOME/network/admin/listener.log.$nDate
#######################################################
#### audit ####
#######################################################
# 180일이 지난 *.aud를 찾아 삭제
find $ORACLE_BASE/admin/TESTDB/adump \( -ctime +180 -name '*.aud' \) -exec rm -f {} \;
#######################################################
#### .trc ####
# 90일이 지난 *.trc를 찾아 삭제 ####
#######################################################
find $ORACLE_BASE/admin/TESTDB/bdump \( -ctime +90 -name '*.trc' \) -exec rm -f {} \;
find $ORACLE_BASE/admin/TESTDB/udump \( -ctime +90 -name '*.trc' \) -exec rm -f {} \;
#######################################################
#### archive log ####
#######################################################
# 7일이 지난 *.arc를 찾아 삭제
find /archive_log \( -ctime +7 -name '*.arc' \) -exec rm -f {} \;
AWR Report 정리본 (0) | 2011.09.28 |
---|---|
Table Index 생성시 진행율 또는 종료예상시간 확인 하는 법 있나요? (0) | 2011.08.22 |
오라클 JDBC 버전별로 확인 (0) | 2011.04.01 |
오라클 TRANSLATE (0) | 2011.03.31 |
오라클 자격증 신청 절차 (0) | 2011.03.28 |