2011-04-14 4 views
10

SAS의 메모리 사용, 정렬 및 왜 그렇게 비효율적인지 궁금합니다.SAS 메모리 사용 및 정렬

저는 쿼드 코어 제온과 8GB 램을 가지고 있습니다. 3GB 데이터 세트가 있습니다. 왜 표준 proc 정렬 동안 주어진 시간에 120MB의 램과 15-20 %의 CPU 사용률이 사용 되는가? 이것은 무서운 무언가가 절차와 함께 진행되고있는 것처럼 보입니다.

제 생각에는 사용 가능한 메모리가 있으면 전체 데이터 세트를로드 한 다음 사용 가능한 모든 CPU 사이클을 제거합니다. 하지만 겨우 15 % 만요? 사용 가능한 리소스를 낭비하고 낭비합니다. 그것은 고통스럽게 느린 디스크 에 끊임없이 앞뒤로 가고있는 것처럼 보인다.

"SAS, 모든 것을 빠르게 활용할 수 있습니다"라는 마술 설정이 있습니까?

64 비트 SAS, btw를 실행하는 64 비트 OS.

답변

6

MEMSIZESORTSIZE 설정을 확인할 수 있습니다. 정렬 성능에 대한 자세한 설명은 here입니다.

1

일반적으로 SAS가 작동하는 방식이 아닙니다. SAS는 데이터를 디스크 드라이브에 보관하고 한 번에 그 부분 만 읽습니다. SAS의 이점은 RAM에 적합하지 않은 물건에 SAS를 사용한다는 것입니다.

Stata, R 또는 데이터를 RAM에 유지하는 다른 패키지에 관심이있을 수 있습니다. 동일한 프로젝트의 경우에도 프로그램간에 &을 뒤로 이동하는 것은 매우 쉽습니다.

3

정렬 작업은 시간이 소요되는 정렬 작업이 아니라 일반적으로 데이터 세트를 읽고 다시 쓰는 작업입니다. 비교적 빨리 정렬 할 수 있습니다. 따라서 3GB 데이터 세트를 사용하면 디스크가 모든 데이터를 제공하기까지 상당한 시간이 소요됩니다. 더 많은 부분을 읽음으로써 데이터의 부분을 겹칠 수 있지만 여전히 I/O 경계가 될 가능성이 있습니다. MEMSIZE 및 SORTSIZE는 최소한 사용 가능한 메모리를 최대로 활용할 수있게 해줍니다. SAS가 전체 데이터 세트를 읽고 한 번에 정렬 한 다음 다시 작성해야합니다. 메모리를 적게 사용하거나 MEMSIZE/SORTSIZE가 적절하게 구성되어 있지 않으면 청크로 된 데이터 세트를 정렬 한 다음 해당 청크를 병합해야합니다. 가능한 한 많은 시간이 걸리므로 "다중 패스 정렬"을 피하고 싶습니다 (전체 데이터 세트에서 청크를 정렬 한 다음 다시 모든 데이터를 통해 해당 청크를 병합해야합니다). SASLOG에서 멀티 패스 정렬인지 아닌지에 대한 힌트를 얻은 것 같습니다.