SQL Server/SQL Server Tip 662

테이블 변수와 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..

Sp_trace_create MaxfileSize 오류

Sp_trace_create MaxfileSize 오류 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 추적 정의를 생성할 때 maxfilesize 구문에서 오류가 발생한다. 이를 해결하는 방법에 대해서 알아본다. 추적 정의 상태를 만드는 구문은 다음과 같다. sp_trace_create [ @traceid = ] trace_id OUTPUT , [ @options = ] option_value , [ @tracefile = ] 'trace_file' [ , [ @maxfilesize = ] max_file_size ] [ , [ @stoptime = ] 'stop_time' ] [ , [ @filecount = ] 'max_rollover_files' ] 하..

RANDBETWEEN 함수 만들기

RANDBETWEEN 함수 만들기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 엑셀에 포함되어 있는 함수인 RANDBETWEEN(범위 난수 발생)을 SQL에서 구현하는 방법에 대해서 알아 본다. 엑셀에서는 다음과 같이 RANDBETWEEN 함수를 사용하여 범위에 포함되어 있는 난수를 생성하는 함수가 있다. SQL Server에서도 RAND() 함수를 사용하여 두 수 사이의 난수를 생성할 수 있다. select cast(round((75-25)*rand()+25, 0) as integer) as RandBetweenValue 위의 쿼리를 원하는 범위에 따라 재사용이 가능하도록 함수를 생성한다. 다음과 같은 오류가 발생 할 것이다. create function..

Optimize for hint 쿼리 최적화

Optimize for hint 쿼리 최적화 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server는 쿼리를 실행 할 때 다양한 비용을 계산하여 최적의 계획을 생성하고 사용 한다. 그리고 이렇게 생성된 실행 계획은 재사용 된다. 매개 변수 및 실행 계획 재사용 - http://sqlmvp.kr/140188831357 실행 계획 캐싱 및 다시 사용 - http://sqlmvp.kr/140188765472 SQL Server에서는 최적의 실행 계획을 선택하지 않고 하나 이상의 다른 실행계획을 사용할 수 있도록 강제 할 수 있는 힌트도 있다. 예를 들어 Where 절에 특정한 값이 사용됨에 따라 실행 계획이 변경되고 쿼리 실행 시간이 오래 걸리는 경우가..

TempDB 파일 사이즈 증가 시 경고 받기

TempDB 파일 사이즈 증가 시 경고 받기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server를 운영하면서 모니터링해야 할 항목들이 있다. 특히 시스템 데이터베이스의 경우 SQL Server를 운영하는데 필수적인 사항으로 이상이 발견되었을 때 즉시 알림을 받을 수 있도록 해야 한다. 이번 포스트는 시스템 데이터베이스에서 가장 많이 사용되고 있는 tempdb의 파일 사이즈 증가 시 알림을 받기 위한 방법으로 SQL Serve Agent 기능을 활용하는 방법에 대해서 알아본다. 경고 작업을 생성하기 위해 SSMS를 실행하여 SQL Server Agent에서 경고를 선택 한다. 경고에 사용할 이름을 입력하고 유형을 선택 한다. 데이터파일의 증가는 ..

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

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

다양한 포맷의 이름 파싱 하기

다양한 포맷의 이름 파싱 하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 비즈니스 파트마다 다양한 형식의 이름(또는 전화번호) 세트를 사용한다. 이러한 경우 성과 이름을 어떻게 구분하여 정리 업무를 수행하는 사람이라면 한 번쯤 고민해보았을 것이다. 이번 시간에는 구분 할 수 있는 특정한 기호를 기준으로 이름을 파싱하여 사용하는 방법에 대해서 알아본다. [공백으로 구분된 경우] 성과 이름 사이에 공백이 있는 포맷을 파싱하여 사용하는 방법이다. 실습용 테이블을 생성하고 데이터를 입력 한다. -- create temporary table for storing source name strings -- and their associated name parts IF..

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

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

스냅숏 격리 수준(SNAPSHOT ISOLATION LEVEL)

스냅숏 격리 수준(SNAPSHOT ISOLATION LEVEL) Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 트랜잭션 격리 수준은 SQL Server에 연결하여 실행하는 T-SQL문의 잠금 및 행 버전 관리 기능을 제공한다. 격리 수준은 여러 종류가 있으며 격리 수준 기능은 다음과 같다. SNAPSHOT 격리 수준은 트랜잭션에서 읽은 데이터가 다른 트랜잭션으로부터 일관성이 유지되도록 한다. 트랜잭션은 시작되기 전에 커밋된 데이터 내용만 인식할 수 있다. 현재 트랜잭션이 시작된 후 다른 트랜잭션에서 수정한 데이터는 현재 트랜잭션에서 실행되는 결과에 표시되지 않는다. 따라서 트랜잭션의 결과는 트랜잭션 시작 당시 커밋된 데이터의 스냅숏을 가져오는 것처럼 보인다...

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