SQL Server/SQL Server Tip 662

중복 인덱스와 성능(Duplicate Indexes with Performance)

중복 인덱스와 성능(Duplicate Indexes with Performance) Version : SQL Server 2000, 20005, 2008, 2008R2, 2012 데이터베이스를 운영하는데 있어서 인덱스와 성능 문제는 떼어 놓을 수 없는 관계이다. 인덱스가 설정 되어 있지 않으면 원하는 데이터를 찾을 때 전체 테이블을 읽어야 하는 문제가 있기 때문에 I/O 측면에 많은 불리한 점이 있기 때문이다. 그래서 대부분의 데이터베이스를 운용할 때는 인덱스를 설정하여 사용한다. 그렇다면 인덱스를 만들 때 어떻게 만들면 좋을까? 온라인 공간에 찾아보면 인덱스를 생성할 때의 주의점 및 인덱스 키를 정하기 위한 다양한 가이드 들이 있다. 그 중에 오늘 다룰 내용은 중복 인덱스와 성능의 관계 이다. SQL ..

823, 824, 825, 832 오류 (DISK IO 오류)

823, 824, 825, 832 오류 (DISK IO 오류) Version : SQL Server 2000, 2005, 2008, 2008R2, 2012 데이터베이스 오류 중에 823, 824, 825는 I/O에 관련된 오류로 심각도가 매우 높은 메시지 이다. 이미 823, 824에 대해서는 많이 알려져 있으며 필자 또한 많이 겪었던 오류이다. 이번 시간에는 823, 824, 825, 832의 메시지가 알려주는 에러 내용을 간단히 정리해 보자. [Error : 823 : IO error OS cannot read the data] 823 메시지는 Windows 읽기 또는 쓰기 요청 실패이다. Windows에서 반환하는 오류코드와 해당 텍스트가 메시지에 삽입된다. 읽기 작업의 경우 SQL Server에서..

DISK I/O 병목 확인

DISK I/O 병목 확인 Version : SQL Server 2005, 2008, 2008R2, 2012 디스크의 성능은 SQL Server를 운영하는데 매우 밀접한 관련이 있다. 따라서 우리는 SQL Server의 논리적 및 물리적 I/O를 최소화 해야 한다. 물리적 I/O는 디스크에서 읽고 쓸 때 발생한다. I/O 관련 데이터베이스 관리 개체(I/O-related database management objects (DMOs))는 시스템에서 일어나고 있는 I/O를 조사하는데 도움을 준다. DMO에는 디스크 서브 시스템의 관점에서 디스크 I/O의 명시적인 그림을 제공한다. 예를 들어 어떻게 I/O가 디스크의 여러 파일에 분산되는지, 어떤 곳에서 I/O 병목이 발생하는지 보여준다. 우리는 디스크 서브시..

SQL Server 2012에서 비상계정 생성하기 - 비밀번호를 잊어 버렸을 경우 대처하기

SQL Server 2012에서 비상계정 생성하기 비밀번호를 잊어 버렸을 경우 대처하기 Version : SQL Server 2012 DBA는 프로덕션(운영) 환경에서 SQL Server에서 실행되는 서비스를 유지하고 운영하는 책임이 있다. 최근 들어 보안이 중점으로 떠오르면서 불필요한 계정 삭제 및 접근을 차단, 권한 최소화, 주기적인 비밀번호 변경 등을 진행 하고 있다. 그런데 관리자의 실수 또는 허가 받지 않은 접근(해킹)으로 인하여 다음과 같은 상황이 발생 하였다. SQL Server의 모든 기본 관리자 계정을 삭제 SYSADMIN 서버 역할(모든 windows 및 SQL Server 로그인 등)의 모든 사용자 계정 매우 복잡한 SA 계정 비밀번호로 변경하여 추측이 어려움 SYSADMIN 권한이 ..

SQL Server 차단 최소화

SQL Server 차단 최소화 Version : SQL Server 2005, 2008, 2008R2, 2012 잠금은 데이터베이스에서 동시 읽기 및 쓰기 작업을 지원하는데 있어서 필수적이면서도 차단을 발생시켜 시스템 성능에 부정적인 영향을 줄 수 있다. [잠금 및 에스컬레이션] SQL Server는 잠금에 영향을 받는 레코드 수와 시스템에 존재하는 동시 작업을 기준으로 가장 적절한 잠금 수준을 선택 한다. 기본적으로 SQL Server는 가장 작은 수준의 잠금을 선택하며 시스템 메모리를 보다 효율적으로 사용할 수 있는 경우에만 잠금 수준이 달라진다. SQL Server에서는 전체 서버 성능에 도움이 된다면 잠금을 에스컬레이션 한다. 에스컬레이션이 발생하면 테이블이 잠긴다. 특정 검색에서 잠금 수가 5..

자주 사용되는 System 함수

자주 사용되는 System 함수 Version : SQL Server 2005, 2008, 2008R2, 2012 [DATALENGTH(string_expressin)] 사용된 바이트 수를 반환. expression이 varchar(max), nvarchar(max) 또는 varbinary(max) 데이터 형식인 경우 bigint이며 그 외의 경우에는 int 반환 http://msdn.microsoft.com/ko-kr/library/ms173486.aspx Declare @string varchar(20) Declare @stringname varchar(40) set @string = 'KANGSUNGWOOK' set @stringname ='KAN GSUNG WOOK' select DATALENGT..

프로시저와 임시테이블, 그리고 리컴파일

프로시저와 임시테이블, 그리고 리컴파일 Version : SQL Server 2005, 2008, 2008R2, 2012 대부분의 자료에서 보면 보안, 성능 측면에서 stored procedure 사용을 권장한다. 보안 적인 측면에서는 ad-hoc 쿼리의 실행 권한을 방지 함으로써 허가 받지 않는 데이터 변경을 방지 하고 성능 적인 측면에서는 실행 계획 재사용 및 컴파일 비용의 감소를 통해 성능상 이점을 지향 한다. 그렇다면 성능 적인 측면에서 프로시저를 사용하면 무조건 compile(recompile)이 발생하지 않을까? 다음 시나리오를 통해 알아 보자. 우리는 프로시저의 리컴파일에 대해서 알아 보기 위해 프로시저 내에서 임시 테이블을 생성하는 쿼리를 작성 하였다. 임시 테이블이라는 것은 TempDB에..

access check cache 크기에 따른 성능 문제

access check cache 크기에 따른 성능 문제 Version : SQL Server 2005, 2008, 2008R2, 2012 데이터베이스 개체를 SQL Server에서 액세스 할 때 액세스 검사는 access check result cache라는 내부 구조에 캐시 된다. 캐시의 크기가 너무 크거나 너무 작은 경우 성능에 문제가 발생 할 수 있다. 예를 들어 너무 많은 메모리를 사용하는 경우 access check result cache 크기를 줄이는 것이 좋다. 또한 사용 권한을 다시 계산하여 높은 CPU 사용량이 발생할 경우 access check result cache 크기를 늘려야 한다. sp_configure의 access check cache quota 및 access check ..

Hot Add CPU

Hot Add CPU Version : SQL Server 2005, 2008, 2008R2 Hot Add Memory와 비슷하게 CPU 또한 온라인 중에 추가 할 수 있다. Hot Add Memory : http://sqlmvp.kr/140190545122 SQL Server 2008 부터 지원하는 Hot Add CPU는 실행 중인 시스템에 CPU를 동적으로 추가할 수 있는 기능이다. CPU는 새 하드웨어를 추가하여 물리적으로 추가하거나 온라인으로 하드웨어를 분할하여 논리적으로 추가하거나 가상화 계층을 통해 가상으로 추가할 수 있다. [Hot Add CPU 요구사항] Hot Add CPU를 지원하는 하드웨어 64비트 버전의 Windows Server 2008 Datacenter Itanium 기반 Wi..

스레드 및 파이버 실행

스레드 및 파이버 실행 Version : SQL Server 2005, 2008, 2008R2 Windows Server에서는 1부터 31까지 숫자 우선 순위 시스템을 사용하여 스레드 실행 일정을 예약한다. 0은 운영체제용으로 예약되며 여러 스레드가 실행을 위해 대기하고 있을 때 Windows에서는 우선 순위가 가장 높은 스레드를 디스패치한다. 디스패치 개념 : http://sqlmvp.kr/140190107899 기본적으로 SQL Server의 인스턴스 우선순위는 7이다. 이 기본값은 다른 응용 프로그램에 영향을 주지 않고 SQL Server 스레드가 충분한 CPU 리소스를 얻을 수 있는 순위를 제공한다. SQL Server의 우선 순위를 높이려면 priority boost 옵션을 사용하여 우선순위 1..