Skip to content
튜닝 연습옵티마이저와 통계
OPT-059

SYSAUX 공간 경고를 따라가 보니 베이스라인이 3,400개 넘게 쌓여 있고 핵심 화면 하나는 베이스라인이 꺼져 있다

실전PLSQL유통649 / 700

상황 ​

본사 유통 DB의 alert.log에 SQL 관리 영역이 SYSAUX의 10%를 넘었다는 경고가 매주 찍힌다. 박팀장은 이참에 베이스라인 대장을 점검하자고 했다. 작년 11월 업그레이드 주간에 자동 캡처를 켜고 핵심 화면 일곱 개는 손으로 올렸는데, 그 뒤로 누구도 대장을 보지 않았다. 조민우가 현황을 뽑았다. 점장 화면 「매장 판매 상위 상품」(하루 약 600번)은 2주 전부터 느리다는 말이 있었는데, 조민우는 그 SQL이 목록에 있는 것을 보고 얼굴이 굳었다. 2주 전 18화 실습을 따라 ENABLED를 내려 본 SQL이었다.

테이블과 인덱스 ​

  • optimizer_capture_sql_plan_baselines TRUE(2024-11 업그레이드 주간에 켠 뒤 그대로) · optimizer_use_sql_plan_baselines TRUE
  • 리포트 도구(MODULE = 'RPT_TOOL')는 본부 사용자가 고른 조건을 리터럴로 박은 SQL을 보낸다. 같은 리포트를 두 번 누르는 일이 잦다.
  • CF11 판매상품: 1,096,708행 · 8,204블록 · CF15 입출고상품: 51,497행 · 349블록 · CF18 일별상품재고: 408행 · 6블록
  • SPM 설정 기본값: SPACE_BUDGET_PERCENT 10 · PLAN_RETENTION_WEEKS 53

원본 SQL ​

sql
-- 2024-11 업그레이드 주간 (그때 넣은 줄이 그대로 남아 있다)
ALTER SYSTEM SET optimizer_capture_sql_plan_baselines = TRUE SCOPE = BOTH;

-- 2주 전 조민우 : 18화 §2.4 [8] 을 따라 「매장 판매 상위 상품」의 베이스라인을 내려 보았다
DECLARE
  n PLS_INTEGER;
BEGIN
  n := DBMS_SPM.ALTER_SQL_PLAN_BASELINE(sql_handle      => 'SQL_3f8a1c2e9d7b0461',
                                        plan_name       => 'SQL_PLAN_3f8a1c2e9d7b0461a5c3e9d2',
                                        attribute_name  => 'ENABLED',
                                        attribute_value => 'NO');
END;
/

실행계획 학습용 예시 ​

xplan
[SYSAUX · alert.log]
 SQL_MANAGEMENT_BASE 1.21GB (SYSAUX 11.3GB의 10.7%)
 SPM: SMB space usage (1298137088) exceeds 10.000000% of SYSAUX size (12133220352).

[DBA_SQL_PLAN_BASELINES 요약 · 3,412개]
 ORIGIN                          ACCEPTED   개수    비고
 AUTO-CAPTURE                    YES       3,268   그 가운데 MODULE 'RPT_TOOL' 3,190개 · 대부분 실행 2번 뒤 다시 쓰이지 않음(LAST_EXECUTED가 만든 날)
 AUTO-CAPTURE                    NO           71   진화에서 떨어졌거나 아직 시험하지 않은 계획
 MANUAL-LOAD-FROM-CURSOR-CACHE   YES          73   핵심 화면 일곱 개를 포함

[핵심 화면 · 눈여겨볼 셋]
 SQL                     ENABLED  ACCEPTED  FIXED  REPRODUCED  LAST_MODIFIED  지금 계획 (Buffers · 받아들인 계획일 때)
 S2 매장 판매 상위 상품   NO       YES       NO     YES         2주 전         HASH JOIN · CF11 FULL 8,412 (받아들인 NL 312)
 S3 입출고 대사 (배치)    YES      YES       NO     NO          25-09-18       CF15 FULL 361 (받아들인 계획은 9월에 지운 IX_CF15_ITM 을 쓴다 · 그때 11)
 S6 매장 재고 마감 (배치) YES      YES       YES    YES         22-03-02       INDEX RANGE SCAN 4 (2022년에 FIXED)
 · 나머지 네 개(S1, S4, S5, S7)는 ENABLED YES · REPRODUCED YES · 지금 계획이 받아들인 계획

문제 ​

  1. 현황에서 고칠 것을 위험한 순서대로 늘어놓고 근거를 쓰시오. 자동 캡처가 리포트 도구의 SQL에 무엇을 해 왔는지도 쓰시오.
  2. 정리하는 SQL을 쓰시오. 자동 캡처, 리포트 도구의 베이스라인, SPM 설정, 핵심 화면 S2와 S3를 다루시오.
  3. 정리의 부작용과, 앞으로 베이스라인 대장에 남길 칸과 점검 주기를 쓰시오.
원본 SQL을 고쳐 쓰세요. 인덱스 DDL과 힌트도 쓸 수 있습니다.
무엇이 문제였고 왜 이렇게 고쳤는지 쓰세요.0자