SQL튜닝 26

인덱스 리빌드 동작 (Gather Streams from SORT)

인덱스 리빌드 동작 (Gather Streams from SORT) Version : SQL Server 2005, 2008, 2008R2, 2012, SQL2014 SQL Server에서는 인덱스 리빌드 작업을 통하여 조각난 인덱스를 다시 작성한다. SQL Server 데이터베이스 엔진에서는 기본 데이터에 삽입, 업데이트, 삭제 작업을 수행 할 때마다 인덱스를 자동으로 유지 관리한다. 이러한 수정이 빈번이 발생하면 시간이 흐름에 따라 인덱스의 정보가 조각화 되어 데이터베이스 내에 흩어지게 될 수 있다. 조각화는 인덱스의 논리적 페이지 순서가 데이터파일의 물리적 순서와 일치하지 않을 때 나타난다. 조각화가 심할 경우에는 쿼리의 성능이 저하될 수 있다. 이번 포스트는 CSS SQL Engineers에 게시..

최소한의 다운타임으로 데이터베이스 이동하기

최소한의 다운타임으로 데이터베이스 이동하기 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server를 운영하다보면 디스크의 공간 부족 또는 디스크의 성능 등으로 인하여 새로운 드라이브로 데이터베이스를 이동해야하는 상황이 발생 할 수 있다. 이때 대용량 데이터베이스를 최소한의 다운타임으로 이동하기 위한 여러가지 방법에 대해서 알아보자. 각 방법에는 장단점이 있다. [데이터베이스 분리 후 이동하여 연결하기] 데이터베이스를 이동 할 때 많이 사용하는 방법이다. 데이터베이스를 분리하여 데이터 파일을 이동한 다음 데이터베이스를 연결 하는 방법이다. exec sp_detach_db DBName File Move exec sp_attach_db DBName, Filepat..

백업 LSN 이해하기

백업 LSN 이해하기 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서는 전체 백업, 로그 백업, 차등 백업 등 다양한 백업을 지원한다. 백업을 진행 하면 각 백업에 대해 고유한 LSN(Log Sequence Number)이 생성된다. 백업 파일을 복원 할 때 LSN을 이용하여 복원하기 때문에 LSN에 대한 이해는 중요하다고 할 수 있다. 데이터베이스를 복원 할 때 데이터베이스 복원 시퀀스는 데이터베이스의 전체 백업에서 시작해야 한다. 차등 및 트랜잭션 로그 백업 파일에서 복원을 진행 할 수 없다. 데이터베이스를 복원할 때 4가지(FirstLSN, LastLSN, CheckpointLSN, DatabaseBackupLSN)의 중요한 LSN이 있다. ..

암호화 오버헤드 (작성자의 주관적인 자료임)

암호화 오버헤드 (작성자의 주관적인 자료임) Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서 암호화된 컬럼을 복호화하는데 얼마나 많은 오버헤드가 증가할까? 16자리의 암호화된 카드번호를 복호화 과정을 통하여 발생하는 오버헤드를 측정해 보자. 실습을 위해 카드번호를 저장할 테이블을 생성한다. CREATE TABLE dbo.tblCustomerData ( CustomerID int identity(1,1) NOT NULL, CreditCardNumberPlainText varchar(16) NOT NULL, CreditCardNumberEncrypted varbinary(MAX) NULL ) 다음 포스트를 참고하여 열 수준 암호화를 진행 한다. htt..

데이터베이스 연결 정보 수집

데이터베이스 연결 정보 수집 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server 데이터베이스는 여러 응용프로그램에서 연결하여 사용한다. 문제는 이러한 응용프로그램이 제대로 연결을 종료하지 않을 때 발생 한다. 커넥션이 연결된 채로 종료 되지 않으면 다른 응용프로그램에서 커넥션을 할당하지 못하는 문제가 발생한다. 연결 개수를 모니터링 하여 어느 응용프로그램에서 연결을 많이 사용하는지 알아보자. 연결 개수를 모니터링 하기 위한 스크립트는 다음과 같다. SELECT [host_name], [program_name], login_name, count(c.session_id ) num_sessions, getdate() FROM sys.dm_exec_connect..

FileStream Garbage Collection

FileStream Garbage Collection Version : SQL Server 2012 SQL Server는 FILESTREAM 가비지 수집기를 실행하여 불필요한 FILESTREAM 파일을 삭제 한다. 가비지 수집기를 사용하여 FILESTREAM 컨테이너 안의 삭제된 파일을 모두 정리해야 해당 컨테이너를 제거할 수 있다. FILESTREAM 가비지 수집기는 자동으로 실행 된다. 그러나 가비지 수집기가 실행되기 전에 컨테이너를 제거할 경우 sp_filestream_force_garbage_collection을 사용하여 가비지 수집기를 수동으로 실행 할 수 있다. 컨테이너 지정 안 할 경우 USE FSDB; GO EXEC sp_filestream_force_garbage_collection @d..

프로시저 캐시에서 중복 쿼리 계획 확인

프로시저 캐시에서 중복 쿼리 계획 확인 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서 쿼리를 실행하면 실행 계획이 생성되며 이는 캐시에 저장 된다. 동일한 쿼리가 호출 될 경우 캐시에서 실행 계획이 재사용 된다. 실행계획이 중복되는 경우는 저장 프로시저에서 외부에서 만든 임시 테이블을 참조하는 경우이다. 외부 임시 테이블을 참조하는 프로시저를 호출하는 경우 실행 계획 캐시는 SPID(프로세스ID)가 키에 추가되어 생성되어 같은 세션에서 다시 실행 될 때 저장 프로시저에 대한 계획이 재사용 된다. 다음 스크립트는 중복 계획을 확인하는 방법이다. -- Look and see if there is any hash bucket with a large n..

Sp_reset_connection

Sp_reset_connection Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server 프로파일러를 사용하다보면 sp_reset_connection이라는 항목을 확인할 수 있다. sp_reset_connection은 SQL Server의 폴링된 커넥션 동작이다. SQL Server 커넥션 풀링 : http://sqlmvp.kr/140198995563 SQL Server는 데이터베이스에 연결 할 때 완전히 새로운 연결을 설정하는 것보다 빠른 풀링된 연결을 사용한다. 폴링의 사용 이유는 연결에 대한 CPU 오버헤드를 줄이고 빠른 연결을 위해서이다. SQL Server는 풀링된 연결 상태를 리셋하기 위해 sp_reset_connection을 호출 한다. 즉 S..

성능분석 17탄 – SQLServer 블록킹 / 네트워크 관련 성능 카운터

성능분석 17탄 – SQLServer 블록킹 / 네트워크 관련 성능 카운터 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server 블록킹 및 네트워크 관련 성능 카운터에 대해서 알아 본다. [SQL Server Blocking] SQLServer:Locks [SQLServer:Locks]에 위치하며 카운터의 정보는 각 서버의 잠금 요청에 대한 통계를 반환한다. 잠금 관련 성능 문제가 발생 할 경우 카운터 정보를 모니터링 하여 분석해야 한다. 카운터 정보만으로는 블록이 발생하지만 어떤 원인에 의해서 차단되는지는 알 수가 없다. 따라서 DMV등을 활용하여 차단되는 원인을 함께 분석해야 한다. 다음 링크는 Adam Machanic 블로그의 블록 모니터링 관련 아티..

성능분석 16탄 – 메모리 / CPU 관련 성능 카운터

성능분석 16탄 – 메모리 / CPU 관련 성능 카운터 Version : SQL Server 2005, 2008, 2008R2, 2012 메모리 및 CPU와 관련된 성능 카운터에 대해서 알아본다. [메모리] Page life expectancy [SQLServer:Buffer Manager] – [Page life expectancy]에 위치하며 페이지가 버퍼풀에 머무르는 시간을 나타낸다. 페이지가 버퍼풀에 오래 머무를수록 디스크를 액세스하는 빈도가 낮아지며 메모리에서 데이터를 읽기 때문에 성능상 이점이 있다. Page life expectancy 계속해서 낮게 나온다면 메모리를 추가할 것을 고려해야 한다. MS백서에서는 임계값을 300(5분)으로 안내하고 있지만 이는 2006년에 권장한 값으로 각자의 ..