문제 해결
본 장에서는 ProSort를 실행할 때 발생할 수 있는 문제를 설명하고 해결 방법을 기술한다.
1. 메모리의 사용
정렬 처리를 할 때 메모리의 사용량을 설정하면, 입력 파일의 크기와 지정된 메모리의 사용량을 비교한 결과에 따라 정렬 방식이 달라지게 된다.
정렬 방식은 다음과 같이 2가지로 구분된다.
-
내부 정렬 (1-pass sort)
입력 파일의 전체를 메모리에 읽어 정렬하는 방식이다. 지정된 메모리의 사용량이 입력 파일보다 큰 경우, 이 방식으로 정렬한다.
-
외부 정렬 (2-pass sort)
정렬 처리의 중간 결과를 임시 파일에 저장하는 방식이다. 지정된 메모리의 사용량보다 입력 파일이 큰 경우, 이 방식으로 정렬한다.
메모리의 사용량은 스크립트나 $PROSORT_SID.tip 파일에서 설정할 수 있다. 양쪽 모두에 설정된 경우, 스크립트에 설정된 값이 우선한다. 설정된 값은 실제 물리적인 메모리의 사용량을 의미하지 않으며, 정렬 방식을 선택하는 데에만 사용된다. 실제 메모리의 사용량은 레코드 저장 공간 외에도 정렬 키의 저장 공간 등이 추가된다.
단, 다음의 예처럼 설정된 경우에는 실제 물리적인 메모리의 사용량이 지정된 메모리의 사용량을 초과할 수 없다.
USE_STRICT_MEMORY=Y
1.1. 메모리 사용량의 지정
-
문제
외부 정렬을 사용할 때 처리 속도가 느려지는 문제가 발생한다.
-
해결 방법
설정된 메모리의 사용량(이하 M)이 입력 파일의 50% 이하일 때는 외부 정렬을 사용하므로, M을 늘려도 처리 속도는 여전히 느리다. 하지만 M이 입력 파일의 80% 이상일 때는 M이 클수록 처리 속도가 빨라진다.
외부 정렬을 사용할 경우에는 64MB ~ 256MB의 메모리를 설정할 것을 권장한다.
1.2. 시스템의 가용 메모리
-
문제
시스템의 물리적인 가용 메모리의 여유분보다 메모리의 사용량을 크게 설정했을 때 문제가 발생한다. 시스템의 가용 메모리가 부족하면 운영체제는 가상 메모리의 swap-in, swap-out 과정에서 디스크를 사용하게 된다. 이로 인해 스래싱(thrashing)이 발생된다.
-
해결 방법
시스템의 물리적인 가용 메모리의 여유분보다 메모리의 사용량을 크게 지정해서는 안 된다.
1.3. 동시 작업의 개수
-
문제
외부 정렬을 사용할 때 동시에 작업되는 개수가 물리적인 디스크의 개수를 초과하는 경우 문제가 발생한다.
-
해결 방법
동시에 작업되는 개수는 물리적인 디스크의 개수를 초과하지 않는 것이 좋다. 동시에 작업되는 개수는 디스크의 입출력 비율에 따라 적절하게 선택해야 한다.