본문 바로가기

SSIS

SSIS에서 Lookup 도구를 사용할 때 memory error

728x90

SQL Server Integration Service를 통해서 인터페이스를 구축하였습니다.

 

Lookup 도구를 사용하여 Source에서 전송할 데이터와 Destination에 있는 데이터를 비교하여 Key 기준으로 동일한 데이터가 있을 경우에는 Update를 하고 그렇지 않을 경우에는 Insert 하는 구조로 개발하였습니다.

 

그런데, 특정 시점 이후에 간헐적으로 Memory 문제가 발생하여 인터페이스가 정상적으로 이루어 지지 않았습니다.

 

Error: The system reports 90 percent memory load. There are 34223542272 bytes of physical memory with 3226693632 bytes free. There are 2147352576 bytes of virtual memory with 436195328 bytes free. The paging file has 39323815936 bytes with 6768295936 bytes free.

 

Lookup 도구의 내용을 보면 캐시 모드라는 항목이 있습니다.

전체 캐시를 사용할 경우 Destination에서 연결정보에 있는 쿼리를 수행하여 결과를 모두 메모리에 올리고 Source에서 전송될 값과 비교하는 로직으로 수행됩니다.

그러나, 캐시 없음으로 설정할 경우 Destination의 결과값을 메모리에 올리지 않고, Source에서 전송될 데이터의 키를 가지고 Destination에 Loop로 데이터 건수만큼 수행됩니다.

 

캐시 모드에 따라서 Destination에서 수행되는 횟수와 메모리에 적재되는 양의 차이가 생깁니다.

 

전체 캐시로 설정할 경우 장점은 대량 데이터가 전송될 경우 Destination에 쿼리가 한번 수행하여 메모리에 모두 적재하고 한번에 모든 값을 비교하여 빠른 성능을 보입니다.

 

단점은 그만큼 메모리 사용량이 많습니다.

 

캐시 없음으로 할 경우 장점은 메모리 사용량이 적은데 비해 단점은 대량 데이터 전송시에는 Destination에 수행되는 쿼리가 전송되는 데이터 건수만큼 수행되기 때문에 속도가 매우 느립니다.

 

캐시모드를 적절히 선택하여 전송속도와 메모리 사용에 대한 각자의 시스템에 맞는 최적을 찾아야 할것 같습니다.

 

https://blog.sqlauthority.com/2014/05/15/sql-server-ssis-look-up-component-cache-mode-notes-from-the-field-028/

 

SQL SERVER - SSIS Look Up Component - Cache Mode - Notes from the Field #028 - SQL Authority with Pinal Dave

: Lots of people think that SSIS is all about arranging various operations together in one logical flow. Well, the understanding is absolutely correct,

blog.sqlauthority.com

 

728x90