SQL Server/SQL Server Tip 662

쿼리 대기 옵션

쿼리 대기 옵션 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서 정렬이나 해시처럼 메모리를 많이 사용하는 쿼리를 실행하면 실행에 필요한 충분한 메모리가 확보 될 때까지 쿼리가 대기하게 된다. 쿼리 대기 옵션을 사용하여 리소스에 대한 쿼리의 최대 대기 제한 시간을 설정 할 수 있다. 제한 시간의 범위는 0~ 214748364초 이며 기본값은 -1이다. 기본값의 경우 제한 시간이 예상 쿼리 비용의 25배로 계산 된다. 대기 중인 쿼리를 포함하는 트랜잭션은 쿼리가 메모리를 기다리는 동안 잠금을 유지 하여 검색할 수 없는 교착 상태가 발생 할 수 있다. 쿼리 대기 시간을 줄이면 기다리는 쿼리가 종료되고 트랜잭션이 종료되면서 이러한 교착 상태의 가능성을 낮..

Index create memory 설정

Index create memory 설정 Version : SQL Server 2005, 2008, 2008R2, 2012 분할된 테이블 및 인덱스를 사용할 때 분할된 인덱스가 정렬되지 않고 병렬처리 수준이 높은 경우 인덱스를 만드는데 필요한 최소 요구 메모리가 증가할 수 있다. 인덱스 생성 메모리 옵션은 인덱스를 만들기 위해 처음으로 할당되는 최대 메모리 양을 제어한다. 이 옵션의 기본값은 0(동적 할당)이다. 인덱스 생성시 설정 값을 초과하는 메모리가 필요할 경우 여유 메모리가 있으면 초과하여 사용하며 여유 메모리가 없을 경우에는 이미 할당된 메모리를 계속 사용하여 인덱스를 생성한다. Index create memory 옵션에 따라 단일 인덱스 생성 작업에서 모든 인덱스 파티션에 할당된 초기 총 메모..

Min memory per query 옵션

Min memory per query 옵션 Version : SQL Server 2005, 2008, 2008R2, 2012 Min memory per query 서버 구성 옵션은 쿼리 실행을 위해 할당되는 최소 메모리 양을 지정할 때 사용할 수 있다. 시스템에서 동시에 실행되는 쿼리가 많을 때 min memory per query 값을 늘리면 대량의 정렬 및 해시 작업과 같이 메모리를 많이 사용하는 쿼리의 성능 향상에 도움이 될 수 있다. 예를 들어 min memory per query 값을 2048KB로 설정하면 쿼리는 최소한 그 만큼의 총 메모리를 얻을 수 있다. 쿼리 실행을 위해 할당될 최소 메모리양은 512KB ~ 2147483647KB(2GB)까지 값을 설정할 수 있으며 기본값은 1024KB ..

SQL Server 에디션 다운그레이드와 제한된 기능 확인

SQL Server 에디션 다운그레이드와 제한된 기능 확인 Version : SQL 2008, 2008R2, 2012 SQL Server Enterprise 에디션에서는 데이터 압축, 파티셔닝, TDE(투명한 데이터 암호화), CDC(변경된 데이터 캡처)등의 기능을 제공한다. 이 기능은 내부적으로 데이터베이스 엔진이 파일 저장 정보를 관리 할 것이다. 이렇게 Enterprise 에디션을 사용하는 경우 Standard 에디션으로 다운그레이드 할 때 오류가 발생 할 수 있다. 동적 관리 뷰 sys.dm_db_persisted_sku_reatures 를 사용하여 특정 기능을 사용하는 데이터베이스의 영향도를 확인 할 수 있다. 예를 들어 SQL Server 2008 Standard 에디션 인스턴스에 Advent..

Downgrade from SQL Server Ent to Std Edition

Downgrade from SQL Server Ent to Std Edition Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server가 설치 되어 있을 때 불필요한 기능이나 라이선스 문제로 인하여 에디션을 변경 이슈이 있을 때 작업 절차에 대해서 알아 본다. 항상 어떤 작업을 하기 전에 모든 데이터베이스 백업을 하도록 하자. 이때 시스템 DB도 꼭 백업을 할 수 있도록 한다. 백업 후 각 데이터베이스에서 다음의 DMV를 실행 한다. DMV는 엔터프라이즈 기능을 사용하는 지 여부를 알려준다. SELECT * FROM sys.dm_db_persisted_sku_features 기존의 SQL Server버전과 빌드 번호를 확인한다. SQL Server 다운그레레..

트랜잭션 로그 여유 공간 모니터링

트랜잭션 로그 여유 공간 모니터링 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서 발생하는 트랜잭션은 모두 트랜잭션 로그에 기록된다. 간혹 트랜잭션 로그 공간이 가득 차서 데이터베이스 운영에 문제가 발생하는 경우가 있다. 다음 스크립트를 사용하여 주기적으로 트랜잭션 로그 공간을 모니터링 하여 안정적인 운영을 할 수 있도록 하자. SELECT name , db.log_reuse_wait_desc , ls.cntr_value AS size_kb , lu.cntr_value AS used_kb , CAST(lu.cntr_value AS FLOAT) / CAST(ls.cntr_value AS FLOAT) AS used_percent , CASE WHEN ..

SQL Server가 서비스 격리를 처리하는 방법

SQL Server가 서비스 격리를 처리하는 방법 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에 연결되어 있는 사용자를 볼 때 sys.dm_exec_session을 사용하여 확인 할 수 있다. 예를 들어 나는 SQL Server Agent 서비스 계정을 알고 있다. 하지만 그 로그인으로 모든 연결을 볼 수 는 없다. 이것은 서비스 격리 때문이다. 이 기능은 Windows Vista부터 도입되었다. SQL Server 2008 이전에는 액세스 권한을 부여하기 위해 Domain\Username 또는 ComputerName\Username 방법을 지원하였다. 그렇다면 격리수준은 무엇일까? 모든 Windows 사용자 계정, 보안 그룹 및 컴퓨터 계정은 고..

쿼리 매개변수화 확인하기

쿼리 매개변수화 확인하기 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server를 업그레이드 하였는데 성능이 느려졌다? 무슨 일이 발생한 것일까? 쿼리가 느려진 원인과 실행된 쿼리가 매개변수화 되었는지 확인하는 방법에 대해서 알아보자. 이 포스트는 CSS SQL Server Engineers 블로그에 게시된 내용으로 필자가 읽고 이해한 내용을 정리하였다. 번역의 오류나 기술적 오류 가능성을 미리 알려두며 자세한 내용은 원문을 참고 하길 바란다. 우선 이 글을 읽기 전에 매개변수화에 대해서 알아보도록 하자. 매개변수화는 다음 아티클을 참고 한다. 단순 매개 변수화 : http://sqlmvp.kr/140189013252 강제 매개 변수화 : http://sql..

SQL Server에서 Drop 및 Delete 사용자 찾기

SQL Server에서 Drop 및 Delete 사용자 찾기 Version : SQL Server 2005, 2008, 2008R2, 2012 누군가 SQL Server에서 데이터를 삭제 했다? 그런데 누가 명령을 실행 하였는지 아무도 말을 하지 않는다? 트랜잭션 로그를 사용하여 어떤 사용자가 데이터를 삭제하였는지 알아보자. 이번 포스트를 시작하기 전에 지난 포스트를 참고하면 이해하는데 많은 도움이 될 듯 하다. 트랜잭션 로그 읽기 : http://sqlmvp.kr/140202102618 [Delete 문을 실행한 사용자 찾기] 데이터를 삭제한 사용자를 찾기 위해 예제 데이터베이스 및 테이블을 생성한다. --Create DB. USE [master]; GO CREATE DATABASE ReadingDBL..

SQL Server 트랜잭션 로그 읽기

SQL Server 트랜잭션 로그 읽기 Version : SQL Server 2005, 2008, 2008R2, 2012 데이터베이스에서 발생하는 행위는 트랜잭션 로그 라는 곳에 기록된다. 문서화되지 않은 기능 fn_dblog 함수를 사용하여 트랜잭션 로그의 정보를 읽어보자. Fn_dblog는 트랜잭션의 시작 LSN과 종료 LSN을 필요로 한다. NULL은 기본값으로 트랜잭션 로그 파일의 모든 로그 레코드를 반환한다. 실습을 위해 데이터베이스를 생성한다. --Create DB. USE [master]; GO CREATE DATABASE ReadingDBLog; GO -- Create tables. USE ReadingDBLog; GO CREATE TABLE [Location] ( [Sr.No] INT I..