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

Oracle High DB Time and AAS: Query and Wait Triage

Splits high active-session load into CPU, I/O, locks and network waits, then identifies expensive SQL and a safe tuning plan.

Related Metrics:M40M48
Related Scripts:S61S77S64S75
#db-time#aas#wait-events#sql-tuning#ash

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

- M40 (AAS) iş yükü baseline'ının ve CPU kapasitesinin üstünde; kullanıcı işlemleri yavaş.

- M48 buffer cache hit oranı düşebilir, ancak **tek başına** kök neden kanıtı değildir.

2. Business & Technical Impact

İşlemler uzar, oturumlar yığılır, bağlantı ve uygulama zaman aşımı oluşabilir.

3. Diagnosis & Root-Cause Analysis

🟢 Read-Only1. S61 ile canlı oturumları **bekleme sınıfına göre** görün. `WAITING` / CPU ayrımı için aktif oturumun `STATE` değerini kullanın:
sql
SELECT inst_id,
       CASE WHEN state='WAITING' THEN wait_class ELSE 'ON CPU' END AS activity,
       COUNT(*) AS sessions
FROM gv$session
WHERE type='USER' AND status='ACTIVE'
GROUP BY inst_id, CASE WHEN state='WAITING' THEN wait_class ELSE 'ON CPU' END
ORDER BY sessions DESC;

SELECT inst_id, sid, serial#, sql_id, event, wait_class, state, blocking_session
FROM gv$session
WHERE type='USER' AND status='ACTIVE'
ORDER BY inst_id, sid FETCH FIRST 30 ROWS ONLY;
🟢 Read-Only2. S64 ile toplam süre, CPU, buffer gets ve disk reads bakımından pahalı SQL_ID'leri bulun; hangi işlemden geldiğini uygulama ile eşleştirin. M40 için tek seferlik AAS değeri yerine trendi karşılaştırın.
🟢 Read-Only3. Önce lisanssız görünümler `v$session`, `v$sqlstats`, `v$sysmetric` ile teşhis edin. **S77 (`v$active_session_history`), AWR ve ASH kullanımı Oracle Diagnostics Pack lisansı gerektirir**; kurum lisansını doğrulamadan sorgulamayın. 12c/19c ortamlarında aynı lisans uyarısı geçerlidir.
🟢 Read-Only4. S75 ile SGA/PGA baskısını kontrol edin. `User I/O` baskınsa plan ve indeks; `Concurrency` baskınsa `oracle-blocking-sessions`; `ON CPU` baskınsa pahalı SQL ve uygulama eşzamanlılığına odaklanın.

4. Remediation & Action Plan

🟡 Reversible1. Sorumlu toplu işi uygulama sahibine danışarak yavaşlatın/durdurun. Kısa vadede kaynak tüketen SQL için plan/istatistik farkını karşılaştırın; rastgele `ALTER SYSTEM` bellek parametresi değiştirmeyin.
🟡 Reversible2. Açıkça eski olduğu doğrulanmış bir tablonun istatistiğini **bakım penceresinde** güncelleyin (istatistik değişimi planları değiştirebilir):
sql
EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname=>'APP', tabname=>'ORDERS', cascade=>TRUE);
🔴 HIGH RISK / IRREVERSIBLE3. İş yükünü durduran tek sorguyu kapatmak gerekiyorsa uygulama sahibinden onay alarak ilgili oturumu sonlandırın; açık transaction rollback maliyetini hesaba katın. `ALTER SYSTEM FLUSH SHARED_POOL` veya tüm oturumları sonlandırmak **anti-pattern**'dir.

4. 19c'de SQL plan değişikliklerini dikkatle inceleyin; farklı PDB'lerin aynı instance kaynaklarını paylaşabileceğini unutmayın. 12c/19c çok kiracılı sistemlerde `CON_ID` ile sorumlu PDB'yi ayırın.

5. Verification & Health Checks

- AAS, CPU ve gecikme baseline'a döndü; M40 normale indi, M48 tek başına başarı ölçütü yapılmadı.

- En pahalı SQL'in elapsed/CPU ve bekleme sınıfında düzelme var; uygulama hata oranı azaldı.

6. Rollback & Contingency Plan

- Toplu iş yavaşlatması geri açılabilir, ancak tamamlanmamış işler uygulamada yeniden planlanmalıdır.

- `DBMS_STATS` öncesi istatistikler önceden yedeklenmediyse otomatik ve güvenilir geri alma yoktur; planları eski/yeni şekilde test ederek yönetin. Sonlandırılan işlem yeniden denenmelidir.

More ORACLE Runbooks