2013-08-06 1 views
1

다음 코드를 실행 한 후 한 시간이 지나면 코드가 정렬 실행 오류가 발생하면서 끝났습니다. 뭔가 잘못 내 코드가 아니면 내 컴퓨터 프로세서이며내부 조인을 위해 proc SQL 끝에서 정렬 오류가 발생했습니다.

proc sql; 

create table today as 

select a.account_number, a.client_type, a.device ,a.entry_date_est, 

    a.entry_time_est, a.duration_seconds, a.channel_name, b.esn, b.service_start_date, 

    b.service_end_date, b.product_name, b.billing_frequency_fee, b.plan_category, 

    b.plan_subtype, b.plan_type 

    from listen_nomiss a inner join service_nomiss b 

    on (a.account_number = b.account_number) 

    order by account_number; 

quit; 
+0

정확한 오류 메시지를 게시 할 수 있습니까? – Joe

+2

memsize 설정 한도에 도달했을 수 있습니다.이 설정을 편집 할 수 있지만 MEMSIZE 및 SORTSIZE 값이 상당히 증가한 후에 정렬 오류가 지속되면 디스크 공간 부족으로 인해 오류가 발생할 가능성이 있습니다. sas 임시 폴더가있는 디스크 공간이 충분한 지 확인하십시오. – scott

+0

오류 메시지가 나타나기까지 한 시간이 걸립니다. 나는 성명서로 주문하지 않고 시험 했으므로 잘하면이 작품은 – user2448666

답변

3

당신은 정렬을 수행하는 유틸리티 공간이 부족할 경우 그 오류가 가장 일반적으로 볼 수 RAM이 충분. 문제 해결을위한 몇 가지 제안 사항은 this SAS KB post에 있습니다. 가장 유용한 제안 :

  • options fullstimer msglevel=i ; 당신 뒤에서 무슨 일이 일어나고 있는지에 대해 더 많은 정보를 줄 것이다, 그래서 유틸리티 디렉토리가 어디 있는지
  • proc options option=utilloc; run; 당신을 말할 것이다 문제의 원인을 해결 할 수 있습니다 임시 파일은 정렬을 위해 만들어집니다. 최종 테이블에 필요한 공간의 약 3 배를 사용할 수 있는지 확인하십시오. 정렬은 정렬이 처리되는 방식으로 인해 데이터 세트를 적절하게 정렬하기 위해 대략 3 배의 공간이 필요합니다.
  • OPTIONS COMPRESS; 아직 사용하도록 설정되지 않은 경우 일부 공간 (가능한 많은 공간)을 절약 할 수 있습니다.

options memsize;options sortsize;은 SAS에 할당 된 메모리 용량과 디스크 대 메모리에서 수행되는 정렬 크기를 알려줍니다. sortsizememsize의 약 1/3이어야합니다 (처리하는 데 3 배 공간이 필요함). 최종 테이블이 주변에 있지만 단지 sortsize 이상인 경우 기본값이 너무 낮 으면 sortsize을 늘리는 것이 좋습니다 (memsize와 동일).

권한에 몇 가지 문제가있을 수도 있습니다. kb 문서의 다른 제안 사항 중 일부는 실제로 유틸리티 디렉토리에 쓸 수있는 권한이 있는지 확인하는 것과 관련이 있습니다.

+0

나는 order by 문을 생략하고 내부 조인이 완료된 후 데이터를 정렬 할 수 있습니까? – user2448666

+0

물론, 공간을 적게 차지하는 방법을 알지 못합니다. – Joe

1

과거에는 리소스에도 문제가있는 프로젝트가있었습니다. 는 주위 가지 분류의 몇했다 :

  • 가 PROC 정렬 문 변수에 의해에 첫 유일한 종류를 확인하고 다른 이후에 모든 것을 연결하는 TAGSORT 옵션을 가지고 잊지 마세요. by 문에 포함되지 않은 많은 열을 가질 때 유용합니다.
  • 색인 : by-statement에서 변수의 색인을 정확하게 작성하면 정렬하지 않고 by 문을 사용할 수 있습니다. 색인은 색인에 의존합니다.
  • 분할 : 여러 개의 청크로 데이터 세트를 분할하고 각 청크를 개별적으로 정렬 할 수 있습니다. 그런 다음 set 문에 모두 넣는 데이터 단계를 수행합니다. 또한 by 문을 사용할 때 SAS는 결과를 by 문에 따라 기록합니다.

이러한 접근 방식은 나중에 성능에 영향을 미칠 수 있으며 (세 번째는 작은 정도 일 수도 있음) 인덱스는 나중에 고려하지 않거나 의도적으로 두통을 유발할 수 있습니다.

전체 병합을 SAS 병합으로 다시 작성하는 경우 하나의 참고 사항 : SAS 병합 자체만으로는 다 대다 조인을 모방하지 않습니다. (일대일, 일대 다 및 다 대 일) 아마 여기의 경우가 아닐 수 있지만, 나는 그것이 안전한면에 있다고 언급한다.

관련 문제