[ Oracle SQL튜닝. 성능튜닝 Tool ]

 

1. DESC PLAN_TABLE

 

2. DBA가 PLAN_TABLE만들기

    - 방법 1

      > CREATE PUBLIC SYNONYM PLAN_TABLE FOR SYSTEM.PLAN_TABLE;

    - 방법2

      > @C:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\utlxplan.sql

 

3. DBA가 모든사용자에게 권한부여

    > GRANT ALL ON PLAN_TABLE TO PUBLIC;

 

4. 성능Tool종류 4가지

     1. SQL Trace

     2. Explan Plan

     3. Autotrace

     4. DBMS_XPLAN

 

5. 성능 Tool 특징

    1. Explan Plan

         - 사용하기 번거로운 단점

    2. Autotrace

         - 편리한 Tool

          - SQL Trace보다 자유로움.

    3. SQL Trace

       - 필수적인 Tool

     4. DBMS_XPLAN

         -Oracle 9i이후 버전부터 지원 - 사용편리, 유용

 

6. Explan Plan

 

7. Autotrace

    a. Autotrace설치방법 (dba권한 필요)

        dba>@C:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\plustrce.sql;

    b. Autotrace방법으로 실행계획보기

         sql>SET AUTOTRACE ON;

         sql>SELECT * FROM DUAL;

    c. Autotrace 수행결과 3가지 그룹

        1. SQL 실행결과

        2. SQL 실행계획과 Predicate Information

        3. SQL 실행 시 사용한 자원통계정보

 

8. SQL Trace

    a. Trace파일 생성

        ...

    b. 수행결과  3가지 그룹

        1. SQL문장

        2. SQL처리 단계별 자원사용량과 시간정보

        3. SQL 실행계획과 각 단계별 처리된 Rows수와 Logical ? Physical I/O 및 시간

    c. SQL처리 단계별 자원사용량과 시간정보

        1. count

            - DBMS Call을 의미하며 1개의 sql실행시 4번의 DBMS Call이 발생

        2. cpu

            - DBMS Call을 처리하기 위해 사용한 CPU시간

        3. elapsed

            -

        4. disk

            - sql을 처리하기 위해수행된 Physical Read한 Block의 개수

        5. query

            - Logical Read이며 주로 데이터 조회인 Select연산을 위해 읽어 들인 Block개수

        6. current

            - Logical Read이며 주로 데이터 수정인 DML연산을 위해 읽어 들인Block의 개수

        7. rows

            -

        8. Fetch . SELECT시 만들어진 결과 데이터를 Client에게 보내는 행위

                     . 1회 실행 시 1개의 Row를 가져오지만 Fetch회수가 2인 이유는 마지막 데이터를

                       읽은 후 다음 데이터의 존재 유무를 알기 위해 한번 더 Fetch를 하기 때문.

                     . 먄약, Fetch 10번이고, rows가 10,00이면

                       db는 was에 약(10,000/10) = 1,000건씩 전송했다는 의미

        9. Parse . Sort Parsing하지 않고, hard parsing할 경우 count가 1이 나옴

                      . Misses in library cache during parse과 동일한 숫자임

 

         a. Misses in library cache during parse

             . sql을 aprse하는 동안에 library cache안에서 Miss했다는 뜻.

               즉, Soft Parsing이 아닌 Hard Parsing했을 때 1 이라는 숫자가 조회됨

             . Parse결과절과 동일한 숫자임        

 

 

    

    

 

 

9. SPCPKG

    a. 설치

         sql>CONN SYS AS SYSDBA

         sql>@%ORACLE_HOME%\RDBMS\ADMIN\SPCREATE.SQL

    b. 설치확인

        탐색기 > @%ORACLE_HOME%\RDBMS\ADMIN\spcpkg.lis  파일 확인

    c. 보고서

        sql>conn perfstat    --perfstat : 설치시 id

         ....생략...

    d. 성능모니터링

        sql> conn perfstat/perfstat

        sql>execute statpack.snap;    --구간모니터링 시작

        .. 업무수행...

        sql>execute statpack.snap;    --구간모니터링 종료

 

10. 추가

     . AUTOTRACE나 Explain Plan을 통해서 나타나는 실행계획은 예상실행계획이고

     . SQL Trace를 통해서 나타나는 실행계획은 실제실행계획이다.

 

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

Oracle.PL/SQL(Anonymous Block, Stored Block)  (0) 2018.02.24
Oracle SQL튜닝. Optimizer  (0) 2018.02.24
Oracle SQL튜닝. 접근경로(Access Path)  (0) 2018.02.24
Oracle 기본 내용  (0) 2018.02.20
Oracle - db link  (0) 2018.02.10
Posted by 농부지기
,

[ Oracle SQL튜닝. 접근경로(Access Path) ]

 

1. Access Path 종류

    a. Direct Access

    b. Indes Scan

    c. Full Table Sacn

 

1. Direct Access

    a. ROW_ID를 이용한 DATA 접근

 

2. Index Scan 세분화

    a. UNIQUE SCAN

         - 데이터를 1건 찾은 후 동일한 중복값이 있을 수 없기 때문에 검색을 바로 중지함

         - 예) unique index key가 존재하는 컬럼에 = (equal)조건일 경우

                 SELECT * FROM EMP_TABLE WHERE emp_no = 1234;

    b. RANGE  SCAN

        - Equal조건에 의한 Index Range Scan

          . 동일한값이 존재 할 수 있기 때문에 해당 조건에 1개 이상의 값을 리턴 할 수 있음.

          . 예) non unique index key가 존재하는 컬럼에 = (equal)조건일 경우

                SELECT * FROM EMP_TABLE WHERE emp_name = '강감찬';

        - 범위 검색 조건에 의한 Index Range Scan

          . 예) SELECT * FROM EMP_TABLE WHERE emp_no > 1234;

        - 테이블에 접근하지 않는 Index Range Scan

          . 예) SELECT emp_no FROM EMP_TABLE WHERE emp_no > 1234;

    c. FULL SCAN
        - Index Fast Full Scan과 Index Full Scan이 존재

        - 인텍스 Block을 처음부터 끝까지 읽기

        - 예) SELECT /*+ USER_MERGE(emp_large, depart) */  dname, ename, job_sal

                   FROM emp_large a, depart b

                 WHERE a.deptno = b.deptno ;

    d. SKIP SCAN

    e. FAST FULL SCAN

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

Oracle SQL튜닝. Optimizer  (0) 2018.02.24
Oracle SQL튜닝. 성능튜닝 Tool  (0) 2018.02.24
Oracle 기본 내용  (0) 2018.02.20
Oracle - db link  (0) 2018.02.10
실행계획 - join  (0) 2018.02.10
Posted by 농부지기
,

ROWID : Pseudo Column(가상컬럼)
Soft Parsing : 기존 parsing된 sql실행계획을 기준으로 sql수행
Hard Parsing : 기존 parsing된 sql이 존재하지 않아 신규로 실행계획을 생성 후 sql수행
Select수행구조
  . Data Buffer Cache
  . Cache :
 
SQL 수행과정
  . Parsing -> Execute -> Fetch

Logical Read : 메모리상에서 읽는 것

                        Current + Query

Physical Read : 데이터파일을 읽는 것

                          DISK

 
Server Process
   . Dedicated Server Process : User Process와 1:1로 연결되는 방식
                                Default option
   . Shared Server Process    : 1개의 Server Process를 여러 User가 공유하는 방식
  
실행계획 보는 방법
  . EXPLAIN PLAN명령어
  . AUTOTRACE OPTION
  . SQL Trace & TKPROF

Parallel Process
  . 힌트 : /*+ PARALLEL(TABLE명, Process갯수) */

 

 

대량의 데이터 조회 시

  . Array Fetch 의 개념 필요

  . 부분범위 처리와 전체범위 처리 적절하게 사용해야 됨

      - 부분점위 처리 : 10만 row를 보여줘야 될 때 1만row씩 client에 전송하는 방식

      - 전체범위 처리 : 10만 row를 부여줘야 될 때 10만 row 전체는 한번에 client에 전송하는 방식

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

Oracle SQL튜닝. 성능튜닝 Tool  (0) 2018.02.24
Oracle SQL튜닝. 접근경로(Access Path)  (0) 2018.02.24
Oracle - db link  (0) 2018.02.10
실행계획 - join  (0) 2018.02.10
자주 사용하는 SQL  (0) 2018.02.10
Posted by 농부지기
,

 

 

[ jenkis설치 ]


1. 정의
   - Build Automation (빌드 자동화)
   - 웹 어플리케이션이다.
   - 서블릿 컨테이너가 필요하다.
   - 약 400개 이상의 플러그인을 확장할 수 있다.
   - 애자일방법론 기법으로 jenkins Release
2. 기능
   - 저장소와 통합관리 (Integrate with repository)
   - 소스코드 체크아웃 (Checkout the codes)
   - 분산 빌드 (Distributed Builds)
   - CI 서버는 소스 저장소에 새로게 체크인된 소스코드를 지속적으로 통합하여 빌드한다.
   - 단위 테스트를 수행하고 실패하면 빌드를 취소한다. (선택적)
   - 테스트 보고서 생성 (Generate test report)
   - 실행결과 통보 (Notification)
   - 산출물 저장소에 산출결과를 저장 (Archive and store in artifact repository)
   - 빌드 결과를 다른 서버로 배포(Deploy)한다. (선택적)
 
3. 종류
   - LTS Release : 12주마다 선정되는 안정적인 릴리즈 버전 (추천)
   - Weekly Release : 매주 업데이트 되는 다소 불안정적일 수 있는 버전
4. download
   - https://jenkins.io
   - LTS > Windows 버전 download
5. 파일명
   - 다운로드 파일 : jenkins-2.89.1.zip
   - 압축해제 파일 : jenkins.msi
6. 설치 요구사항
   - 웹 어플리케이션 버서 (Tomcat, JBoss, ..)
   - 빌드 도구 (Maven, Ant)
   - 소스 버전관리 도구 (CVS, SVN, Git, ...)
7. 설치
    - 설치파일 : jenkiins.mis
    - Folder : C:\Jenkins\
8. jenkins 설정
    - port 변경
       . default가 8080인데, tomcat과 충돌발생으로 8086으로 변경
       . 파일 : C:\Jenkins\jenkins.xml
    -
9. jenkins 서비스 start
    - 첫 설치 후 jenkins가 자동 start되지 않는다.
    - 제어판 > 관리도구 > 서비스 > Jenkins 존재 > [시작]

10. Git 설치
    - url : https://www.git-scm.com/
    - 파일 : Git-2.15.1.2-32-bit.exe
    - 설치폴더 : C:\Git
 
10. jenkins 접속 (첫번째 방법) - 자체 접속
    - http://localhost:8086
    - Admin pw :
      . 첫 Login화면에서 [C:\Jenkins\secrets\initialAdminPassword]이 라인이 보인다.
        이 문자열을 복사 후 explore 주소란에 붙여넣고 enter를 치면 password를 볼 수 있다.
      . [Continue]
      . 읍스 난 접속 불가
        그래서 tomcat연동으로 전환

11. jenkins 접속 (두번째 방법) - Tomcat과 연동
     * Tomcat과 연동
     - tomcat 설치(64bit)    : apache-tomcat-8.5.12_64
     - C:\Jenkins\jenkins.war 파일을 -> \apache-tomcat-8.5.12_64\webapps\  밑으로 붙여넣는다.
     - jdk, jre 설치(64bit)    : jdk1.8.0_121, jre1.8.0_121
     - 환경변수 추가 : JRE_HOME  -> C:\Java(x86)\jre1.8.0_121
     - tomcat start  (cmd를 이용해서 '\apache-tomcat-8.5.12_64\bin\startup.bat' 실행
     - jenkins접속 url : http://localhost:8080/jenkins
     - pw : C:\Users\farmerkyh\.jenkins\secrets\initialAdminPassword
     - pw입력 후 [continue]
     - [Customize Jenkins] - 아래 버튼 2개 존재
       . Install suggested plugins : 권장설치
       . Select plugins to install : 사용자설치
        (권장설치)버튼 클릭
     - 여러가지 plugin 기능이 설치 됨
     - Create First Admin User
        계정명 : jenkins
        암호    : jenkins
        이메일주소 : 입력필수(차후 언제 필요할지 몰라서)

12. jenkins - Maven으로 빌드하여 Tomcat으로 배포 설정
     - Main화면.좌측메뉴 > Jenkins관리 클릭
       . 정의 : jenkins의 모든 설정을 관리하는 페이지
     - [Global Tool Configuration] 클릭
       . JDK -> [Add JDK]
          - [ ] Install automatically : 체크 해제
          - Name : jdk1.8.0_121
          - JAVA_HOME : C:\Java(x86)\jdk1.8.0_121
       . Maven
         - Name : hrMaven
         - [v] Install automatically : 자동설치 됨
         - Install from Apache. Version[3.5.2]
       . [Save]

       .
       .
       .
       .
       .

12. jenkins - 새로운 job만들기
     - Main화면.좌측메뉴 > 새로운 Item 클릭
       . name [ newHR ]
       . [Freestyle project] 버튼 클릭
       . [OK] 버튼 클릭
     - [General]
       .
       .
       .
       .
       .
       .
       .

 

 

 


 

Posted by 농부지기
,

[ Nexacro.function - Dynamic ]

 

 

0. 아래에서 사용될 공통 함수   

   

 

1. Dynamic하게 함수 찾기

    1. 문자열을 이용해서 함수 얻기

        . 이때 func는 함수 object가 된다.

        . var func = this["fn_getFuncName"];  

 

        . 위에서 얻은 함수명을 실행시키기

        . func();

 

        . 결과가 function이면 함수 임

        . if (func && typeof(func) == "function) 

 

 

    2. 현재 form, 상위 form에 대한 funciton 찾기

        var find = "function_name";

        var value = this.lookup(find);

        trace(typeof(value)); 

        . trace결과 : funciton

 

    3. form에 선언된 함수목록을 배열형태로 가져오기

       . 현재 화면에 함수 목록

           var arr = this.gfn_GetFunctionListName(this);

       . div내부 form에 함수 목록

           var arr = this.gfn_GetFunctionListName(this.div_name);

       . tabpage내부의 함수 목록

           var arr = this.gfn_GetFunctionListName(this.Tab00.tabpage1);

       . application 함수 목록

           var arr = this.gfn_GetFunctionListName(application);

       . 공통함수

       

 

2. Dynamic하게 form변수 찾기

    1. 현재 form, 상위 form에 대한 form변수 찾기

        var find = "form_variable_name";

        var value = this.lookup(find);

        trace(typeof(value)); 

        . trace 결과 : string,  number,  function 등

 

    2. form 에 선언된 변수를 배열 형태로 가져 오는 함수

       . 현재 화면에 함수 목록

           var arr = this.gfn_GetValueList(this);

       . div내부 form에 함수 목록

           var arr = this.gfn_GetValueList(this.div_name);

       . tabpage내부의 함수 목록

           var arr = this.gfn_GetValueList(this.Tab00.tabpage1);

       . application 함수 목록

           var arr = this.gfn_GetValueList(application);

       . 공통함수

       

 

3. 화면에 적용된 Event 목록 찾기

   

Posted by 농부지기
,

[ MariaDB.실행계획 ]

 

 

2. 공식 URL

    . https://mariadb.com/kb/en/library/explain/

    . https://mariadb.com/kb/en/library/analyze-and-explain-statements/

 

 

Posted by 농부지기
,

[ MariaDB. View 속도 개선 ]

 

Mysql (mariaDB) 에서 View를 사용할때 굉장히 빠른(0.1 초이하) 처리속도의 쿼리를 View그대로 옮길 경우

 

처리 속도가 현저하게 저하되는 경우가 종종 발생합니다.

 

일반적으로 알려진 mysql view 처리속도에 영향을 준다는 "ALGORITHM" 옵션을 변경하여도 이 부분의 해결되지 않습니다.

 

이런 현상이 발생하는 가장 큰 이유는 바로 subQuery  입니다.

 

mysql view 는 실행시 임시 테이블을 생성하는데 이때 subQuery 속도 저하를 일으킵니다.

 

따라서 대응 방법은 아래와 같습니다.

 

======================= 대응방안 ===================

1. subQuery join 쿼리로 대체

2. subQuery 로 처리된 부분을 fucntion 등으로 대체

Posted by 농부지기
,

[ MaraiDB.임시 테이블 ]

 

1. 정의

    . 임시테이블 생성, 조회 및 삭제

    . 세션이 종료되면 테이블은 자동 삭제 됨

 

2. 방법1 - CREATE문장

    - 임시테이블 생성

   

 

   - 임시테이블에 저장, 조회, 삭제

   

 

    - 임시테이블 제거

    

 

3. 벙법2 - SELECT문장

    - 임시테이블 생성

   

 

    - 임시테이블 조회

   

   

    - 임시테이블 제거

    

Posted by 농부지기
,

[ MariaDB.System Table 목록 ]

 

 INFORMATION_SCHEMA.ROUTINES

 Function, ..  목록

INFORMATION_SCHEMA.TABLES

 Table 목록

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   

 

 

 

Posted by 농부지기
,

[ MariaDB 관리 Tool ]

 

 

1. Tool목록

    . MONyog

    . TOAD FOR MYSQL

    .

 

2. 참고 URL

    - http://cafe.naver.com/mariadbkorea/61

 

 

 

'(DB) MariaDB > 기본정의' 카테고리의 다른 글

MariaDB. 참고URL  (0) 2018.02.14
Posted by 농부지기
,