MSSQL 103

SQL Server I/O 서브시스템 레이턴시 확인

SQL Server I/O 서브시스템 레이턴시 확인 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 데이터베이스 성능에 큰 영향을 주는 부분이 디스크이다. 보통 데이터베이스 시스템의 부하가 증가하면 I/O 서브시스템의 작업량이 증가한다. 만약 I/O 대기 시간이 증가되었음을 발견되었다면 I/O 서브시스템은 이전의 SQL 서버 동작에서 변화가 발생한 것이다. 예를 들면 인덱스가 테이블 스캔을 실행할 정도로 통계가 오래된 경우, 코드 변경, 암시적 변환, 쿼리 계획 변경, 인덱스 추가, 인덱스 유지 관리 작업, 액세스 패턴, 페이지 분할, 데이터 캡처, 변경 내용 추적, 임시테이블 사용, 버퍼풀 부족으로 인한 지연 기록기 증가 또는 호스트의 다른 작업에 의한 증가..

실행계획의 물리 및 논리연산자 설명

실행계획의 물리 및 논리연산자 설명 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 쿼리 최적화 프로그램은 쿼리 계획을 논리 연산자로 이루어진 트리로 만든다. 쿼리 최적화 프로그램은 쿼리 계획을 만든 다음 각 논리 연산자에 대해 가장 효율적인 물리연산자를 선택한다. 쿼리 최적화 프로그램은 비용 기반을 둔 방법을 사용하여 논리 연산자를 구현할 물리 연산자를 결정한다. 일반적으로 여러 물리 연산자가 하나의 논리 연산자를 구현할 수 있다. 그러나 간혹 하나의 물리 연산자가 여러 논리 연산자를 구현하는 경우도 있다. 아래 표는 논리 및 물리 연산자에 대한 실행계획 아이콘과 설명이다. 쿼리 실행계획을 분석하는데 참고 할 수 있도록 한다. [참고자료] https://te..

백업 압축과 추적플래그 3042

백업 압축과 추적플래그 3042 Version : SQL Server 2008, 2008R2, 2012, 2014 SQL Server의 백업 압축은 SQL Server 2008부터 지원되며 압축된 백업은 동일한 데이터의 압축되지 않는 백업보다 작으므로 일반적으로 I/O에 대한 비용이 절약되며 백업속도가 크게 향상된다. 하지만 압축을 하기 위한 추가 연산으로 약간의 CPU 오버헤드가 발생한다. 하지만 시스템 중에 가장 느린 부분은 디스크 이므로 CPU의 오버헤드를 감안하여도 충분히 이점이 있는 작업이다. 압축된 백업에 대한 최종 백업 파일의 크기는 데이터의 압축 가능한 정도에 따라 달라진다. 백업작업이 완료되기 전까지는 크기를 알 수 없다. 따라서 기본적으로 압축을 사용하여 데이터베이스를 백업 할 때 데이..

SOS_SCHEDURLER_YIELD 대기와 쿼리 식별

SOS_SCHEDURLER_YIELD 대기와 쿼리 식별 Version : SQL Server 2008, 2008R2, 2012 SOS_SCHEDULER_YIELD 대기 유형의 문제점 중 하나는 실제로 대기 유형이 아니다는 것이다. 이 대기 유형의 발생은 4ms 스케줄링 퀀텀에 따른 자발적인 CPU 양보로 인해 실행중인 스레드를 반환하고 실행 가능한 큐의 맨 아래로 이동하기 때문이다. 그리고 SOS_SCHEDULER_YIELD를 사용하여 대기 프로세스에 등록된다. 대기 유형에 대한 자세한 내용은 다음 포스트를 참고 한다. SOS_SCHEDULER_YIELD waits and the LOCK_HASH spinlock : http://www.sqlskills.com/blogs/paul/sos_scheduler..

랜덤 캐릭터 생성하기

랜덤 캐릭터 생성하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 무작위로 패스워드를 생성해야 하거나 쿠폰번호 등을 생성해야 할 때 일정한 범위내에서 랜덤한 문자열을 생성하는 코드를 만들어 본다. 랜덤한 문자열을 만들기 위해서 이전에 다루었던 RAND BETWEEN 함수를 사용하여 일정한 범위 내에서 난수를 발생 시킬 수 있도록 한다. RANDBETWEEN 함수 만들기 : http://sqlmvp.kr/220082013377 RAND BETWEEN 생성 create view vRandomNumber as select rand() as RandomNumber go create function randbetween(@bottom int, @top int) re..

트랜잭션 로그 백업을 읽고 트랜잭션 발생 시간 및 사용자 찾기

트랜잭션 로그 백업을 읽고 트랜잭션 발생 시간 및 사용자 찾기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 데이터베이스에서 발생하는 행위는 모두 트랜잭션 로그에 기록된다. 트랜잭션 로그를 읽는 방법과 트랜잭션 로그에서 삭제된 데이터 복구, 삭제한 사용자 찾기에 대한 내용은 이전 아티클을 참고 한다. SQL Server 트랜잭션 로그 읽기 : http://sqlmvp.kr/140202102618 트랜잭션 로그 및 LSN을 이용한 삭제된 데이터 복구 : http://sqlmvp.kr/140206499367 SQL Server에서 Drop 및 Delete 사용자 찾기 : http://sqlmvp.kr/140202164558 변경된 테이블 이름 복구하기 : htt..

RESOURCE_GOVERNOR_IDLE과 쿼리 성능

RESOURCE_GOVERNOR_IDLE과 쿼리 성능 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 이 글은 CSS SQL Server Engineers에 기재된 내용으로 원문을 읽고 해석한 것으로 필자의 이해력을 기반으로 기술하였습니다. 기술적 오류 또는 번역의 오류가 포함될 수 있으니 반드시 원문을 참고 바랍니다. 쿼리의 실행이 느릴 때 SQL Nexus(http://sqlnexus.codeplex.com/) 에서 다음과 같은 대기 유형을 캡처 했다. 대기 유형에서 RESOURCE_GOVERNOR_IDLE가 매우 높게 나타는것을 확인 하였다. 이 대기 유형은 CPU CAP 실행에 관련한 것이었다(CAP_CPU_PERCENT). CAP_CPU_PERCENT..

TDE 암호화된 데이터베이스 복원

TDE 암호화된 데이터베이스 복원 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server 2008부터 도입된 암호화 솔루션인 TDE는 전체 데이터베이스를 암호화 하고 암호화된 데이터베이스에 액세스하는 응용프로그램에 완전히 투명하게 하도록 하는 기능을 제공한다. TDE는 고급 암호화 표준(AES) 또는 트리플 DES(3DES) 암호화를 사용하여 데이터베이스 파일(MDF)과 로그파일(LDF) 모두에 저장된 데이터를 암호화 한다. 이 암호화 에서는 DEK(데이터베이스 암호화 키)를 사용하며 이 키는 복구하는 동안 사용할 수 있도록 데이터베이스 부트 레코드에 저장된다. DEK는 서버의 master 데이터베이스에 저장된 인증서 또는 EKM 모듈로 보호되는 ..

비관리자 계정에 Profiler 실행 권한 부여하기

비관리자 계정에 Profiler 실행 권한 부여하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server Profiler는 추적을 작성 및 관리하고 추적 결과를 분석하거나 특정 단계를 재생 할 수 있다. SQL Server Profiler : https://msdn.microsoft.com/ko-kr/library/ms181091.aspx SQL Server Profiler를 사용하기 위해서는 ALTER TRACE 권한이 필요하다. 권한이 없을 때에는 다음과 같은 오류가 발생 한다. 실습을 통해서 ALTER TRACE 권한을 부여하는 방법에 대해서 알아본다. 우선 권한이 없는 일반 사용자 계정을 생성한다. USE Master; GO CREATE ..

SQL Server Agent 공유 일정 생성하기

SQL Server Agent 공유 일정 생성하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server Agent에서 Job을 등록하고 Job이 실행될 일정을 등록한다. 이때 여러 job에서 같은 시간에 반복되는 일정이 있더라도 매번 일정을 등록해 주어야 한다. 공유된 일정을 만들어서 해당 일정을 여러 Job에서 가져다 쓸 수 있으면 얼마나 편리할까? 이번 포스트는 SQL Server Agent의 공유 일정 사용법에 대해서 알아 본다. SSMS에서 [SQL Server Agent] – [Job]에서 마우스 오른쪽을 클릭하여 [일정 관리]를 선택 한다. 일정 관리를 클릭하면 현재 등록된 모든 일정에 대해서 확인 할 수 있다. 사용자가 등록한 일정 ..