SQL Server/SQL Server Tip 662

Ring buffer를 활용한 External Memory Pressure 확인

Ring buffer를 활용한 External Memory Pressure 확인 Version : SQL Server 2005, 2008, 2008R2, 2012 메모리 압력은 내부, 외부 두 가지 유형의 프로세스가 있으며 외부 메모리 압력은 프로세스와 전체 시스템의 페이징으로 발생 할 수 있다. 내부 메모리 압력은 OOM 상태 및 프로세서의 충돌로 발생 할 수 있다. Memory Pressure : http://sqlmvp.kr/140204286379 Memory Pressure에 대한 모니터링은 sys.dm_os_ring_buffers에서 가능 하다. 실습을 위해 Memory Pressure 발생 시킨다. 아래 스크립트는 sys.dm_os_ring_buffers에서 Ring_buffer_resourc..

Memory Pressure

Memory Pressure Version : SQL Server 2005, 2008, 2008R2, 2012 메모리 압력은 내부, 외부 두 가지 유형의 프로세스가 있다. 메모리 압력은 성능과 안정성을 극대화 하기 위해 발생한다. 외부 메모리 압력은 프로세스와 전체 시스템의 페이징으로 발생 할 수 있다. 내부 메모리 압력은 OOM 상태 및 프로세서의 충돌로 발생 할 수 있다. 외부 메모리 압력은 윈도우 운영 시스템에 의해 제어 되며 두 가지 유형이 있다. 물리적 동적 메모리 압력과 물리적 정적 메모리 압력이 있다. 시스템 페이지 파일이 부족하면 정적 메모리 압력이 발생 한다. 메모리 압력이 발생하면 시스템의 가상 메모리 부족을 나타내는 팝업을 윈도우 오른쪽 하단에서 확인 할 수 있다. 메모리 압력의 유형..

64비트 버전의 SQL Server 버퍼 풀 메모리 페이지 수 줄이는 방법 - Lock Page In Memory 설정

64비트 버전의 SQL Server 버퍼 풀 메모리 페이지 수 줄이는 방법 Lock Page In Memory 설정 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server 64비트 버전에서 다음과 같은 문제가 발생 할 수 있다. SQL Server 성능이 갑자기 저하 된다. SQL Server 실행 하는 컴퓨터가 잠시 동안 응답하지 않는다. SQL Server 연결 응용 프로그램에 대한 시간이 초과되었다. 시스템에서 응용 프로그램을 사용할 때 문제가 발생 한다. SQL Server 2005 SP2 이후 버전을 설치한 경우 이 문제가 발생하면 SQL Server 오류 로그에 기록 된다. 오류 로그는 다음과 같은 내용으로 기록 된다. date time spid1..

누락된 공유 잠금 (Missing Shared Locks)

누락된 공유 잠금 (Missing Shared Locks) Version : SQL Server 2005, 2008, 2008R2, 2012 특정 행에 대해 베타적 잠금(exclusive lock)을 보유한 경우 다른 트랜잭션에서 read committed isolation 레벨에서 읽을 수 있을까? 대부분의 사람들은 베타적 잠금을 보유한 경우 읽을 수 없다고 답할 것이다. 일부 사람들은 READ_COMMITTED_SNAPSHOT 데이터베이스 옵션의 적용 여부에 달려 있다고 할 것이다. READ_COMMITTED_SNAPSHOT 경우가 아니라고 가정하면 read committed 격리 수준으로 읽을 수 있다. 실습을 위해 테이블과 데이터를 생성한다. use tempdb go CREATE TABLE dbo..

Ad Hoc Distributed Queries 옵션

Ad Hoc Distributed Queries 옵션 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서 임시 분산 쿼리를 허용하는 옵션에 대해서 알아보자. 임시 분산 쿼리에는 OPENROWSET 및 OPENDATASOURCE 함수를 사용하여 OLE DB를 사용하는 원격 데이터 원본에 연결한다. OPENROWSET과 OPENDATASOURCE는 자주 사용되지 않는 OLE DB 데이터 원본을 참조하기 위해서만 사용해야 한다. 자주 사용되는 데이터 원본에 대해서는 연결된 서버를 설정하여 사용해야 한다. 기본적으로 SQL Server에서는 OPENROWSET 및 OPENDATASOURCE를 사용하는 임시 분산 쿼리를 허용하지 않는다. 이 옵션을 1로 설정하..

높은 MAXDOP은 쿼리를 느리게 만들 수 있는가?

높은 MAXDOP은 쿼리를 느리게 만들 수 있는가? Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server의 최대 병렬 처리 수준(MAXDOP) 구성 옵션은 병렬 계획에서 쿼리 실행에 사용되는 프로세서의 수를 제어한다. MAXDOP 설정 : http://sqlmvp.kr/140176043445 높은 MAXDOP은 상황에 따라 쿼리를 느리게 만들 수 있다. 낮은 DOP가 반드시 긴 런타임을 의미하지는 않는다. 테스트를 위해 간단한 OLTP 쿼리를 실행하였으며 서로 다른 MAXDOP를 설정하였다. CPU 시간 및 duration은 "SET STATICSTICS TIME ON"을 사용하여 측정 한 결과이다. 실행을 위한 데이터는 모두 메모리에 있었다. 두 경우 소..

변경된 테이블 이름 복구하기

변경된 테이블 이름 복구하기 Version : SQL Server 2008, 2008R2, 2012 실수로 테이블 이름을 변경 하였다. 어떻게 복구 할까? 이번 시간에는 실수로 변경한 테이블 이름을 복구하는 방법을 살펴본다. 백업 본이 있으면 기존의 백업 본을 보고 테이블 이름을 찾을 수 있지만 백업이 없거나 라이브 중인 경우에는 다음과 같은 방법을 사용 할 수 있다. (물론 방금 수정한 테이블의 이름은 기억력으로 다시 되돌려 놓으면 된다. 하지만 내가 모르는 수정이 발생 하였을 경우 매우 유용할 듯 하다.) 변경된 이름을 찾는 방법은 트랜잭션 로그에서 변경 된 사항을 찾아서 이전의 테이블 이름과 변경 된 테이블 이름을 찾는 것이다. DECLARE @Date_From DATETIME='1900/01/01..

Sys,dm_exec_connections

Sys,dm_exec_connections Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server 인스턴스에 연결된 정보를 확인하는 방법으로 sys.dm_exec_connections 동적 관리 뷰를 사용할 수 있다. select * from sys.dm_exec_connections 열 이름데이터 형식설명Session_idint연결과 연관된 세션을 식별most_recent_session_idint가장 최근 요청의 세션IDconnect_timedatetime연결이 설정된 타임스탬프net_transportnvarchar(40)물리적 전송 프로토콜protocol_typenvarchar(40)페이로드의 프로토콜 유형 지정protocol_versionint데이터 액..

SQL Server 시작 매개 변수 설정

SQL Server 시작 매개 변수 설정 Version : SQL Server 2012 SQL Server의 상태를 확인하기 위해서 트레이스 플래그를 설정하는 경우가 있다. 하지만 SQL Server가 재시작 될 때마다 모든 트레이스를 설정을 하는 것은 매우 불편할 수 있다. 해당 서비스가 시작 될 때 자동으로 트레이스 플래그가 적용될 수 있도록 시작 매개 변수를 서비스에 등록 할 수 있다. 다음 예시는 SQL Server 2012 서비스에서 시작 매개 변수를 추가할 수 있다/ 시작 매개 변수는 레지스트리에 저장 된다. SQL Server 구성 관리자를 사용하여 매개 변수를 변경한 경우 직접 레지스트리에 반영된다. 레지스트리를 확인해 보면 각 시작 매개 변수는 별도의 항목(문자열 값)으로 저장되어 있다...

AFTER 트리거를 INSTEAD OF 트리거로 변경 후 효율성 향상

AFTER 트리거를 INSTEAD OF 트리거로 변경 후 효율성 향상 Version : SQL Server 2005, 2008, 2008R2, 2012 트리거는 SQL Server에서 이벤트가 발생하면 자동으로 실행되는 특수한 종류의 저장 프로시저이다. DML, DDL, LOGON 트리거를 생성 할 수 있다. 트리거는 FOR|AFTER 와 INSTEAD OF 인수가 있다. FOR|AFTER : AFTER는 DML 트리거를 지정한 모든 작업이 성공적으로 실행되었을 때만 트거가 실행도록 지정한다. 모든 참조 연계 동작 및 제약 조건 검사도 이 트리거가 실행되기 전에 성공해야 한다. INSTEAD OF : 트리거를 시작하는 SQL문 대신 DML 트리거가 실행되도록 지정한다. DDL 또는 LOGON 트리거에 대..