전체 글 (31) 썸네일형 리스트형 07. 테이블 액세스 최적화 07. 테이블 액세스 최적화 >>>>>> 아래 SQL 문을 실행 계획을 분석하고 튜닝해보자 SELECT /*+ index(c(cust_credit_limit)) */ cust_id, cust_last_name, cust_year_of_birth, cust_city, country_id FROM customers c WHERE cust_credit_limit BETWEEN 1500 AND 3000 AND cust_year_of_birth = 1990 ; @xplan > INDEX RAGE SCAN으로 A-Row가 19309 행이 나옴. 그런데 이후 테이블 조건식에서 A-Row가 3개만 남음 -> 인덱스(조건)가 데이터를 줄이지 못함 -> 해당 조건의 선택이 잘못된 것이다. > .. [SQL 튜닝] 8장. 조인 튜닝 방법론 상황에 따라 적절한 조인 방법을 사용하는 것도 SQL 튜닝에 중요한 요소이다. 참고 사항 TABLE ACCESS BY INDEX ROWID 단계는 인덱스를 사용하여 ROWID를 얻고, 이것으로 테이블 레코드에 빠르게 접근한다. 이미 인덱스나 데이터가 버퍼에 로드되어있으면 디스크 I/O가 줄어들고 성능이 향상된다.Buffers는 쿼리 실행 단계에서 메모리(버퍼 캐시)로 읽어온 데이터 블록의 수이다. 이는 디스크 I/O로 메모리에 로드한 데이터 블록 수이다. 만약 이미 데이터가 버퍼에 올라와있다면 Buffers는 0이다.-- xplan.sqlset linesize 200set pagesize 1000 SELECT * FROM table(dbms_xplan.display_cursor(null,null,'A.. [SQL 튜닝] 4장. 인덱스 사용 인덱스인덱스는 검색 속도를 늘리기 위해 [컬럼값, ROWID]를 정렬하여 저장한 객체이다.루트/브랜치/리프 블락의 B*-트리 구조로 관리된다. ROWID를 이용해서 테이블에 랜덤 액세스하므로 불필요한 I/O를 줄일 수 있다.인덱스에 포함된 모든 컬럼이 NULL인 엔트리는 인덱스에 저장되지 않는다. 따라서 인덱스에 대한 ‘IS NULL’ 조건은 풀 테이블 스캔을 한다.ROWIDROWID에는 데이터가 저장된 파일, 데이터블럭, 블럭 안에서의 행번호 정보가 있다. DBMS_ROWID 패키지의 ROWID_RELATIVE_FNO, ROWID_BLOCK_NUMBER, ROWID_ROW_NUMBER로 확인할 수 있다.INSERT 시에는 빈 공간에 행을 입력하므로 특정 컬럼에 대해 순차적으로 입력되지 않으므로 특정 영.. [SQL 튜닝] 3장. 실행 계획 생성 실행 계획실행 계획은 쿼리 실행의 순서를 나타내는 행 소스 트리를 의미하며 Plan Generator에 의해 생성된다. 행 소스 트리는 다음 사항을 포함한다.참조하는 테이블 순서각 테이블에 대한 액세스 방법조인으로 영향을 받는 테이블에 대한 조인 방법데이터 작업[필터, 정렬 또는 집계]EXPLAIN PLAN 문은 DML[SELECT, INSERT, UPDATE, DELETE]에 대해 옵티마이저가 선택할 예상 실행 계획의 행 소스 트리를 PLAN_TABLE에 저장한다. 여기에는 각 작업의 비용 및 카디널리티, 파티셔닝, 병렬 실행 정보도 포함된다. 그러나 실제 실행 시에는 데이터와 환경에 따라 다른 최적의 실행 계획이 선택될 수 있다는 점을 알고 있자.실행 계획 저장옵티마이저가 선택한 실행 계획 정보는 다.. [SQL 튜닝] 2장. 옵티마이저 이해 SQL 영역사용자가 입력한 SQL은 서버 프로세스에서 구문 분석 된 후, PGA[Program Global Area]의 프라이빗 SQL 영역과 SGA[Shared Global Area]/공유 풀의 라이브러리 캐시에 공유[Shared] SQL 영역에 저장된다. 프라이빗 SQL 영역의 SQL 문은 옵티마이저가 실행 계획을 결정하고, 파싱된 SQL 문과 그와 매핑된 실행 계획은 공유 SQL 영역에 저장된다. 공유 SQL 영역의 SQL은 모든 서버 프로세스에서 공용으로 사용 가능하므로 성능 향상과 리소스 최적화에 도움을 준다. Shared Pool에 더 이상 공간이 없을 때는 LRU[Least Recently Used] 알고리즘으로 항목 해제를 수행한다. SQL 문 처리 과정사용자의 SQL 문은 다음 절차로 처.. [리눅스 활용] 9장. 퍼미션과 슈퍼 사용자 표준 입출력프로그램을 실행하면 자동으로 데이터의 입출력을 위한 통로가 열 [리눅스 활용] 11장. 표준 입출력과 파이프라인 [2] 파이프라인파이프라인은 명령어의 표준 출력을 다른 명령어의 표준 입력으로 리다이렉션하는 기능이다. 파이프 기호[ | ]를 사용하며 " | | " 형식으로 작성한다.jpark@LAPTOP-3H85AI8N:~$ ls -al /etc | cat -n | less파이프라인 [표준 에러 출력]기본적으로 파이프라인은 다음 명령어에 표준 출력만 전달한다. 표준 에러 출력을 전달하기 위해서는 표준 출력과 동일한 곳으로 리다이렉션을 해야한다.jpark@LAPTOP-3H85AI8N:~$ ls -al /xxxx | cat -nls: cannot access '/xxxx': No such file or directoryjpark@LAPTOP-3H85AI8N:~$ ls -al /xxxx 2>&1 | cat -n 1 l.. [리눅스 활용] 11장. 표준 입출력과 파이프라인 [1] 표준 입출력프로그램을 실행하면 자동으로 데이터의 입출력을 위한 통로가 열린다. 이것을 표준 입출력 채널이라 한다.표준 입력 [stdin]: 프로그램이 데이터를 전달 받는 채널, 기본값으로 터미널에 연결표준 출력 [stdout]: 프로그램이 실행 결과를 출력하는 채널, 기본값으로 터미널에 연결 표준 에러 출력 [stderr]: 프로그램 실행 중 발생하는 에러 메시지를 출력하는 채널, 기본값으로 터미널에 연결리눅스에서는 프로그램의 입출력을 표준 입출력으로 추상화하여, 입출력 대상에 대해 신경 쓸 필요 없이 유연하게 동작할 수 있다.리다이렉션표준 입출력의 연결 대상을 변경하는 것을 리다이렉션이라하며 셸이 커맨드 라인을 해석해서 이를 처리한다.표준 입력의 리다이렉션cat 명령의 표준 입력은 기본적으로 터미널로 .. 이전 1 2 3 4 다음