데이터베이스튜닝 17

SQL Server에서 차단을 확인하는 다양한 방법

SQL Server에서 차단을 확인하는 다양한 방법 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server는 많은 수의 동시 사용자 요청을 처리한다. 수 많은 클라이언트가 요청을 하면 여러 프로세스가 동일한 자원에 대해 동시에 액세스하기 때문에 충돌이 발생 할 수 있다. 이때 차단이 발생하는데 SQL Server에서 발생하는 차단에 대해서 확인 하는 여러 가지 방법에 대해서 알아 본다. [SSMS 작업 모니터] SSMS에서 제공하는 작업 모니터는 SQL Server의 리소스 및 프로세스에 대한 잠금 정보를 확인 할 수 있다. SSMS의 개체 탐색기에서 [서버] –[마우스 오른쪽 클릭] –[작업모니터]를 선택한다. 프로세스 탭을 클릭하면 페이지가 확장되고 현재..

인덱스 리빌드 동작 (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 블로그의 블록 모니터링 관련 아티..