전체 글 1383

CLR 사용시 CPU 사용률 증가 현상

CLR 사용시 CPU 사용률 증가 현상 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서 여러 인스턴스를 운영할 때 비즈니스 환경에 따라 NUMA 구성 및 Affinity mask 옵션을 설정하여 다른 데이터베이스에 영향을 최소화 하도록 구성하여 사용한다. NUMA 설정 : http://sqlmvp.kr/140150873571 Affinity mask 설정 : http://sqlmvp.kr/140191320792 MAX Server Memory : http://sqlmvp.kr/140167266577 이번 포스팅은 Affinity mask(CPU 선호도 설정) 설정이 되어 있음에도 불구하고 CLR 사용시 CPU 사용률로 인한 성능 문제로 CSS SQ..

DMV를 이용한 CPU 사용량 높은 쿼리 찾기

DMV를 이용한 CPU 사용량 높은 쿼리 찾기 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server를 운영하는데 어떤 쿼리가 CPU를 많이 사용하는지 확인할까? 프로파일러를 통해서 성능자료를 수집할 수도 있지만 프로파일러의 경우 시스템에 오버헤드가 발생하기 때문에 실제 운영중인 서버에서는 가급적 권장하지 않는 분위기 이다. SQL Server 2005에서부터 도입된 DMV를 활용하여 CPU를 많이 사용하는 쿼리를 확인하는 방법을 알아보자. 사용된 DMV는 sys.dm_exec_query_stats 으로 캐시된 쿼리 계획에 대한 통계를 반환 한다. 이 뷰의 정보를 바탕으로 컴파일 시간, CPU 실행시간, 물리적 읽기 수, 실행계획 등 다양한 정보를 확인 할 ..

DMV를 이용한 인덱스 크기 및 조각화 정보 반환

DMV를 이용한 인덱스 크기 및 조각화 정보 반환 Version: SQL Server 2005, 2008, 2008R2, 2012 동적 관리 뷰(DMV) sys.dm_db_index_physical_stats는 지정한 테이블 또는 뷰 데이터 및 인덱스에 대한 크기 및 조각화 정보를 반환한다. 저장소의 성격에 따라 다음과 같은 특징이 있다. 인덱스의 경우 B-tree 수준에 대해 행이 반환 힙의 경우 각 파티션의 IN_ROW_DATA 할당 단위에 대해 행이 반환 LOG(Large Object)데이터의 경우 각 파티션의 LOB_DATA 할당 단위에 대한 행이 반환 테이블에 행-오버플로 데이터가 있는 경우 각 파티션의 ROW_OVERFLOW_DATA 할당 단위에 대한 행 반환 xVelocoty 메모리 최적화 ..

Checkpoint 추적하기

Checkpoint 추적하기 Version : SQL Server 2005, 2008, 2008R2, 2012 Checkpoint(검사점)은 현재 데이터베이스의 버퍼 캐시에 있는 커밋되지 않은 데이터 페이지를 디스크로 플러시(저장) 한다. 따라서 데이터베이스의 전체 복구 중에 처리되어야 하는 로그의 활성 부분이 최소화 된다. 전체 복구가 일어나는 동안 시스템이 중단되기 전 디스크로 플러시 되지 않은 로그의 수정 레코드가 롤포워드 된다. 또한 커밋 또는 롤백 로그 레코드가 없는 불완전한 트랜잭션과 관련된 모든 수정 내용이 롤백 된다. 자세한 내용은 아래 링크를 통해서 체크포인트에 대해서 알아 보자. 검사점 및 로그의 활성 부분 : http://sqlmvp.kr/140187427437 SQLServer 20..

중복 인덱스와 성능(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..