SQL Server/SQL Server Tip 662

In-Memory OLTP를 사용할 때 체크포인트 파일이 너무 많아 지는 이유

In-Memory OLTP를 사용할 때 체크포인트 파일이 너무 많아 지는 이유 · Version : SQL Server 2014, 2016 SQL Server에서 로그 백업은 매우 중요하다. 로그 백업을 수행하지 않으면 로그 증가와 체크포인트 파일 증가가 발생할 수 있다. 트랜잭션 로그 아키텍처에 관해서는 아래 링크를 참고 한다.· 트랜잭션 로그 논리 아키텍처 - http://sqlmvp.kr/140187294218· 트랜잭션 로그 물리 아키텍처 - http://sqlmvp.kr/140187358202· LDF 파일이 잘리지 않는 이유 - http://sqlmvp.kr/140194327713· 이번 케이스는 하나의 In-Memory 최적화 테이블이 있는 데이터베이스를 복원 후 해당 테이블을 삭제하였다. ..

메모리 최적화 테이블변수와 701 오류 (loop 사용으로 인한 메모리 부족 오류)

메모리 최적화 테이블변수와 701 오류 (loop 사용으로 인한 메모리 부족 오류) · Version : SQL Server 2014, 2016 메모리 최적화 테이블 변수에서 루프를 사용할 때 아래와 같은 메모리 부족 오류가 발생할 수 있다. 왜 이런 오류가 발생하는 것일까? Msg 701, Level 17, State 103, Line 11 There is insufficient system memory in resource pool ‘default’ to run this query. 이 오류는 메모리 최적화 테이블에서 의도된 디자인으로 발생한 오류이다. 메모리 액세스에 최적화된 테이블 변수에 관한 문서를 찾아보면 다음과 같은 설명이 있다. (https://technet.microsoft.com/ko-..

메모리 최적화 테이블에서 해시 인덱스 사용시 버킷 카운트의 중요성

메모리 최적화 테이블에서 해시 인덱스 사용시 버킷 카운트의 중요성 · Version : SQL Server 2014, 2016 SQL Server Memory optimized table(이하 메모리 최적화 테이블)은 기본적으로 메인 메모리에 상주한다. 메모리 최적화 테이블의 데이터는은 메모리에 상주하며 읽고 쓴다. 내구성의 목적으로 보조 복사본이 디스크에서 유지 관리 된다. 메모리 액세스에 최적화된 테이블의 데이터는 데이터베이스 복구중(또는 서버 재시작)에만 디스크에서 읽는다. 아래 스크립트는 메모리 최적화 테이블을 생성한다. CREATE TYPE [Sales].[SalesOrderDetailType_inmem] AS TABLE( [OrderQty] [smallint] NOT NULL, [Product..

인덱스 리빌드시 병렬로 실행계획이 생성되지 않는 이유

인덱스 리빌드시 병렬로 실행계획이 생성되지 않는 이유 · Version : SQL Server SQL Server에서 인덱스를 리빌드 할때 병렬이 아닌 싱글로 실행되는 경우가 있다. 실행 계획을 살펴보면 현재 어떤 방식으로 실행되었는지에 대한 내용을 확인할 수있으며 경우에 따라 병렬로 실행되지 않는 원인을 나타내기도 한다. 아래 예시는 실행계획에 표시하는 병렬로 처리하지 못한 이유를 나타낸다. But in this case, the query plan just say “CouldNotGenerateValidParallelPlan” like . 인덱스 작업과 함께 병렬 처리가 작동하는 방식에 대해서는 아래 링크를 참고 한다· Configure Parallel Index Operations : https:/..

SQL Server 833오류 (15 Sec Slow IO Detected)

SQL Server 833오류 (15 Sec Slow IO Detected) · Version : SQL Server SQL Server I/O 요청 작업에서 15초 이상I/O delay가 발생하는 경우 833오류가 반환되고 에러로그에 기록 된다. SQL Server has encountered %d occurrence(s) of I/O requests taking longer than %d seconds to complete on file [%ls] in database [%ls] (%d). The OS file handle is 0x%p. The offset of the latest long I/O is: %#016I64x. 이전 버전의 SQL Server는 Lazy Writer 및 I/O Compl..

SQL Server nonpreemptive 모드에서Long Sync IO 오류

SQL Server nonpreemptive 모드에서Long Sync IO 오류 · Version : SQL Server SQL Server nonpreemptive모드에서 1000ms 보다 오래 걸리는 I/O 동기화 작업이 발생하면 SQL Server에러로그에 아래와 같은 로그가 기록된다. Long Sync IO: Scheduler 95 had 1 Sync IOs in nonpreemptive mode longer than 1000 ms SQL Server가 수행하는 I/O 유형은 일반적으로 2가지가 있다.· Async (대부분의SQL Server I/O 방식https://technet.microsoft.com/en-us/library/aa175396(v=sql.80).aspx) · Sync 이번 포스..

SQL Server DTC Transaction의 SPID = -2 반환

SQL Server DTC Transaction의 SPID = -2 반환 · Version : SQL Server SQL Server에서 Session ID (SPID) 값이-2 인 경우는 SQL Server에서 DTC 트랜잭션이 활성화 중이지만 트랜잭션에 사용중인 세션이 없음을 나타낸다. 간단하게 시나리오를 정리하면 아래와 같다.1. 클라이언트가 DTC트랜잭션을 생성하고 소유한다.2. 클라이언트는 SQL Server에 연결하고 DTC 트랜잭션을 등록한다.3. Connection은 DTC 트랜잭션의 일부 작업을 수행한다.4. 클라이언트 연결이 끊어진다 .(또는 NULL로 등록) 현재 DTC 트랜잭션의 상태는 여전히 활성 상태이고 클라이언트가 DTC 트랜잭션을 커밋하지 않고 기본 연결을 유지한다. SQL ..

SQL Server Read/Writer 동기화 작동 원리

SQL Server Read/Writer 동기화 작동 원리 · Version : SQL Server SQL Server는 스레드 동기화를 제공하여 경쟁을 방지한다. SQL Server 코드에는 다중 스레드 액세스를 고려해야하는 코드가 수많은 곳에 위치 하고 있다. 가장 일반적인 기술은 멀티스레드 코딩에 사용되는 읽기/쓰기 잠금이다. 읽기, 쓰기의 동기화 객체의 기본 개념은 쓰기 동기화와 함께 읽기에 대해서 병렬처리를 허용하는 것이다. 아래 예제는 싱글 단일 경로 동기화 객체의 간단한 패턴이다. (EX : Spinlock)· T1 - 읽기 액세스 획득· T1 - 일부 작업 시작 · T2 - 읽기 액세스 권한 요청 – spinlock 블럭킹, CPU는 더이상 진행 하지 않음. · T1 - 액세스 해제· T2..

SQL Server 2016 과 추적 플래그 –T8048

SQL Server 2016 과 추적 플래그 –T8048 Version : SQL Server 2016 SQL Server 2016 부터 도입된 Automatic soft NUMA에서 CMemThread partitioning의 다양한 변화로 인해 추적 플래그 –T8048이 필요 할까? Microsoft Document에 따르면 SQL Server 2014 SP2 및 SQL Server 2016이상에서는 –T8048이 영향을 주지 않는다고 한다.· Trace Flag : https://msdn.microsoft.com/en-us/library/ms188396.aspx SQL Server 2016이전에는 추적 플래그 –T8048은 NUMA의 분할된 CMemThread 개체를 CPU 파티션 기반 개체로 업그..

SQL Server가 논리 및 물리 프로세서를 결정하는 방법

SQL Server가 논리 및 물리 프로세서를 결정하는 방법 Version : SQL Server SQL Server는 하드웨어 레이아웃 정보를 바탕으로 NUMA 노드를 구성한다. SQL Server 2016 부터는 레이아웃 정보를 바탕으로 자동으로 NUMA 노드를 구성을 한다.· SQL Server 2016 Automatic Soft NUMA : http://sqlmvp.kr/220806805474그렇다면 SQL Server가 Native(bare metal) 또는 VM 환경과 같이 가상화 환경에서 구성된다면 어떻게 노드를 구성할까. 이 과정의 핵심은getlogicalprocessorinformation (windows API) API이며 논리적으로는 bare metal과 VM 기반이 동일하다. VM(..