DB튜닝 37

SQL Server 2008R2 Diagnostic Information Queries

SQL Server 2008R2 Diagnostic Information Queries Version : SQL Server 2008R2 SQL Server 2008R2 진단 쿼리 – 이 쿼리 한방이면 SQL 상태 확인 가능. 첨부파일 SQL Server 2008R2 Diagnostic Information Queries.txt 참고. -- SQL Server 2008 R2 Diagnostic Information Queries -- Glenn Berry -- December 2014 -- Last Modified: December 18, 2014 -- http://sqlserverperformance.wordpress.com/ -- http://sqlskills.com/blogs/glenn/ -- Tw..

SQL Server 2005 Diagnostic Information Queries

SQL Server 2005 Diagnostic Information Queries Version : SQL Server 2005 SQL Server 2005 진단 쿼리 – 이 쿼리 한방이면 SQL 상태 확인 가능. 첨부파일 SQL Server 2005 Diagnostic Information Queries.txt 참고. -- SQL Server 2005 Diagnostic Information Queries -- Glenn Berry -- December 2014 -- Last Modified: December 18, 2014 -- http://sqlserverperformance.wordpress.com/ -- http://sqlskills.com/blogs/glenn/ -- Twitter: Glen..

Ad-hoc 쿼리와 실행계획

Ad-hoc 쿼리와 실행계획 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 Ad-hoc 쿼리를 실행 할 때 대소문자, 띄어쓰기, 스키마에 따라 기존의 실행 계획이 사용되지 않고 새로운 실행 계획이 생성되어 사용된다. Ad-hoc 쿼리는 컴파일 과정을 거치며 실행 계획을 생성하며 컴파일과 실행 계획 생성에 따른 성능 병목이 발생 할 수 있다. [대소문자, 공백에 따른 실행계획 생성] Ad-hoc으로 쿼리를 사용 할 경우 Case와 공백에 따라서도 다른 쿼리로 인식되어 새로운 실행계획이 생성된다고 하였다. 다음 예제를 통해 알아보자. USE AdventureWorks2014; DBCC FREEPROCCACHE WITH NO_INFOMSGS; GO SELECT S..

테이블 변수와 TF 2453

테이블 변수와 TF 2453 Version : SQL Server 2005, 2008, 2008R2, 2012 테이블변수에 데이터를 삽입하면 카디널리티는 항상 1 이다. 행이 적을 경우에는 큰 문제가 되지 않지만 행이 많을 경우에는 쿼리 계획을 효율적으로 생성하지 못하여 쿼리 성능이 저하될 수 있다. dbcc traceoff(2453,-1) go dbcc freeproccache go set statistics profile off go use tempdb go if OBJECT_ID ('t2') is not null drop table t2 go create table t2 (c2 int) go create index ix_t2 on t2(c2) go --insert 100,000 rows into t..

블록킹 세션을 찾아 우선순위 낮은 세션 종료하기

블록킹 세션을 찾아 우선순위 낮은 세션 종료하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 데이터베이스 서버를 운영하다보면 다양한 쿼리 요청으로 인해 블록킹이 발생 할 수 있다. 차단 및 교착이 발생하였을 때 이를 감지하고 블록킹이 발생한 세션 중 우선순위가 가장 낮은 프로세스를 종료 할 수 있다면 원치 않는 비즈니스 중단을 예방 할 수 있다. 시나리오는 다음과 같다. 매일 밤 실행되는 일괄 처리 작업이 다른 프로세스를 차단하는 현상이 발생 하였을 때 일괄 처리 되는 세션을 종료시키고 싶다. 일괄 처리되는 스크립트에 라벨링을 하여 해당 세션을 강제 종료하는 방법에 대해서 알아 본다. 세션 식별 목적을 위해 스크립트의 시작 부분에 CONTEXT_INFO 함..

비결정적 사용자 정의 함수 사용으로 인한 느린 쿼리

비결정적 사용자 정의 함수 사용으로 인한 느린 쿼리 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server에서는 사용자 정의 함수를 생성하고 사용할 수 있다. 사용자 정의 함수는 매개변수를 허용하고 복잡한 계산 등의 동작을 수행하며 해당 동작의 결과를 값으로 반환한다. 반환 값은 단일 스칼라 값이나 테이블일 수 있다. 사용자 정의 함수 만들기 : http://msdn.microsoft.com/ko-kr/library/ms186755.aspx 이번 포스트는 비결정적인 사용자 정의 함수로 인하여 쿼리가 느린 상황을 살펴보고 해결하는 방법에 대해서 살펴본다. 포스트의 내용은 CSS SQL Engineers를 참고 하였으며 읽고 이해한 내용을 정리하였다...

SQL Server 파라메터 스니핑의 다양한 접근

SQL Server 파라메터 스니핑의 다양한 접근 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server에서 저장프로시저가 잘 수행되다가 갑자기 실행 시간이 급등한 경우가 있다. 다양한 이유가 있지만 대부분 이런 현상이 나타날 때 일반 적인 상황은 파라메터 스니핑과 관련이 있다. 다음 포스트는 파라메터 스니핑과 관련된 내용이다, 파라메터 스니핑과 데이터 스큐 : http://sqlmvp.kr/140196990001 매개변수 값의 변경과 SQL 서버 성능 저하 : http://sqlmvp.kr/140193296636 파라메터 스니핑(Parameter Sniffing)은 SQL Server에서 프로시저를 처음 호출 할 때(또는 SQL Server 재실..

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

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

SQL Server CPU 사용률이 높은 프로세서 및 쿼리 찾기

SQL Server CPU 사용률이 높은 프로세서 및 쿼리 찾기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server에서 CPU사용률이 높게 나타났다. 어떤 프로세스가 어떤 쿼리를 실행하여 CPU 사용률이 높은지 SPID와 KPID를 사용하여 알아보자. [시작] – [실행] - [perfmon] 또는 성능 카운터를 실행한다. [Thread] 카운터 목록에서 [% Processor Time], [ID Thread]를 선택하고 인스턴스에 [sqlservr]를 선택 한다. 카운터를 추가하면 다음과 같이 스레드를 모니터링 할 수 있으며 이때 프로세서 값이 높은 스레드를 찾는다. 아래 그림에서는 스레드 1776이 CPU를 많이 사용하고 있는 것을 확인 할..

Collation 변경

Collation 변경 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server를 설치할 기본 데이터 정렬 구성은 Windows Server의 데이터 정렬을 참고 한다. 사용자 설정에 따라 기본 데이터 정렬을 변경 할 수도 있다. SQL Server 2014 설치 : http://sqlmvp.kr/140211418959 데이터베이스의 기본 데이터 정렬 설정에 따라 테이블을 생성할 때 문자열 타입의 경우 기본적으로 데이터베이스의 기본 데이터 정렬을 참고하여 생성된다. 이번 포스트는 테이블 컬럼에 Korean_Wansung_CI_AS 정렬에서 SQL_Latin1_General_CP1_CI_AS 정렬로 변경하는 방법에 대해서 알아 본다. 실습을 위해 문자..