dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Runbook #39
oracle
PerformanceSEV2 · CİDDİ BOZULMA15-30 dakika / 15-30 minsSYSDBA / DBA / SELECT_CATALOG_ROLE

Oracle Yüksek DB Time ve AAS: Yavaşlık İçin Sorgu ve Bekleme Triyajı

Yüksek aktif oturum sayısını CPU, I/O, kilit ve ağ beklemelerine ayırır; pahalı SQL'i bulup güvenli iyileştirme planı oluşturur.

İlişkili Metrik:M40M48
İlişkili Script:S61S77S64S75
#db-time#aas#wait-events#sql-tuning#ash

Operasyonel Güvenlik ve Risk Uyarısı

Bu runbook müdahale adımları içerir; birçok adım yazma etkilidir (KILL, terminate, DROP, RESIZE). Önce test ortamında deneyin, üretimde adımları sırayla ve doğrulayarak uygulayın.

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

1. Belirti / Symptom

- 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. Etki / Impact

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

3. Teşhis / Diagnosis

🟢 Salt Okunur1. 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;
🟢 Salt Okunur2. 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.
🟢 Salt Okunur3. Ö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.
🟢 Salt Okunur4. 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. Müdahale / Response

🟡 Geri Alınabilir1. 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.
🟡 Geri Alınabilir2. 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);
🔴 YÜKSEK RİSK / GERİ ALINAMAZ3. İş 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. Doğrulama / Verification

- 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. Geri Alma / Rollback

- 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.

Diğer ORACLE Runbook'ları