[ Nexacro.Grid - cell 좌표 ]

 

1. 정의 : grid에서 특정cell의 expandimage등을 클릭하면 필요에 따라 popupdiv를 띄우게 된다.

             이때 클릭한 cell의 좌표를 찾아서 popupdiv를 띄워 줘야 된다.

 

2. 예)

var nHeadSize = obj.getFormatRowSize(-1);   //head height 구하기

 

var arrCellRect = obj.getCellRect(e.col, e.cell);   //grid col, cell 위치 구하기
var nDivX = system.clientToScreenX(obj, arrCellRect.left) - system.clientToScreenX(application.mainframe, 0);
var nDivY = system.clientToScreenY(obj, arrCellRect.bottom) - system.clientToScreenY(application.mainframe, 0);

 this.popup_Filter.trackPopup(nDivX, nDivY);   //grid 클릭한 col, cell 에 popup창 띄우기

'Nexacro-Grid > Grid' 카테고리의 다른 글

Nexacro.Grid - cell 좌표  (0) 2018.01.16
Nexacro-Grid. format  (0) 2017.08.18
nexacro.Grid cell drag & drop  (0) 2017.03.30
Grid.sort 개발중  (0) 2017.02.24
Nexacro Grid - 한컬럼에 여러줄 보여주기  (0) 2017.01.22
Nexacro Grid -Combo Filter (필터) 처리  (0) 2017.01.22
Posted by 농부지기

   - 실행계획테이블에 저장된 실행계획을 조회

     ----------------------------------------------------------------------

[ Oracle-실행계획 ]

 

1. Optimizer

    . RBO (Rule Based Optimizer)

       - 규칙기반

       - Oracle 7까지 기본 Optimzer방식이였음. 현재는 RBO방식을 사용하지 않음

    . CBO(Cost Based Optimzer)

       - 비용기반

       - CPU사용시간, Memory사용량등을 기반으로 수행

       - DB, Schema등 통계정보 관리


2. 실행계획 초기설정 방법

    . sql수행 후 실행계획을 보려면 아래 파일을 수행하면 됨

    . plan table생성 및 plustrace권한 부여

    . 파일위치 : C:\app\user\product\11.2.0\dbhome_1\sqlplus\admin\plustrce.sql

    sys>@     --@를 key in 후 위 파일을 drag & drop 해서 sqlplus창에 이동

                   --@는 파일내부의 내용을 수행하는 예약어

                   --sys계정만 plustrce.sql 수행 가능 (즉, 실행계획 수행되도록 설정가능)

                   --이 설정을 해야 만 set autotrace on;등을 할 수 있음.

    sys>grant plustrace to scott;   --scott에 권한부여

                                              --이 권한이 부여 되어야 scott사용자는 set autotrace on;을 할 수 있음.


    scott>set autotrace on;   --sys에서 권한이 부여되었기에 정상수행

                                      --이후 수행되는 sql들은 실행계획도 같이 조회 됨


3. 실행계획 이해방법 1

    . 들여쓰기 존재

    . 맨 마지막 level 부터 수행

    . 같은 level에서는 위쪽라인부터 수행


3. 실행계획 이해방법 2

    . INDEX RANGE SCAN

      - index 범위 scan

    . TABLE ACCESS BY INDEX ROWID

      - index의 rowid를 이용해서 table access

      - 조건절에 rowid를 이용하게 되면 index scan없이 바로 table access가능

    . RBO 수행 성능 Rank

       1. Single row by rowid

       2. Single row by Cluster Join

       3. Single row by Hash Cluster key with Unique or Primamry key

       4. Single row by Unique or Primary Key

       5. Clustered Join

       6. Hash Cluster Key

       7. Indexed Cluster Key

       8. Composite Index

       9. Single-Column Indexes

       10. Bounded Range Search on Indexed Columns

       11. Unbounded Range Search on Indexed Columns

       12. Sort Merge Join

       13. MAX or MIN of Indexed column

       14. ORDER BY on Indexed Column

       15. Full Table Scan




1. INDEX RANGE SCAN : index는 존재 하지만 nonunique index인 경우 equal 검색할 때 index range scan으로 수행

2. INDEX UNIQUE SCAN : unique index인 경우 equal 검색할 때 index unique scan으로 수행

3. Full Table Scan : 상당히 느리지만 DB는 읽을때 한번에 128개 block(default size)만큼 읽어서 검색한다.

                       생각보다 큰 size를 읽어 메모리에서 검색하기 때문에 때론 빠를 수 있다.

                       (show parameter db_file_multi)

                       HWM(high water mark)까지 읽어 들인다.

                       


===========================================================


1. 실행계획 - Statistics

    . recursive calls : (참고, db입장에서 sql을 call이라고 인식함)

                            요청된 sql에 대한 권한등을 db입장에서 내부적(table)으로 처리하는 sql수행 횟수

    . db block gets

       - CURRENT mode에 있는 block의 데이터를 읽은 숫자

       - TKPROF 레포트에서 current에 해당하는 값이구요.

       - current mode에서는 곧 수정될 Segment header나 block을 얻을 때 일어납니다. 

       - INSERT, UPDATE, DELETE에서 데이터 쿼리부분이 아니라 

          수정될 값을 읽을 때 나타나는 숫자입니다.

       - select문일 경우에는 Full table scan일 경우 Segment header를 읽을 때 나타납니다. 

    . consistent gets

       - consistent mode에서 db block read를 수행한 숫자

       - TKPROF 레포트에서 query에 해당하는 값입니다. 

       - consistent라는 말은 read consistency와 관련이 있는데 즉 읽기 일관성이 보장되는 상황에서 읽는 숫자라는 것입니다. 

       - 데이터를 수정하지 않고 단지 읽기만 하기때문에 lock이 발생하지 않습니다. 

    . physical reads : disk에서 읽은 block수

    . redo size : 

    . bytes sent via SQL*Net to client : 

    . bytes received via SQL*Net from client : 

    . SQL*Net roundtrips to/from client : 

    . sorts (memory)  : memory에서 정렬 수

    . sorts (disk)       : disk에서 정렬 수

    . rows processed : 조회한 record수


=========================================================== 



1.EXPLANIN PLAN

  - PLAN_TABLE

    . oracle 10g 이전 버전

    . 관리자가 생성해야 됨

    . 생성파일 : C:\app\user\product\11.2.0\dbhome_1\RDBMS\ADMIN\??.sql

  - SYS.PLAN_TABLE$ : oracle 10g이후 버전 부터는 자동생성되어 있음.


  - DBMS_XPLAN.DISPLAY('테이블명', '문장ID', '형식')

    . package를 통해서 실행계획을 볼 수 있음

    . 실행계획테이블에 저장된 실행계획을 조회

    . DISPLAY : 예측 실행계획을 보여줌.
    . DISPLAY_CUSOR : 실측한 실행계획을 보여줌.
     ----------------------------------------------------------------------
      구분            형식               설명
     ----------------------------------------------------------------------
    . DISPLAY :     BASIC     Operation id, operateion name, option등 가장  기본적인 최소한의 정보를 출력
                      TYPCIAL   기본설정 값, 실행계획에서 얻고자 하는 대부분의 정보를 제공
                                   BSIC + ROWS, BYTES, OPTIMIZER COST, PARALLEL, PREDICATE등
                      SERIAL     TYPICAL과 동일(PARALLEL 제외)
                      ALL         사용자레벨에서 최대의 정보를 제공
     ----------------------------------------------------------------------
     . DISPLAY_CUSOR  ALLSTATS   실제 액세스한 행 수와 수행시간과 Read, Write정보제공
                                           (누적된 값 제공)
                            ALLSTATS LAST   마지막 정보만 제공
                            ADVANCED ALLSTATS LAST  DISPLAY_CURSOR에서 지원하는 모든정보
     --------------------------------------------------------------------- 

2. EXPLANIN PLAN 수행

  - SCOTT>explain plan

             set statement_id = 'FULL_EMP'

             for

             SELECT * FROM EMP;

  - PLAN 테이블에 'FULL_EMP' id 로 실행계획을 저장


3. EXPLAN 내역 보기

   - 아래 sql문장을 파일로 저장 후 수행하면 됨

     수행시 statement_id를 요구함 'FULL_EMP' 를 입력하면 됨

   - 

   COL PLAN FORMAT A30

   --SET VERIFY OFF

   ACCEPT statement_id PROMPT "문장 id 입력:"


   SELECT cardinality "ROWS",

             lpad('', level-1) || operation || '' || options || '' || object_name "plan"

      FROM PLAN_TABLE

   CONNECT BY prior id = parent_id

       AND prior statement_id = statement_id

    START WITH id=0

       AND statement_id = '&statement_id'

   ORDER BY id;


  - COL PLAN FORMAT A30 : PLAN 컬럼의 자리수를 30자리까지 조회 시켜줌.

  - SET VERIFY OFF  : 수행 후 '구', '신'이라는 목록이 안 보임



4. DBMS_XPLAN.DISPLAY('테이블명', '문장ID', '형식')

   - 실행계획테이블에 저장된 실행계획을 조회

   - SELECT *

       FROM TABLE(DBMS_XPLAN.DISPLAY('plan_table', 'FULL_DEPT', 'TYPICAL'));


5. SQL*TRACE

   - 사용자의 특정한 작업을 볼 수 있음

   > show parameter trace

   - 결과 : sql_trace : FALSE  로 되어 있음.

            TRUE : 현 db에서 수행되는 모든 sql문장 수행에 대한 실행계획을 모두 생성함


  - 현 session만 sql trace 수행

  - 권한 필요 ( SYS>grant alter session to scott; )

  SCOTT>ALTER SESSION SET SQL_TRACE=TRUE;     --현 Session을 기준으로 지금부터 수행된 sql에 대한 Trace 정보를 생성 시작

  SCOTT>SELECT EMPNO, ENAME, SAL FROM EMP;   --sql수행 하면 실행계획테이블에 실행계획이 저장됨

  SCOTT>SELECT EMPNO, ENAME, SAL FROM EMP WHERE EMPNO > 50; 


  - 수행 후 SQL TRACE 정보는

    : C:\app\user\diag\rdbms\orcl\orcl\trace\ 폴더 하위에 생성 됨

  - trace 파일 내용보기

   . 단순 notepad등으로 보면 너무 지저 분함

   . cmd 창에서 아래 처럼 수행하면 trace파일을 일정한 format(이쁘게 ^^)으로 test.txt 파일로 만들어줌.

   . sys=no : 실행계획 결과에서 Statistics 목록에서 recursive calls에 대한 정보는 생성안함.

   C:\tkprof orcl_ora_4336.trc test.txt  sys=no  

   C:\notepad test.txt


6. V$ dynamic performace view

   - 배우지 않았음.


(참고 : Berryz WebShare  (파일공유))






--sql trace

SELECT d.value || '/' || lower(c.instance_name) || '_ora_' || b.spid || '.trc'  "User Trace File"

FROM v$session a, v$process b, v$instance c, v$parameter d,

          ( select * from v$mystat where rownum = 1 ) e

WHERE a.paddr = b.addr

AND a.sid = e.sid

AND d.name = 'user_dump_dest' 

/



'(DB) Oracle 튜닝 > 쌍용튜닝교육' 카테고리의 다른 글

Oracle-실행계획  (0) 2018.01.16
튜닝-sql*plus 명령어 모음  (0) 2018.01.16
Oracle-튜닝 1일차  (0) 2018.01.13
Posted by 농부지기


[ sql*plus 명령어 모음 ]


0. sqlplus접속

    c:\sqlplus scott/tiger

    c:\sqlplus sys/oracle  as sysdba    --이때 sys 사용자는 반드시 sysdba, sysoper 중 하나로 접속해야 됨

 

1. 화면 설정

    > set linesize 200;   --조회결과를 200 자까지 넓혀줌. (cmd창 width도 조절필요)

 

2. SQL 수행 Log 파일 저장

    > save idx(파일명)  --최근에 수행된 sql문장이 idx.sql 파일에 저장됨

                                --저장파일 위치 : cmd창에서 sqlplus수행했던 경로에 저장 됨

    > save idx replace   --기존에 파일이 존재 시 replace함.

    > ed idx        --저장된 sql문장들을  메모장으로 보여줌

    > @idx         --저장된 파일을 읽어서 실행시켜줌.


    > set sqlprompt "_USER>"  --현재 접속 user id로 prompt를 설정


    > spool on   --spool 설정

    > spool T1(파일명)  --수행된 sql문장, 결과를 T1파일에 저장

                       --저장파일 위치 : cmd창에서 sqlplus수행했던 경로에 저장 됨

                      --spool off를 해야만 파일에 sql수행내역이 저장 됨

    > spool T1 append   --T1파일이 기 존재시 append함

    > spool off   --spool 설정 해제

                      --이때 sql수행내역이 저장 됨

 

3. Prompt

    > SET SQLPROMPT "_USER>"     --prompt를 접속user로 변경

    > set time on/off                          --프롬프트에 현재 시간 조회 및 제외

 

 

4. 실행계획

    . 실행계획 초기 설정 : 별도 문서 존재

    > set autotrace on                          --sql수행시 실행계획 조회 on

    > set timing on                                --sql 수행결과 시간 조회

 

    > show parameter optimizer           --optimizer_mode 보기

       - CHOOSE            : CBO, RBO 자동 선택 옵션

       - ALL_ROWS         : 전체 data가 빨리 나오는 기반으로 실행계획 생성 옵션.

       - FIRST_ROWS     : 첫번째 data가 빨리 나오는 기반으로 실행계획 생성 옵션.

       - FIRST_ROWS_n : n개  data가 빨리 나오는 기반으로 실행계획 생성 옵션.

 

70. 사용자추가 및 사용자내용 변경

    > create user dev

       identified by dev

       password expire;                      --사용자 추가

                                                         --expire : 첫 login시 바로 pw변경

    > alter user dev identified by "tiger";  --dev 사용자에 대한 password 변경

 

    . system> alter user scott     --약 v11부터는 scott 사용자는 존재 하지만 lock했음.

                                                 --그래서 scott사용자를 사용하려면 unlock을 해야 됨

        identified by tiger     --식별자를 tiger 로 설정(pw)

        account unlock;      --scott 계정 unlock 해제 (마지막 라인에는 ; [세미콜론 필요]

 

80. 권한 부여

    > grant create session to dev;

    > grant connect, resource to dev;   --접속권한 부여

    > grant plustrace to dev;                --dev에 plustrace권한 부여 (실행계획 권한부여)

 

 

81. 권한부여(테이블)

    > grant select on scott.emp to dev;  --dev에 scott.emp 테이블 select 권한부여

    > grant create table to dev;              --테이블 생성권한 부여

    > grant all      on scott.emp to dev;  --scott.emp 테이블의 모든 권한을 dev에 부여

 

    > alter user 유저명 default tablespace users quota unlimited on users;  --tablepsace권한부여

 

90. 설치환경 확인

    > show user

    > show parameter

    > show parameter background       --background가 포함된 parameter조회

    > show parameter user_dump_dest --dump 경로


91. 진단도구 

    - background process가 남기는 log

    - 시스템에 대한 이상징후 및 처리 결과등을 남김

    > show parameter user_dump_dest --dump 경로

      --경로path : C:\app\user\diag\rdbms\orcl\orcl\trace

    > show parameter core_dump

    > show parameter 


91. 진단도구2

    - 정의 : 보통 DB Server의 부하는 하루 중 특정시간대가 존재한다.

             그래서 부하가 시작하기 전과 부하가 종료한 후의 상태를 서로 비교해서 DB를 관리할 수 있다.

    - 진단방법 : 성능에 이슈가 있는 시점(시간)에 이유를 찾기 위해서 사용하는 도구

    - 진단정의 : 특정시간대의 DB Server에대한 상태를 관리(테이블에 저장)

    - 성능이슈 : 회사에서 보통 성능이슈가 있는 시간대가 동일(비슷)하다.

                  그래서 성능이슈가 발생하기 이전시점 ~ 종료시점 까지의 DB상태를 점검할 수 있다.

  

   - 성능이슈 이전시점 : 현상태 저장(시작)(테이블을 생성하여 사용되는 SQL문장등의 상태를 저장)

      >@C:\app\user\product\11.2.0\dbhome_1\RDBMS\ADMIN\utlbstat.sql


   - 성능이슈 발생종료시점 : 현상태 저장(종료)(임시테이블의 내용을 Report로 생성. 임시테이블 삭제)

      >@C:\app\user\product\11.2.0\dbhome_1\RDBMS\ADMIN\utlestat.sql


   - 최종결과는 sqlplus를 수행했던 폴더에  'report.txt' 파일로 생성됨

     . 시작시점의 상태와 종료시점의 상태를 저장해서 두 자료를 비교해서 DB의 차이점을 비교 분석

   - 만약, 파일이 만들어지지 않는다면  cmd창을 수행할때 '관리자권한으로 실행'하기로 하면 됨


   - 단점 : . utlbstat.sql 파일을 수행하면 임시테이블인 $ 테이블들이 생성 됨

             . sys 계정으로 만들기 때문에 항상 일반사용자보다 사용/성능에 우선순위가 부여되어

               일반사용자는 성능이 늦어 진다.

             . sys tablespace쪽에 만들어짐

   -위 단점을 보완 : statspack package 도구 존재

   - 참고 : 진단시작(utlbstat.sql 수행)을 시작했다고 해서 그때 부터 계속 진단테이블에 저장하는것은 아니다.

            이때 당시의 상태를 snapshop형태로 저장하는 것이다.


91. 진단도구2 - report.txt 파일 보기

    . 테이블 : stats$lib; 에 대한 결과

    . GETS : 요청

    . GET HIT RATI : 요청에 대한 memory에서 찾은 비율


92. 진단도구2 - statspack package

    - 정의 : 중요한 포인트(특정시점)마다 DB Server의 상태를 저장 함.

             각 시점간의 DB정보를 기준으로 서로 비교해서 차이점을 분석,비교해준다.

    - 장점 : utlbstat.sql 진단도구의 단점을 보안해서 나옴.

    - 파일 : spcreate.sql

    -수행. 진단시작

     . 사용자생성 : PERFSTAT

     . 성능테스트용 : sp package 생성  (desc statspack)

    >@C:\app\user\product\11.2.0\dbhome_1\RDBMS\ADMIN\spcreate.sql


    - db상태 저장

      . snap 과 snap간의 상태를 볼 수 있음.

    PERFSTAT>desc statpack            --생성된 sp package보기

    PERFSTAT>exec statspack.snap;    --현재의 db상태를 snapshop형태로 찍어서 저장

    PERFSTAT>exec statspack.snap;    --매일 하루에 한번식 수행


   - snapshop 정보 보기

     . 위쪽에 snapshop 목록이 보여줌.

     . 각 snapshop간에 db 상태정보를 볼 수 있다.

    PERFSTAT>@C:\app\user\product\11.2.0\dbhome_1\RDBMS\ADMIN\spreport.sql


    - statspace 도구 삭제

    SYS>@C:\app\user\product\11.2.0\dbhome_1\RDBMS\ADMIN\spdrop.sql


    - statspack package : schedular에 등록하기

      . 등록sql :   select instance_number into :instno from v$instance;

  dbms_job.submit(:jobno, 'statspack.snap;', trunc(sysdate+1/24/60,'MI'), 'trunc(SYSDATE+1/24,''HH'')', TRUE, :instno);


        . 앞쪽에 있는 날짜는 : 맨 첫 schedular가 시작하는 시간

        . 뒤쪽에 있는 날짜는 : 맨 첫 schedular가 수행된 후 계속 반복되는 수행간격 시간

                                 (예, SYSDATE+1/24/60  이렇게 한 경우 1분 간격으로 계속 수행 됨)

        . 만약, spauto.sql를 수행했는데 ' ..파일을 열 수 없습니다.' 라는 메세지가 나오면

         cmd창을 새로 열어서 'perfstat' user로 재 login하면 됨

         - 참고, autotrace 가 on 상태인 경우에 안될 수 있음. (set autorace off 수행 하면 됨)

    > @C:\app\user\product\11.2.0\dbhome_1\RDBMS\ADMIN\spauto.sql


   - statspace 테이블 목록 보기

     . 단점 : 너무 많이 나옴

   > SELECT * FROM TAB;

   

   - schedular 삭제

   >select job, what from user_jobs;   --job 목록보기

   >DESC DBMS_JOB

   >EXEC DBMS_JOB.REMOVE(23)    --job 제거



99. 기타

    > HOST       --sqlplus를 빠져 나와서 CMD창으로 이동.

                       --cmd창에서   EXIT를 하면 다시 sqlplus창으로 이동 함

 

    > connect sys/oracle as sysdba   --dba권한으로  sys계정 login

    > startup force                       --db restart. sys만 가능


    > ALTER SESSION SET NLS_LANGUAGE='AMERICAN';  --sql수행 후 결과등을 영문으로 조회

   
















'(DB) Oracle 튜닝 > 쌍용튜닝교육' 카테고리의 다른 글

Oracle-실행계획  (0) 2018.01.16
튜닝-sql*plus 명령어 모음  (0) 2018.01.16
Oracle-튜닝 1일차  (0) 2018.01.13
Posted by 농부지기