Reorganizing and Rebuilding Indexes

Slides:



Advertisements
Similar presentations
1 SQL 정보보호학과 양 계 탁. 2 SQL 개요 SQL 개요 3 Database u 연관된 데이터들의 집합 u 데이터를 쉽게 관리하는 프로그램 종 류종 류 관계형 데이터베이스 객체지향형 데이터베이스 계층형 데이터베이스 네트워크 데이터베이스 데이터를 2 차원적인 테.
Advertisements

SQL Server 2000 트랜잭션과 잠금 데브피아 세미나
강사: 이종인 다우 교육원 전임강사 / 온디멘드 수석 컨설턴트 / FMG 수석 컨설턴트
PARK SUNGJIN Oracle 설치 PARK SUNGJIN
DB 프로그래밍 학기.
DB 프로그래밍 학기.
Prepared Statements CSED421: Database Systems Labs.
소리가 작으면 이어폰 사용 권장!.
You YOungseok 데이터베이스 테이블 및 인덱스 You YOungseok.
데이터 모델링 방법론 2003년 03월.
IT Application Development Dept. Financial Team May 24, 2005
질의어와 SQL 기본 SQL 고급 SQL 데이타의 수정 데이타 정의 언어 내장 SQL
관계 대수와 SQL.
Database & Internet Computing Laboratory 한 양 대 학 교
제 5 장 인덱스 생성 및 관리.
SELECT 문 사원 테이블의 모든 정보를 출력하는 예제 1. 비교 연산자 SELECT 문의 형태
Microsoft .Net Regional director
4장. 관계 대수와 SQL SQL 관계 데이터 모델에서 지원되는 두 가지 정형적인 언어
제 09 장 데이터베이스와 MySQL 학기 인터넷비즈니스과 강 환수 교수.
JDBC 프로그래밍 이수지 이동주 1.
You YoungSEok 고급 SQL You YoungSEok
SQL 개요 SQL 개요 - SQL은 현재 DBMS 시장에서 관계 DBMS가 압도적인 우위를 차지하는 데 중요한 요인의 하나
MySQL performance Xhark 김재홍.
Toad for Oracle 설치 방법.
6장 Mysql 명령어 한빛미디어(주).
MySQL 및 Workbench 설치 데이터 베이스.
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
목차 백업과 복원.
11장. 데이터베이스 서버 구축과 운영.
오라클 데이터베이스 성능 튜닝.
트랜잭션과 잠금 트랜잭션 처리 메커니즘을 자세히 이해한다. 트랜잭션의 종류를 파악한다.
6장. 물리적 데이터베이스 설계 물리적 데이터베이스 설계
4.2 SQL 개요 SQL 개요 SQL은 IBM 연구소에서 1974년에 System R이라는 관계 DBMS 시제품을 연구할 때 관계 대수와 관계 해석을 기반으로, 집단 함수, 그룹화, 갱신 연산 등을 추가하여 개발된 언어 1986년에 ANSI(미국 표준 기구)에서 SQL.
ER-Win 사용 방법.
SQL Server™ 2000: DBA의 역할과 책임 하 성희.
SQL Server 2000 세미나 Profiler를 이용한 문제해결
차례 튜닝 - 프로필러를 이용한 튜닝 프로필러 친해지기 프로필러 결과 테이블로 만들기 프로필러 결과 분석하기
ASP.NET : Database 접근 2008 컴퓨터공학실험(Ⅰ)
뷰와 저장 프로시저 뷰의 개념을 이해한다. 뷰의 정의와 관리 방법을 이해한다. 뷰를 사용함으로써 생기는 장점을 알아본다.
17강. 데이터 베이스 - I 데이터 베이스의 개요 Oracle 설치 기본적인 SQL문 익히기
MYSQL 설치 SQL언어 SQL언어의 활용 웹과 SQL언어와의 연동
YOU Youngseok 트랜잭션(Transaction) YOU Youngseok
01 데이터베이스 개론 데이터베이스의 등장 배경 데이터베이스의 발전 과정 데이터베이스의 정의 데이터베이스의 특징
You YoungSEok Oracle 설치 You YoungSEok
강사: 이종인 다우 교육원 전임강사 / 온디멘드 수석 컨설턴트 / FMG 수석 컨설턴트
SQL Server 7.0 세미나 (Performance Tuning)
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
Chapter 3: Introduction to SQL
고급 T-SQL.
CHAPTER 06. 데이터베이스 자료의 조직적 집합체_데이터베이스 시스템의 이해
정보처리기사 8조 신원철 양진원 유민호 이기목 김다연 윤현경 임수빈 조현진.
JDBC Lecture 004 By MINIO.
SQL Query in the SSMS : DB, Table
JSP 게시판 구현.
운영체제 (Operating Systems) (Memory Management Strategies)
테이블 만들기 실습 목표 입력할 tableDB <실습1> SSMS에서 테이블 생성
3장. SQL Server 2008전체 운영 실습 및 DB와 프로그램의 연동
SQL INJECTION MADE BY 김 현중.
MS-SQL7.0 Implementation 강의 노트
SQL Server 2000 세미나 View, SP &Trigger
테이블 관리 테이블 생성,수정,삭제 데이터 입력 수정, 삭제 2010학년도 2학기.
1. 관계 데이터 모델 (1) 관계 데이터 모델 정의 ① 논리적인 데이터 모델에서 데이터간의 관계를 기본키(primary key) 와 이를 참조하는 외래키(foreign key)로 표현하는 데이터 모델 ② 개체 집합에 대한 속성 관계를 표현하기 위해 개체를 테이블(table)
뇌를 자극하는 Windows Server 장. 데이터베이스 서버.
데이터 베이스의 내부 구조.
Stored program 장종원
 6장. SQL 쿼리.
제 5 장 MariaDB인덱스 생성 및 관리.
임시테이블과 테이블변수 SQLWorld Study Group - 최명환 -.
가상 기억장치 (Virtual Memory)
Presentation transcript:

Reorganizing and Rebuilding Indexes http://Café.naver.com/sqlmvp http://judydba.tistory.com/ chusouk@gmail.com 010-7398-1136 추숙(주디아줌마)

1. 조각화 2. Index Rebuild Tip 3. Index Rebuild 전략 4. QA 목차 1.1 인덱스 조각화란? 1.1 인덱스 조각화란? 1.2 인덱스 조각화의 발생 원인 1.3 인덱스 조각화의 유형 1.4 인덱스 조각화로 인한 영향 1.5 인덱스 조각화 확인 방법 1.5 인덱스 조각화 해결 방법 2. Index Rebuild Tip 2.1 Index Rebuild FillFactor 비율 2.2 Reorganizing and Rebuilding 선택 2.3 Clustered Index Rebuild시 DROP EXISTSING 선택 2.4 복구 모델 선택 3. Index Rebuild 전략 3.1 Rebuilding 전략 요소 3.2 Rebuilding Case 3.3 Rebuilding Offline Case 4. QA

1. 조각화

1.1 인덱스 조각화란? - OLTP 환경에서 “불가피한” 것이 특징 사전적인 의미 체크 할 것.

1.2 인덱스 조각화의 발생 원인 가. Insert and Update operations causing Page Split 1.2 인덱스 조각화의 발생 원인 가. Insert and Update operations causing Page Split 나. Delete operations 다. Initial allocation of pages from mixed extents 라. Large row size

1.3 인덱스 조각화 유형 가. Internal Fragmentation - Random deletes resulting in empty space on data pages - Page-splits due to inserts or updates - Shrinking the row such as when updating a large value to a smaller value - Using a fill factor of less than 100 - Using large row sizes

1.3 인덱스 조각화 유형 나. Logical Fragmentation 1.3 인덱스 조각화 유형 나. Logical Fragmentation - Page-splits due to inserts or updates - Heavy deletes that can cause pages be removed from the page chain, resulting in dis-contiguous page chain

1.3 인덱스 조각화 유형 다. Extent Fragmentation 1.3 인덱스 조각화 유형 다. Extent Fragmentation Extent fragmentation occurs when the extents of a table or index are not contiguous with the database leaving extents from one or more indexes intermingled in the file.

1.3 인덱스 조각화 유형 라. 조각화 구분 가. 조각화가 없는 인덱스 페이지 1.3 인덱스 조각화 유형 라. 조각화 구분 가. 조각화가 없는 인덱스 페이지 나. 무작위 삽입/업데이트/삭제 후 발생할 수 있는 조각화

1.4 조각화로 인한 영향은? Logical fragmentation and Extent fragmentation will cause the read performance to slow down

1.5 인덱스 조각화 확인 방법 DECLARE @id int, @indid int 1.5 인덱스 조각화 확인 방법 DECLARE @id int, @indid int SET @id = OBJECT_ID('dbo.TblX') SELECT @indid = index_id FROM sys.indexes WHERE object_id = @id AND name = 'nc_tblx_randSeq' dbcc showcontig('TblX', @indid) go SELECT table_schema ,OBJECT_NAME(F.OBJECT_ID) obj ,i.name ind ,f.INDEX_TYPE_DESC AS IndexType, f.avg_fragmentation_in_percent, f.Avg_page_space_used_in_percent, f.page_count FROM SYS.DM_DB_INDEX_PHYSICAL_STATS (DB_ID(),NULL,NULL,NULL,NULL) F JOIN SYS.INDEXES I ON(F.OBJECT_ID=I.OBJECT_ID)AND i.index_id=f.index_id JOIN INFORMATION_SCHEMA.TABLES S ON (s.table_name=OBJECT_NAME(F.OBJECT_ID)) AND f.database_id=DB_ID() AND OBJECTPROPERTY(I.OBJECT_ID,'ISSYSTEMTABLE')=0 WHERE F.OBJECT_ID = OBJECT_ID('TblX') --WHERE F.index_id > 0 AND F.index_id <= 1000 GO

1.6 인덱스 조각화 해결 방법 가. Index Reorganizing(인덱스 다시 구성) 최소한의 시스템 리소스가 사용 1.6 인덱스 조각화 해결 방법 가. Index Reorganizing(인덱스 다시 구성) ALTER INDEX { index_name | ALL }     ON <object>     {    | REORGANIZE         [ PARTITION = partition_number ]         [ WITH ( LOB_COMPACTION = { ON | OFF } ) ]   | SET ( <set_index_option> [ ,...n ] )     } DBCC INDEXDEFRAG 왼쪽에서 오른쪽으로 표시되는 리프 노드의 논리적 순서에 맞도록 리프 수준 페이지를 물리적으로 다시 정렬하여 테이블 및 뷰의 클러스터형 및 비클러스터형 인덱스의 리프 수준에 대한 조각 모음을 수행 최소한의 시스템 리소스가 사용 장기간 차단 테이블 잠금이 유지되지 않는다

1.6 인덱스 조각화 해결 방법 나. Index Rebuilding(인덱스 다시 작성) 인덱스가 삭제된 다음 다시 생성 1.6 인덱스 조각화 해결 방법 나. Index Rebuilding(인덱스 다시 작성) 인덱스가 삭제된 다음 다시 생성 ALTER INDEX { index_name | ALL }     ON <object>     {    REBUILD         [ [PARTITION = ALL]           [ WITH ( <rebuild_index_option> [ ,...n ] ) ]           | [ PARTITION = partition_number                 [ WITH ( <single_partition_rebuild_index_option>                         [ ,...n ] )                 ]             ]         ]   | SET ( <set_index_option> [ ,...n ] )     } DROP INDEX 인덱스명 ON 테이블명 CREATE INDEX 인덱스명 ON 테이블명 ~ DROP_EXISTING CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name      ON <object> ( column [ ASC | DESC ] [ ,...n ] )      [ INCLUDE ( column_name [ ,...n ] ) ] [ WHERE <filter_predicate> ]      [ WITH ( <relational_index_option> [ ,...n ] ) ]      [ ON { partition_scheme_name ( column_name )          | filegroup_name          | default          }     ] [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ] [ ; ] | DROP_EXISTING = { ON | OFF } DBCC DBREINDEX (     table_name     [ , index_name [ , fillfactor ] ] )     [ WITH NO_INFOMSGS ]

1.6 인덱스 조각화 해결 방법 다. Reogranizing and rebuilding의 특징 # Characteristic 1.6 인덱스 조각화 해결 방법 다. Reogranizing and rebuilding의 특징 # Characteristic Alter Index REORGANIZE Alter Index REBUILD 1 Online or Offline Online Offline (unless using the Online keyword) 2 Address Internal Fragmentation Yes (can only raise page density) Yes 3 Address Logical Fragmentation 4 Transaction Atomicity Small Discrete Transactions Single Atomic Transaction 5 Rebuild Statistics Automatically No 6 Parallel Execution in multi-processor machines 7 Untangle Indexes that have become interleaved within a data file 8 Transaction log space used Less More 9 Additional free space required in the data file

2. Index Rebuild Tip

2.1 Index Rebuild FillFactor 비율 가. Low Update Tables (100-1 read to write ratio): 100% fill factor 나. High Update Tables (where writes exceed reads): 50%-70% fill factor 다. Everything In-Between: 80%-90% fill factor.

2.2 Reorganizing and Rebuilding 선택 가. Fragmentation >=30 AND PAGES>1000 일때 rebuild 나. Fragmentation between 15 to 29 AND PAGES>1000 일때 reorganize&updatestatistics 다. 가와 나의 조건에 들어가지 있는 다면, update the statistics   

2.3 Clustered Index Rebuild시 DROP EXISTSING 선택 DROP_EXISTING 절은 SQL 서버가 클러스터된 인덱스를 삭제하고 다시 만들 때 기존에 존재하고 있던 넌클러스터 인덱스에 포함되어 있는 클러스터된 인덱스의 키 부분을 삭제하지 않고 새로 만들어진 클러스터된 인덱스의 키로 변경시키도록 하는 역할 - 넌클러스터 인덱스를 삭제하고 다시 만드는 전체 과정에 소요되는 시간 및 자원을 절감   

2.4 복구 모델 선택 인덱스 작업 기간 동안 데이터베이스의 복구 모델을 대량 로그 복구모델 또는 단순 복구 모델로 설정하여 이러한 인덱스 작업을 최소화 로그할 수 있음    인덱스 작업 전체 대량 로그 단순 ALTER INDEX REORGANIZE 전체 로그 ALTER INDEX REBUILD 최소 로그 CREATE INDEX DBCC INDEXDEFRAG DBCC DBREINDEX DROP INDEX 인덱스 페이지 할당 취소가 전체 로그됩니다. 해당 사항이 있는 경우 다시 작성된 새 힙은 전체 로그됩니다. 인덱스 페이지 할당 취소가 전체 로그됩니다. 해당 사항이 있는 경우 다시 작성된 새 힙은 최소 로그됩니다.

3. Index Rebuild 전략

3.1 Rebuilding 전략 요소 가. 추가 디스크 공간 Source + Sort Table + B-Tree를 위한 대략 2.2*Index Size 필요 나. 인덱스 빌드 동작 저장을 위한 공간 선택 a) User’s Database(default) b) tempdb(SORT_IN_TEMPDB 옵션 지정) 재사용 가능 다. Query Executor Process 가동을 위한 메모리 적어도 40Pages(3200KB)의 메모리 필요  

3.2 Rebuilding Case Online Index Build Offline Index Build Create clustered index idx_t on t(c1, c2) WITH (ONLINE = ON) Serial Index Build Parallel Index Build Create index idx_t on t(c1, c2) WITH (MAXDOP = 2) Storing in User’s database Storing in tempdb Create clustered Index idx_t on t(c1) WITH (SORT_IN_TEMPDB = ON) Partitioned index build Non Partitioned build

3.3 Rebuilding Offline Case # Case Add Case Desc 1 Serial DISK : 2.2*Index Size Memory : At least 40 Pages(3200KB) 2 Parallel Use Stats Plan (Historygram) Serial Build보다 더 많은 메모리 소모 #DOP만큼 sort table 생성 Non Stats Plan (No historygram) Indexed view(“No Stats Plan”) Parallel data source read 4 Parallel Partitionning (use sort_in_tmpdb) Aligned partitioned Non-Aligned partitioned • Aligned (when base object and in-build index use the same partition schema) • Not- Aligned (when heap and index use different partition schemas (including the case when base object is not partitioned at all and in-build index use partitions))

참고 인덱스를 리빌드 및 통계 업데이트를 한꺼번에^^ (주디아줌마 블로그) http://judydba.tistory.com/135 http://www.alicerock.com/1051 http://blogs.msdn.com/b/pamitt/archive/2010/12/23/notes-sql-server-index-fragmentation-types-and-solutions.aspx http://blogs.msdn.com/b/sqlqueryprocessing/archive/tags/indexing/

Thank you~~