SQL Server/SQL Server Tip 662

매개변수 값의 변경과 SQL 서버 성능 저하

매개변수 값의 변경과 SQL 서버 성능 저하 Version : SQL Server 2005, 2008, 2008R2, 2012 매개변수 값의 변경과 그에 따른 SQL Server의 성능문제에 대해서 살펴 본다. 해당 내용은 CSS SQL Server Engineer 팀블로그에 기재된 내용으로 원문을 참고로 하여 필자가 이해한 내용을 바탕으로 정리 하였으며 번역의 오류 및 기술적인 오류가 있을 수 있음을 미리 인지 한다. 매개변수 스니핑은 이미 많은 사용자들에게 알려져 있다. 하지만 매개변수 스니핑이 정확하지 않을 때가 있다. 예를 들어 사용자 프로시저 안에서 매개변수의 값을 변경하는 경우 SQL Server는 알 수가 없다. 따라서 프로시저가 처음에 컴파일 되면서 카디널리티를 예측한 매개변수의 값을 사용..

IN 절 사용시 예기치 못한 액세스 위반과 SQL Server 종료

IN 절 사용시 예기치 못한 액세스 위반과 SQL Server 종료 Version : SQL Server 2008, 2008R2, 2012 이번 포스트는 CSS SQL Server Engineer 팀블로그에 게제된 내용으로 SQL Server의 버그와 함께 핫픽스를 통한 해결 방법을 안내하고 있다. 필자가 원문의 글을 읽고 이해한 내용을 포스팅하는 관계로 주관적인 해석 및 번역의 오류나 기술적인 오류가 있음을 미리 인지한다. SQL Server 2008 이상의 버전에서 IN절에 큰 상수의 숫자를 사용하면 예기치 않게 SQL Server가 종료될 수 있다고 한다. 이때 오류 로그에는 어떠한 SQL 덤프가 생성되지 않는다. 대부분의 경우에는 이러한 유형의 문제를 경험하지 못 할 수 있다. 이 조건을 만족하기..

SQL 버전과 CLR (.NET Framework 버전에 따른 오류)

SQL 버전과 CLR (.NET Framework 버전에 따른 오류) Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server 2005 버전부터 CLR을 지원하고 있다. 최근 SQL Server 2012버전으로 업그레이드 후 CLR을 사용하는 시스템에서 다음과 같은 오류를 발견 할 수 있다. Msg 6544, Level 16, State 1, Line 2 CREATE ASSEMBLY for assembly '' failed because assembly '' is malformed or not a pure .NET assembly. Unverifiable PE Header/native stub. .NET 어셈블리에는 두 가지 유형이 있다. .NET 어셈블리는 ..

SWITCHOFFSET 내장함수의 잘 못된 예측 - 미리 계산한 값을 쿼리에 연결하여 최적화 하기

SWITCHOFFSET 내장함수의 잘 못된 예측 미리 계산한 값을 쿼리에 연결하여 최적화 하기 Version : SQL Server 2005, 2008, 2008R2, 2012 이번 사례는 SQL Server CSS Engineer 공식 팀블로그에 기재된 내용으로 SQL Server의 내장 함수인 SWITCHOFFSET 함수 사용으로 잘못된 예측으로 인한 성능 문제이다. [SWITCHOFFSET 함수] 저장된 표준 시간대 오프셋에서 지정된 새 표준 시간대 오프셋으로 변경된 datetimeoffset 값을 반환. CREATE TABLE dbo.test ( ColDatetimeoffset datetimeoffset ); GO INSERT INTO dbo.test VALUES ('1998-09-20 7:45:..

테이블 반환 매개변수 사용과 SQL 2012의 향상된 캐싱 기능

테이블 반환 매개변수 사용과 SQL 2012의 향상된 캐싱 기능 Version : 2008, 2008R2, 2012 테이블 반환 매개 변수는 사용자 정의 테이블 형식을 사용하여 선언 된다. 테이블 반환 매개 변수를 사용하면 임시 테이블이나 많은 매개 변수를 만들지 않고도 저장프로시저 또는 함수와 같은 T-SQL 문이나 루틴에 여러 행의 데이터를 보낼 수도 있다. 테이블 반환 매개변수는 OLE DB 및 ODBC의 매개변수 열과 유사하지만 보다 유연하고 집합 기반 작업에 사용할 수 있다. T-SQL은 입력 데이터의 복사본을 만들지 않기 위해 참조로 루틴에 테이블 반환 매개 변수를 전달한다. 테이블 반환 매개 변수를 사용하여 T-SQL 루틴을 만들고 실행 다음 모든 관리 언어의 T-SQL 코드, 관리되는 클라..

디스크 섹터 크기와 데이터베이스 성능

디스크 섹터 크기와 데이터베이스 성능 Version : SQL Server 2005, 2008, 2008R2, 2012 디스크 섹터와 데이터베이스는 어떤 관계가 있을까? 디스크 섹터와 구조에 대해서 궁금하다면 다음 링크를 참고 한다. 디스크 구성 및 종류 : http://sqlmvp.kr/140191323779 이번 포스팅의 초점은 필자가 생각하기엔 조금 오래된 내용이긴 하지만 많은 분들이 고민 하였던 내용이며 매우 중요한 이슈라 생각 한다. (아직 이 사실을 모르고 있다면 IT 소식에 관심을 가지도록 하자) 2010년쯤 세계적인 하드디스크 제조사인 씨게이트(http://www.seagate.com/)에서 포맷 방식을 변경한다고 하였다. 글을 쓰는 지금쯤이면 변경된 포맷방식이 정착되었을 시기이기도 하다...

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..