900 개 이상의 열과 수억 개의 행이있는 SQL Server 테이블이 있습니다. 이러한 행의 작은 하위 집합 (일반적으로 한 번에 50 만 행 미만)을 가져와 모든 열을 살펴보고 해당 열에서 해당 값의 발생 비율과 함께 모든 값의 개수를 확인하는 저장 프로 시저를 구축했습니다. 먼저 데이터 범위를 좁히고 임시 테이블에 삽입하여이를 수행합니다. 그런 다음 임시 테이블에서 분석을 실행합니다.
최근에 우리는 한 번에 훨씬 더 큰 데이터 그룹 (50 ~ 1 억 행의 데이터)에 대해이 분석을 수행해야했습니다. 불행히도 이것을 실행하려고하면 영원히 실행되는 것 같습니다. 그렇게 많은 데이터를 임시 테이블에 삽입하는 것이 문제의 일부라고 생각하지만 모든 열의 모든 값을 그룹화하는 데 시간이 오래 걸립니다.
이 작업을 수행하는 더 쉽고 효율적인 방법이 있습니까? SQL Server 2012 사용.
메모리가 부족하여 스왑을 사용하기 시작하면 문제가 발생할 수 있습니다. HDD 사용량을 모니터링하고 그 이유인지 확인할 수 있습니다 (ctrl + shift + esc 사용). 그렇다면 루프를 수행 할 수 있습니다. 같은 것
DECLARE @max_id INT = (SELECT MAX(ID) FROM your_table),
@checpoint INT = 500000,
@current_id INT = 0,
@step INT = 0;
WHILE (@current_id < @max_id)
BEGIN
INSERT INTO #tmp
SELECT *
FROM your_table
WHERE id > @current_id and id < @current_id + @step * @checkpoint;
-- your analysis here
SET @step += 1;
SET @current_id = @current_id + @step * @checkpoint
END
데이터베이스에 액세스하지 않고 작성했기 때문에 구문이나 논리적 오류가있을 수 있지만 주요 아이디어는 매우 분명하다고 생각합니다
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다