2010년 1월 31일 일요일

CPU 통계정보

--- CPU 통계정보 수집 ---


-- 통계수집 테이블 생성

begin

      dbms_stats.create_stat_table(

      ownname => USER

      , stattab => 'mystats'

      , tblspace => 'USERS'

      , global_temporary => FALSE

);

end;

/


-- 통계수집 on

begin

        dbms_stats.gather_system_stats(

        gathering_mode => 'start'

        , stattab       => 'mystats'

        , statid                => 'OLTP');

end;

/

-- 통계수집 off

begin

        dbms_stats.gather_system_stats(

        gathering_mode => 'stop'

        , stattab       => 'mystats'

        , statid                => 'OLTP');

end;

/


-- 통계 테이블 export

begin

   dbms_stats.export_system_stats('mystats','OLTP',USER);

   end;

/

-- 통계 테이블 import

begin

   dbms_stats.import_system_stats('mystats','OLTP',USER);

   end;

  /


또는 ..

execute dbms_stats.gather_system_stats('start');

execute dbms_stats.gather_system_stats('stop');


--- CPU costing 직접 설정 ---


begin

dbms_stats.set_system_stats('CPUSPEED',700);

dbms_stats.set_system_stats('SREADTIM',0.20);

dbms_stats.set_system_stats('MREADTIM',0.40);

dbms_stats.set_system_stats('MBRC',14);

end;

/

alter system flush shared_pool;


-- 실행 --

SQL> select
            pname ,pval1
    from
            sys.aux_stats$
    where
            sname = 'SYSSTATS_MAIN'
    ;

PNAME    PVAL1
------------------------------ ----------
CPUSPEEDNW       587.115789
IOSEEKTIM       10
IOTFRSPEED     4096
SREADTIM     .555
MREADTIM     .403
CPUSPEED     1180
--MBRC : 통계정보를 수집하면서 평균으로 읽은(multi block read count ) 개수  
MBRC    14
MAXTHR    23552



** SREADTIM 과 MREADTIM 이 1 미만일 경우 ( 0.0x ~ 0.99 )  

오라클 옵티마이져는 정확한 통계정보를 수립하지 못하며, NOWORKLOAD 또는 추가적인 계산 방법을 이용하여 Cost 를 계산하는것으로 보인다.

2010년 1월 29일 금요일

DB_FILE_MULTIBLOCK_READ_COUNT(MBRC)

출처 :   ( oracleclub.com )   http://wiki.oracleclub.com/display/DBSTUDY/DB_FILE_MULTIBLOCK_READ_COUNT                  

DB_FILE_MULTIBLOCK_READ_COUNT(MBRC)

  • 정의 : Full Table Scan 시에만 영향을 미치는 파라미터.     한번의 I/O 작업으로 읽어들이는 최대 블럭 수. Multi Block I/O 에 관련된 파라미터
  • 값 설정하기
    1. db_block size * db_file_multiblock_read_count <= 오라클의 최대 I/O 크기(64KB)
    2. default value : O/S에 따라서 다름 (Linux redhat itanium : 16)
      일반적으로 db_block_buffers와 Processes에 의해서 결정되며 4~32 정도가 많이 사용됨
    3. FULL TABLE SCAN과 DB_FILE_MULTIBLOCK_READ_COUNT
      FULL TABLE SCAN을 할 때에는 DB_FILE_MULTIBLOCK_READ_COUNT 이 설정된 만큼을 한꺼번에 데이터를 가져옴
      ex) DB_FILE_MULTIBLOCK_READ_COUNT=8 이고 db_block_size가 8k라면 8*8=64k 만큼을 한꺼번에 가져옴

      1. extent의 크기가 작을 경우 : multiblock I/O로 데이터를 읽지 않고 single block I/O를 사용해서 읽음 (I/O의 단위 : Block)
      2. extent안의 블록들이 db_file_multiblock_read_count 보다 작게 되면 db file sequential read(single block I/O시에) 라는 event 발생
      3. MBRC크기보다 큰 extent는 multiblock I/O로 읽다가 extent가 끝나는 부분에 MBRC크기 보다 작은 block이 남아있을 경우에는 single block I/O로 읽음
      4. full scan할 때에는 extent의 크기가 MBRC가 설정된 크기보다 작을 경우에는 single block I/O로 읽게 되므로 성능저하가 될 수 있고, MBRC가 설정된 값에 따라서 optimizer가 full scan or index scan 여부 결정
      5. 단점 : 이 파라미터가 크게 설정되어 있다면 블록을 읽어올 때, 설정된 값만큼 읽어오므로 buffer pool에서 다른 블록들이 flush될 수 있음

    4. INDEX SCAN과 DB_FILE_MULTIBLOCK_READ_COUNT
      1. Index scan시에는 db_block_size의 설정이 중요
      2. B-tree Index 에서 블록 크기가 8KB(db_block_size=8KB) 라면 2KB 인 경우보다 거의 4배 빨리 데이터를 읽음
      3. Index Block 의 Pctfree가 너무 크고 인덱스의 Entry Size 가 늘어나지 않으며 기존의 인덱스 값에 새로운 레코드가 더 이상 추가되지 않을 경우 : 공간의 낭비가 심하게 되므로 적절한 값으로 조정

      4. index range scan 을 위해 index full scan 이나, fast full index 을 피하는 방법
        • index full scan , FFIS 를 선택한 이유 : index 의 LEAFCNT(leaf block count)전체를 읽는 cost < branch level (BLEVEL) 의 cost, 또는 CLUFAC(clustering factor) 의 cost
        • 해결 방법
          • index 의 height 를 줄이기 위해 db_block_size를 늘림
          • ndex reorganization 수행
          • 임시적인 방법 : FFIS 나 full index scan cost 를 높이기 위해 index cost 를 결정하는 파라미터를 조정 (아래 3개의 파라미터 값을 작게 조정)

            fast_full_scan_enabled =false
            db_file_multiblock_read_count
            sort_area_size



  • System Statistics와 DB_FILE_MULTIBLOCK_READ_COUNT
    1. System Statistics가 없는 상황 : db_file_multiblock_read_count, optimizer_index_cost_adj와 같은 파라미터들이 Index Scan과 Table Scan중 어느 것을 선택할지를 결정하는데 큰 역할 함

    2. System Statistics가 정상적으로 수집된 경우 : DB_FILE_MULTIBLOCK_READ_COUNT 파라미터가 Optimizer의 비용 계산에 고려되지 않음.
      1. mbrc는 Optimizer에 의해 실행 계획이 생성될 때는 무시되지만 실제 Fetch과정에서 db_file_multiblock_read_count 크기만큼 Multi Block I/O함
  • 10g R2 MBRC를 대신하는 parameter
    1. _db_file_optimizer_read_count : System Statistics가 없는 경우에 Optimizer가 비용을 계산하기 위해 사용. System Statistics가 수집된 경우에는 이 값은 무시
    2. _db_file_exec_read_count : 쿼리를 실행하는 과정에서 Multi Block I/O를 수행할 때 한번에 읽을 블록 수를 결정. System Statistics의 수집 여부와 무관하게 사용





** 관련자료 :

   

2010년 1월 11일 월요일

linux block trace [blktrace]

block trace 란 리눅스에서 Disk I/O 가 일어날때,
linux 하위 level 에서 어떻게 Block 단위의 I/O 가 일어났는지 알아낼수 있는 Tool
DB 접근에서 주로 DB recovery 나 join 시의 DIsk I/O 패턴을 알아내는데 유용하다.

1. yum install blktrace-1.0.1-3.XX .. 를 인스톨 한다. ( block trace 뜨는 프로그램 )
http://rpm.pbone.net/index.php3/stat/3/srodzaj/1/search/blktrace 


2. seekwatcher 다운로드 ( 생성한 block trace 를 image 로 정리해서 보여줌 )
   - 미리 설치할 package : http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-0.99.1/matplotlib-0.99.1.2.tar.gz/download 
 
   - seekwatcher http://oss.oracle.com/~mason/seekwatcher/seekwatcher-0.12.tar.bz2 

3. seekwatcher 압출을 풀면 seekwatcher 란 실행파일이 생성 됨 이 파일을 /usr/bin 에 복사후 사용

blktrace 실행


1. mkdir /trace
2. blktrace -d /dev/target_device
3. cd /trace 에 device_name.blktrace 파일이 생성 된다.

seekwatcher 실행


seekwatcher  -t trace파일


exception


 

/usr/lib/python2.6/site-packages/matplotlib/rcsetup.py:117: UserWarning: rcParams key "numerix" is obsolete and has no effect;
 please delete it from your matplotlibrc file
  warnings.warn('rcParams key "numerix" is obsolete and has no effect;\n'
   

  cd $HOME
  rm .matplotlib/



[root@ljh8324-skku /]# blktrace -d /dev/sdb1
Invalid debug path /sys/kernel/debug: 0/Success

$ mount -t debugfs debugfs /sys/kernel/debug

 


 








fedora 부트로더 복구


1. fedora cd 를 넣고 F5 ( rescue ) 모드로 진입 ..

2. shell 모드로 진입후 /sbin/grub 실행

3. grub > root (hd0, 1) 부터 해당하는 리눅스 파티션이 나올때 까지 실행 (hd0,1 ~ n )

4. setup (hd0)

5. quit 후 재부팅 ..