MSSQL 103

테이블 변수와 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 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 격리 수준은 트랜잭션에서 읽은 데이터가 다른 트랜잭션으로부터 일관성이 유지되도록 한다. 트랜잭션은 시작되기 전에 커밋된 데이터 내용만 인식할 수 있다. 현재 트랜잭션이 시작된 후 다른 트랜잭션에서 수정한 데이터는 현재 트랜잭션에서 실행되는 결과에 표시되지 않는다. 따라서 트랜잭션의 결과는 트랜잭션 시작 당시 커밋된 데이터의 스냅숏을 가져오는 것처럼 보인다...

전체 백업에서 포함되는 트랜잭션 범위

전체 백업에서 포함되는 트랜잭션 범위 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server 전체 백업을 진행 할 때 마지막 포함된 트랜잭션 범위에 대해서 알아보자. 백업작업 시 체크포인트를 실행하여 버퍼풀에 있는 모든 더티 페이지를 강제로 디스크에 기록한다. 백업 작업은 데이터베이스에 할당된 페이지를 읽기 시작한다. 백업 작업이 페이지 X를 읽는다. 트랜잭션 A가 발생 한다. 트랜잭션 A가 페이지 X를 변경한다. 트랜잭션 B가 발생 한다. 트랜잭션 A가 끝나고 페이지 X에 대한 변경사항을 커밋한다. 백업 데이터 읽기 작업이 완료되고 트랜잭션 로그를 읽기 시작한다. 백업 데이터 읽기 작업이 완료된 시점에 트랜잭션 A에 대한 내용은 트랜잭션로그에 커..

REPL_SCHEMA_ACCESS 대기 유형

REPL_SCHEMA_ACCESS 대기 유형 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server의 고가용성 솔루션인 복제 구성에서 트랜잭션 복제 지연 문제가 발생 할 때 나타나는 대기와 이를 해결 할 수 있는 방법에 대해서 알아본다. 이 포스트는 CSS SQL Server Engineers 팀 블로그의 내용을 읽고 이해한 것을 정리하였으며 번역의 오류나 기술적 오류 가능성이 있으므로 자세한 내용은 원문을 참고한다. DMV를 사용하여 현재 실행 중인 각 요청에 대한 정보를 확인 한다. REPL_SCHEMA_ACCESS 대기를 확인 할 수 있다. select * from sys.dm_exec_requests REPL_SCHEMA_ACCESS 대기는..

Database 손상시 Emergency 모드로 복구하기

Database 손상시 Emergency 모드로 복구하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server에서 데이터베이스가 손상되었을 때 조치할 수 있는 방법에 대해서 알아본다. 데이터베이스가 손상되었을 때 유일하게 접속할 수 있는 방법은 Emergency 모드이다. 시나리오는 다음과 같다. Emergency 모드로 데이터베이스에 접근 한다. 새로운 트랜잭션로그를 구축하기 위해 문서화 되지 않은 DBCC REBUILD_LOG 명령을 사용한다. 데이터 파일에 대한 손상을 해결하기 위해 REPAIR_ALLOW_DATA_LOSS 옵션으로 DBCC CHECKDB를 실행 한다. 데이터복구가 완료되면 백업을 진행하고 Emergency 모드를 해제 한다..

서버 그룹을 이용한 다중서버 쿼리하기

서버 그룹을 이용한 다중서버 쿼리하기 Version : SQL Server 2008, 2008R2, 2012, 2014 여러 SQL Server에 동일한 쿼리를 실행하는 경우가 있다. 관리하는 서버 수가 적다면 직접 서버에 접속하여 하나씩 실행해도 되지만 관리하는 서버가 많다면 하나씩 실행하는 것은 많은 리소스가 소모되는 일이다. SQL Server 2008부터는 중앙관리 서버 기능을 사용하여 서버그룹에 등록되어있는 서버에 대해서는 다중 서버 쿼리가 가능하다. 다중 서버 쿼리를 사용하기 위해서는 우선 서버 그룹에 서버를 등록해야 한다. 등록된 서버를 보기 위해서는 메뉴에서 [보기] [등록된 서버]를 실행 한다. [등록된 서버]에서 로컬 서버 그룹에서 마우스 오른쪽 버튼을 클릭하여 [새 서버 그룹]을 생성..

SQL Server Agent에서 CmdExec 오류

SQL Server Agent에서 CmdExec 오류 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server 마이그레이션 후 CmdExec 실행 시 다음과 같은 오류가 발생한다면 각 하위 시스템에해당하는 파일이 지정된 경로에 있는지 확인해 볼 필요가 있다. Unable to start execution of step 1 (reason: The CmdExec subsystem failed to load [see the SQLAGENT.OUT file for details]; The job has been suspended). The step failed. 하위 시스템 경로에 dll 파일이 존재하지 않으면 다음과 같은 에러를 확인 할 수 있다. 하위 ..

Verbose SQL Server Agent Logging

Verbose SQL Server Agent Logging Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server Agent 실행 결과를 출력파일로 저장하여 상세한 로그를 확인하는 방법에 대해서 알아본다. SSMS에서 [SQL Server 에이전트] – [작업] 에서 Verbose 로그를 남길 작업을 선택하여 속성을 실행한다. 작업 속성의 [단계] 탭에서 [고급]을 선택 한다. [출력 파일] 항목에 로그 파일을 기록할 경로를 입력 한다. 로그 기록을 동일한 파일에 덧붙여 기록하려면 [기존 파일에 출력 추가]를 선택 한다. (선택 해제 시 최근 기록으로 덮어씀) Verbose 로그를 확인 하기 위해 예제로 백업을 실행해 보았다. 지정한 경로에 로그 ..

Windows Event Log에 SQL Server Agent Log 기록

Windows Event Log에 SQL Server Agent Log 기록 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server Agent는 기본적으로 알림이 활성화 되어 있지 않다. SSMS에서 작업을 생성할 때 알림 탭으로 이동하면 알림을 활성화 할 수 있는 옵션을 확인 할 수 있다. 알림 옵션에는 이메일을. 호출, 메시지 호출, 윈도우 이벤트 로그, 작업삭제가 있다. 작업 관리를 위해 효율적인 방법은 작업의 실패의 경우 윈도우이벤트로그의 응용프로그램 이벤트 로그에 정보를 기록 하는 것이다. 다음 예제는 작업이 실패 할 경우 윈도우 이벤트의 응용프로그램 이벤트 로그에 로그를 기록하는 구성방법이다. 스크립트를 실행하면 현재 인스턴스에 정의된 ..