데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

메모리 최적화 테이블변수와 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-kr/library/dn535766(v=sql.120).aspx)

테이블 변수에 대한 메모리는 데이터베이스의 리소스 관리자 리소스 풀에서 제공됩니다메모리 액세스에 최적화된테이블과는 달리 테이블 변수의에 의해(삭제된 행을 포함하여사용되는 메모리는 테이블 변수가 범위를 벗어날 해제됩니다메모리는 데이터베이스의 단일  PGPOOL 메모리 소비자의 일부로 계산 됩니다.

 

 메모리 최적화 테이블 변수에서 루프를 사용하면 루프가 끝날때 까지 삭제된 모든 행이 유지되고 있으므로 메모리를 소비하는 것이다 내용을 확인하기 위해 간단한 테스트 시나리오를 만들어 본다.  테스트 시나리오는 메모리 최적화 테이블에 1백만 행을 삽입하고 삭제하는 것을 반복해서 10억건의 데이터를 처리하는 것이다.

 

1.       디스크 기반의 테이블을 생성하고 1백만 행을 입력 한다.

CREATE table t2(

  [OrderQty] [smallint] NOT NULL,

  [ProductID] [int] NOT NULL,

  [SpecialOfferID] [int] NOT NULL,

  [LocalID] [int] NOT NULL

  )

go

 

insert into  t2

select OrderQty, ProductID, SpecialOfferID, 1 as localID from AdventureWorks2016CTP3.[Sales].[SalesOrderDetail_ondisk]

go 10

 

2.       메모리 최적화 테이블을 사용할 유형을 생성한다.

CREATE TYPE [SalesOrderDetailType_inmem] AS TABLE(

[OrderQty] [smallint] NOT NULL,

[ProductID] [int] NOT NULL,

[SpecialOfferID] [int] NOT NULL,

[LocalID] [int] NOT NULL,

 

INDEX [IX_ProductID] HASH ([ProductID]) WITH ( BUCKET_COUNT = 1000000),

INDEX [IX_SpecialOfferID] NONCLUSTERED (LocalID)

)

WITH ( MEMORY_OPTIMIZED = ON )

 

3.       아래 반복문이 잇있는 스크립트를 실행하여 오류를 확인한다.

DECLARE @t2 AS [SalesOrderDetailType_inmem]

insert into @t2 select * from t2

 

while 1 = 1

begin

       delete @t2

       insert into @t2 select * from t2

end

 

(1213170 row(s) affected)

 

(1213170 row(s) affected)

 

(1213170 row(s) affected)

The statement has been terminated.

Msg 701, Level 17, State 103, Line 35

There is insufficient system memory in resource pool 'default' to run this query.

 



강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp
No. Subject Author Date Views
2093 Linux에서 DISK I/O 사용량 확인 jevida(강성욱) 2017.09.13 3728
2092 Linux에서 CPU 사용량 확인 jevida(강성욱) 2017.09.13 2225
2091 SQL Linux에서 SQL Server 시작, 중지, 활성, 비활성 jevida(강성욱) 2017.09.13 1457
2090 SQL Server DBA 체크리스트 jevida(강성욱) 2017.05.31 6958
2089 SQL Server 데이터베이스 백업이 성공적인지 확인하는 방법 jevida(강성욱) 2017.05.31 3737
2088 트리거가 적용된 메모리 최적화 테이블에서 alter table 실패 jevida(강성욱) 2017.05.31 3254
2087 메모리 최적화 테이블 변수 및 예상 행수 jevida(강성욱) 2017.05.31 2945
2086 백업 파일 복원과 3241 오류 (Microsoft® SQL Server® Backup to Microsoft Azure®Tool 사용) jevida(강성욱) 2017.05.31 3110
2085 In-Memory OLTP를 사용할 때 체크포인트 파일이 너무 많아 지는 이유 jevida(강성욱) 2017.05.31 2678
» 메모리 최적화 테이블변수와 701 오류 (loop 사용으로 인한 메모리 부족 오류) jevida(강성욱) 2017.05.31 3351
2083 메모리 최적화 테이블에서 해시 인덱스 사용시 버킷 카운트의 중요성 jevida(강성욱) 2017.05.31 2964
2082 인덱스 리빌드시 병렬로 실행계획이 생성되지 않는 이유 jevida(강성욱) 2017.03.13 4941
2081 SQL Server 833오류 (15 Sec Slow IO Detected) jevida(강성욱) 2017.03.13 4367
2080 SQL Server nonpreemptive 모드에서Long Sync IO 오류 jevida(강성욱) 2017.03.13 3114
2079 SQL Server DTC Transaction의 SPID = -2 반환 jevida(강성욱) 2017.03.13 2399
2078 SQL Server Read/Writer 동기화 작동 원리 jevida(강성욱) 2017.03.13 2753
2077 SQL Server가 논리 및 물리 프로세서를 결정하는 방법 jevida(강성욱) 2017.03.13 2869
2076 데이터베이스에서 사용자 삭제 오류 jevida(강성욱) 2017.03.13 2789
2075 SQL Server ODBC Driver 및 Command package Tool 설치 jevida(강성욱) 2017.01.11 4766
2074 SQL Server Install on Linux (Ubuntu – 16.0.4) jevida(강성욱) 2017.01.11 4999





XE Login