실행계획이란 SQL 이 최적의 방법으로 원하는 데이터를 찾을 수 있도록 만들어지는 계획이다. 이 실행계획을 확인 해야만 자신이 의도한대로 옵티마이저가 동작했는지 알 수 있다. 실행 계획 확인하는 방법중에는 상용툴(토드, 오렌지)을 사용하는 방법도 있지만 생략한다. SQL*PLUS Auto Trace http://docs.oracle.com/cd/B19306_01/server.102/b14357/ch8.htm#i1037682 인스턴스의 모든 세션 대상으로 하거나 특정 세션에서 실행하는 SQL에 대해 실행계획을 표시한다. 하지만 모든 세션을 대상으로 추적하면 시스템에 많은 부하가 발생한다. 그래서 일반적으로 특정 세션에 대해서만 추적한다. - SQL*PLUS auto Trace - TKPROF - 실행 결과..
RBO CBO 의도적인 Optimizer 동작조정 옵티마이저(최적기)는 SQL의 실행계획을 만들어주는 역활을 한다. 이 옵티마이저의 기술은 모든 RDBMS가 다르며 이 옵티마이저의 성능으로 Query 의 성능이 달라진다. 이런 옵티마이저에도 두가지가 있는데 RBO 와 CBO 두개의 옵티마이저 타입으로 나뉘게 된다. RBO(Rule Based Optimizer) : 규칙 기반 CBO (Cost Based Optimizer) : 비용 기반 간략히 RBO는 규칙기반이라고 하며 여러개의 규칙을 정해 놓고 부합되는 규칙중 가장 비용이 적은 규칙을 선택하여 실행계획을 생성한다. 하지만 그 비용이라는 것이 실제 SQL을 실행하여 발생하는 비용이 아닌 규칙 자체의 비용이므로 유연하지 못하다. 그래서 CBO는 이러한 R..
쉽게 튜닝은 원하는 성능을 얻기위한 작업이다. Oracle 의 성능을 최대한 끌어내기 위해서는 Database 의 성격을 파악하여 올바른 설계와 효율적인 SQL 등을 작성하여 사용해야 한다. 튜닝 구분 크게 하드웨어적과 소프트웨어적인 튜닝을 고려할 수 있다. CPU 의 연산능력이 떨어진다거나 메모리의 양이 적다면 H/W 업그레이드하면 효과를 볼 수 있다. 하지만 그렇지 않는 경우(올바르지 않은 설계, 비효율적인 Query 등등)즉, 비효율적인 자원의 사용에서는 H/W 튜닝으로는 원인을 해결하지 못한다. H/W 처음부터 시스템이 운영될 수 있는 성능의 H/W로 구축이 되어 있어야 한다(하지만 일반적으로 저러한 검토보다 예산에 맞게 구축하는게 현실이다.). 성능이 나오지 않는다고 처음부터 H/W 튜닝을 고려..
의미 Block Corruption은 데이터파일의 특정 Block이 망가지는 것을 의미한다. 원인 정전이나 Shutdown Abort 등 예기치 못한 종료로 발생한다. 그림으로 보면 데이터 파일에 아래와 같은 형태로 블록들이 존재할때 'L' 블록이 Corruption이 되면 오라클은 에러를 출력한다. 그리고 M,N.O,... 블록에 대해서는 이상유무에 대해서는 관계없이 읽지 않는다. Oracle에는 손상된 블록을 감지하는데 두가지 Parameter가 있다 DB_BLOCK_CHECKSUM(Default true) 이것은 디스크 또는 I/O 시스템에 의해 발생한 손상을 감지한다. 시스템이 손상을 감지하기 위해 블록의 헤더에 체크섬을 사용하여, 성능에 미치는 영향을 최소화하고 있다. - 10g R1 이하 tr..
두개의 Node가 존재하는 RAC 환경에서의 Redo Log 를 조회해 보면 두개의 node에서 RedoLog를 같이 사용한다. select a.group#, a.thread#, a.sequence#,b.member, a.bytes/1024/1024 "MB", a.status , b.status, a.archived from v$log a , v$logfile b where a.group# = b.group# GROUP# THREAD# SEQUENCE# MEMBER MB STATUS STATUS ARCHIV --------- ---------- ---------- ---------- ---------- --------------- ----------- ------ 4 2 10 /dev/raw/raw13 ..
Redo Log 상태 조회 Redo Log 상태 select a.group#, a.thread#, a.sequence#,b.member, a.bytes/1024/1024, a.status , b.status, a.archived from v$log a , v$logfile b where a.group# = b.group#