SQL에서 "Agent stack size" 관련 오류는 보통 스택 크기 초과(Stack Overflow) 또는 재귀 호출이 너무 깊어지는 경우 발생합니다.


주요 원인 및 해결 방법

1. 재귀 CTE(Common Table Expression)가 너무 깊을 때

WITH RECURSIVE 쿼리가 너무 많은 반복을 수행하면 발생할 수 있음.

해결 방법: MAXRECURSION 설정 변경 또는 LIMIT 추가.



2. 스토어드 프로시저/트리거의 과도한 재귀 호출

트리거가 서로 호출하는 경우 무한 루프가 발생할 수 있음.

해결 방법: 트리거 로직을 검토하고 재귀 호출을 방지.



3. 데이터 처리량이 너무 많을 때

조인된 테이블이 매우 크거나 너무 많은 데이터가 한 번에 처리될 때 발생 가능.

해결 방법: 인덱스 추가, 배치 처리로 데이터 분할.






---

1. 재귀 CTE 오류 해결 예제

(오류 발생 예제)

WITH RECURSIVE numbers AS (
    SELECT 1 AS num
    UNION ALL
    SELECT num + 1 FROM numbers
)
SELECT * FROM numbers;

무한 재귀 발생 → Agent stack size 초과 오류 발생 가능


(해결 방법)

WITH RECURSIVE numbers AS (
    SELECT 1 AS num
    UNION ALL
    SELECT num + 1 FROM numbers WHERE num < 1000  -- 종료 조건 추가
)
SELECT * FROM numbers;

WHERE num < 1000 → 재귀 호출 제한하여 스택 초과 방지.



---

2. SQL Server에서 MAXRECURSION 사용

WITH RECURSIVE numbers AS (
    SELECT 1 AS num
    UNION ALL
    SELECT num + 1 FROM numbers WHERE num < 10000
)
SELECT * FROM numbers
OPTION (MAXRECURSION 1000);  -- 최대 재귀 횟수 제한


---

3. 스택 크기 설정 변경 (DB별 해결 방법)

MySQL:

SET GLOBAL thread_stack = 512000;

PostgreSQL:
postgresql.conf에서 work_mem 값 조정 후 서버 재시작.

work_mem = '64MB'

SQL Server:

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'max server memory', 4096;
RECONFIGURE;



---

결론

재귀 CTE 사용 시 종료 조건 추가
SQL Server는 MAXRECURSION 설정
DB 설정 변경을 통해 스택 크기 조정 가능


'[DB]SQL실무' 카테고리의 다른 글

[기타]SQLSTATE=22001 오류  (0) 2025.04.15
[SQL]WITH 절의 장점 VS 단점  (0) 2025.03.18
[SQL]WITH 절  (1) 2025.03.18
[DB2]가상 테이블(DUAL vs SYSDUMMY1)  (0) 2025.03.18
DBMS별 숫자 형변환 함수 예시  (0) 2025.03.07

+ Recent posts