MSSQL 103

SQL Server DBA 체크리스트

SQL Server DBA 체크리스트· Version : SQL Server SQL Server를 운영할때 DBA role에서 정기적으로 수행하는 작업이 있을 것이다. 관리자마다 중요하게 생각하는 포인트는 다르겠지만 매일, 매주, 매월 일반적으로 점검해야하는 사항들에 대해서 정리해보려고 한다. 이번 포스트에서는 목록만 나열하고 추후 기회가 된다면 체크리스트 표를 만들어서 관리할 수 있는 방안에 대해서도 다루도록 한다. [Daily Check list]· 백업 : 백업 프로세스마다 성공적으로 잘 수행되었는지 확인한다. 백업 단계마다 시간을 확인하여 평소와 다르게 시간이 오래걸렸는지 확인하는 것도 중요하다. (평소와 다르게 오래 걸렸다면 블록커가 있거나 다른 서비스에 영향을 줄 수도 있기 때문이다.) ü S..

SQL Server 데이터베이스 백업이 성공적인지 확인하는 방법

SQL Server 데이터베이스 백업이 성공적인지 확인하는 방법· Version : SQL Server SQL Server 뿐만 아니라 모든 데이터베이스를 운영하는데 있어서 가장 중요한 작업은 백업이다. 아무리 유능한 DBA라도 백업 파일이 없으면 데이터베이스가 크래쉬 되었을때, 데이터 손실을 피할 수 없다. 수 많은 DBA들이 백업 실패가 발생하였을때 이메일, 이벤트 로그 등으로 알림을 받도록 시스템을 구성하여 사용하고 있다. 하지만 구성 매개변수가 변경되거나 메일 시스템의 오류, 또는 예상하지 못한 서브 시스템 오류로 인해 수일 또는 수주 동안 실패에 대한 메일을 받지 못하면 어떻게 될까? 또한 백업을 수행하는데 사용되는 응용프로그램 및 프로세스의 실패한작업과 관련된 검사가 있지만 이들이 성공적으로 ..

트리거가 적용된 메모리 최적화 테이블에서 alter table 실패

트리거가 적용된 메모리 최적화 테이블에서 alter table 실패· Version : SQL Server 2014, 2016 SQL Server 메모리 최적화 테이블에 트리거가 적용되어 있는경우 alter table 작업이 아래 오류와 함께 실패한다. Msg 41317, Level 16, State 3, Procedure ddl_trigger, Line 5 [Batch Start Line 28] A user transaction that accesses memory optimized tables or natively compiled modules cannot access more than one user database or databases model and msdb, and it cannot wri..

SQL Server Job Agent는 몇 개까지 실행이 가능할까?

SQL Server Job Agent는 몇 개까지 실행이 가능할까? Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 SQL Server Job Agent는 몇개까지 실행이 가능할까? SQL Server Job Agent실행할 수 있는 제한범위를 초과하면 다음과 같은 에러를 나타낸다. SQLServerAgent Error: Request to run job Job_id (from User distributor_admin) refused because the job is already running from a request by User distributor_admin. Changed database context to 'db_name'. (Micro..

Spool 연산자와 추적 플래그 8690

Spool 연산자와 추적 플래그 8690 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 쿼리 실행계획을 확인하다 보면 스풀(spool) 연산자(인덱스 스풀 또는 테이블 스풀)를 볼 수 있다. 스풀 연산자는 중간 결과를 저장하기 때문에 SQL의 다시 스캔 하거나, 또는 반복 사용을 위해 다시 계산할 필요가 없도록하여 쿼리 성능을 개선하는데 도움이 된다. 스풀 테이블은 tempdb 데이터베이스 저장되어 쿼리 사용 기간 중에만 존재한다. 예를 들어 Nested Loops 연산자로 연산자를 다시 수행하지만 다시 바인딩할 필요가 없을 경우 입력 사항을 다시 검색하는 대신 스풀된 데이터를 사용한다. 스풀 실행 계획은 아래 그림과 같은 아이콘으로 표시 된다. ..

SQL Server 2014 온라인 인덱스 리빌드와 잠금 우선순위 옵션

SQL Server 2014 온라인 인덱스 리빌드와 잠금 우선순위 옵션 Version : SQL Server 2014 SQL Server에서 인덱스를 다시 작성하면 인덱스가 삭제된 다음 다시 생성된다. 인덱스가 생성되는 과정에서 조각화가 제거되고 지정된 채우기 비율 또는 기존 채우기 비율 설정을 기준으로 페이지를 압축하여 디스크 공간을 회수하고 인덱스 행을 연속된 페이지로 다시 정렬할 수 있다. 익스텐트가 128개 이상인 인덱스를 다시 작성하면 데이터베이스 엔진에서 실제 페이지 할당 취소와 해당 관련 잠금이 트랜잭션 커밋후까지 지연된다. 인덱스의 크기가 작은 경우에는 혼합 익스텐트에 저장되기 때문에 리빌드 후에도 조각화가 줄어들지 않는 경우가 있다. ALTER INDEX : https://msdn.mic..

확장이벤트를 사용한 실행 계획 캡처

확장이벤트를 사용한 실행 계획 캡처 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 확장이벤트를 사용하여 실행 계획을 캡처하는 방법에 대해서 알아본다. 캡처된 쿼리 실행 목록에 다음과 같은 이름이 있다면 플랜을 확인하여 검토할수 있도록 한다. NojoinPredicate (2005 이상) ColumnWithNoStatistics (2005 이상) UnmatchedIndexes (2008 이상) PlanAffectingConvert (2012 이상) 아래 스크립트는 확장이벤트를 생성한다. 확장이벤트 생성시 너무 많은 오버헤드가 발생하지 않도록 필요한 내용만 추가하도록 한다. 아래 확장 이벤트는 SQL_Text(쿼리문)과 plan_handle(실행계획)..

SQL Server 2016 JSON 출력에 NULL 값 포함하기

SQL Server 2016 JSON 출력에 NULL 값 포함하기 Version : SQL Server 2016 SQL Server 2016의 새로운 기능인 JSON 형식에서 기본적으로 NULL 값은 표시 하지 않는다. JSON 형식의 출력에서 강제로 NULL 값을 포함하는 방법에 대해서 알아본다. 아래 스크립트는 전형적인 SQL Server 출력을 나타내는 결과이다. Size열을 보면 NULL값이 표시됨을 확인할 수 있다. Use AdventureWorks2014 go SELECT M.ProductModelID,M.Name as [ProductModel.Name], ProductID, Size FROM Production.Product P INNER JOIN Production.ProductModel ..

트리거를 사용하여 특정 컬럼 업데이트 하기 (After 트리거)

트리거를 사용하여 특정 컬럼 업데이트 하기 (After 트리거) Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 트리거는 특정 이벤트가 발생(INSERT, UPDATE, DELETE)할 때 자동적으로 실행되는 특수한 종류의 저장프로시저이다. 트리거는 FOR|AFTER와 INSTEAD OF 인수가 있다. FOR|AFTER : AFTER는 DML 트리거를 지정한 모든 작업이 성공적으로 실행되었을 때만 트거가 실행도록 지정한다. 모든 참조 연계 동작 및 제약 조건 검사도 이 트리거가 실행되기 전에 성공해야 한다. INSTEAD OF : 트리거를 시작하는 SQL문 대신 DML 트리거가 실행되도록 지정한다. DDL 또는 LOGON 트리거에 대해서는 INSTE..

컬럼스토어 인덱스 성능 (Columnsotre Index Performance)

컬럼스토어 인덱스 성능 (Columnsotre Index Performance) Version : SQL Server 2012, 2014, 2016 SQL Server 2012부터 도입된 컬럼스토어 인덱스는 열 기반 데이터 저장소 및 열 기반 쿼리 처리를 사용하여 데이터를 저장하고 관리한다. 인덱스는 주로 대량 로드 및 전용 쿼리를 수행하는 데이터웨어하우징 작업에 효과적이다. 전체 테이블 검색을 사용하는 쿼리에서는 뛰어난 성능을 제공하지만 특정 값을 찾아 데이터를 검색하는 쿼리에는 부적합 하다. 자세한 내용은 MSDN을 참고한다. Columnstore Index 소개 https://msdn.microsoft.com/ko-kr/library/gg492088(v=sql.120).aspx 일반 B-tree 인..