dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Runbooks Library/oracle/#45
Runbook #45
oracle
PerformanceSEV2 · DEGRADATION15-30 dakika / 15-30 minsSYSDBA / DBA / SELECT_CATALOG_ROLE

Oracle Hard Parse Spike and Shared Pool Pressure: Root Cause

Measures hard-parse rate and cursor proliferation to separate bind-variable, plan and statistics issues without flushing the shared pool.

Related Metrics:M46
Related Scripts:S64S75S70
#hard-parse#shared-pool#bind-variables#cursor

Operational Safety & Risk Notice

This runbook contains operational intervention steps; several are write-impacting (KILL, terminate, DROP, RESIZE). Verify in a staging environment first, and apply sequentially in production with verification.

🟢 Salt Okunur (Read-Only)·🟡 Geri Alınabilir (Reversible)·🔴 Yüksek Etkili / Geri Alınamaz (High Impact)

1. Symptom & Signals

- M46 hard parse oranı baseline üstünde; CPU ve `library cache: mutex X`, `cursor: pin S wait on X` gibi beklemeler artabilir.

- Aynı sorgunun farklı literal değerlerle çok sayıda benzeri bulunur.

2. Business & Technical Impact

CPU parse işlemine harcanır, eşzamanlılık ve yanıt süreleri bozulur; shared pool alanı verimsiz kullanılır.

3. Diagnosis & Root-Cause Analysis

🟢 Read-Only1. Tek anlık toplam sayı yerine iki örnek arasında **delta** alın:
sql
SELECT name, value FROM v$sysstat
WHERE name IN ('parse count (hard)','parse count (total)','execute count')
ORDER BY name;
🟢 Read-Only2. S64 ile yüksek parse/versiyon sayılı SQL'leri bulun:
sql
SELECT * FROM (
  SELECT sql_id, executions, parse_calls, version_count,
         SUBSTR(sql_text,1,120) AS sql_text
  FROM v$sqlarea
  WHERE parse_calls > 100
  ORDER BY parse_calls DESC
) WHERE ROWNUM <= 20;
🟢 Read-Only3. S75 ile shared pool/SGA belleğini, S70 ile istatistikleri kontrol edin. `version_count` yüksekse bind değişken tipi, optimizer ortamı veya invalidation nedenlerini inceleyin.
🟢 Read-Only4. AWR/ASH kullanımı Diagnostics Pack lisansı gerektirir; lisans yoksa `v$sysstat`, `v$sqlarea`, `v$session`, `v$sgainfo` üzerinden devam edin. 12c/19c CDB/PDB'de SQL_ID ve `CON_ID` bağlamını ayırın.

4. Remediation & Action Plan

🟡 Reversible1. Uygulama sorgularını **bind variable** kullanacak biçimde düzeltin; SQL metnini değiştiren gereksiz literal üretimini önleyin. Sürücü cursor/statement cache ayarını gözden geçirin.
🟡 Reversible2. İstatistik gerçekten eskiyse hedef tabloya ait istatistiği planlı biçimde güncelleyin; değişiklik plan regresyonu yaratabilir (S70).
🟡 Reversible3. `SESSION_CACHED_CURSORS` gibi ayarları ancak parse profilini ve bellek etkisini ölçerek değiştirin.
🔴 HIGH RISK / IRREVERSIBLE4. **`ALTER SYSTEM FLUSH SHARED_POOL` uygulamayın:** tüm planları atar, hard parse fırtınasını büyütür. `CURSOR_SHARING=FORCE` kalıcı birinci çözüm değil; literal önlenemeyen uygulamalarda yan etkiler test edilerek geçici olarak değerlendirilebilir.

5. Verification & Health Checks

- İki ölçüm arası hard parse / toplam parse oranı baseline'a döndü; CPU ve library cache beklemeleri azaldı, M46 düzeldi.

- Sorgu yanıt süresi iyileşti, plan regresyonu yok.

6. Rollback & Contingency Plan

- Uygulama bind değişikliği önceki sürüme döndürülür; `SESSION_CACHED_CURSORS` eski değere alınır.

- İstatistik değişiklikleri için önceki istatistikleri yedeklemeden otomatik geri alma varsaymayın; eski/yeni planları karşılaştırın.

More ORACLE Runbooks