Bind peeking ve adaptive cursor sharing durumunu kontrol et
OraclePerformansKomut
-- 1) Child cursor'lar: bind-sensitive / bind-aware / paylasilabilir mi?
SELECT sql_id, child_number, executions, plan_hash_value,
is_bind_sensitive, is_bind_aware, is_shareable,
ROUND(buffer_gets/NULLIF(executions,0)) AS gets_per_exec
FROM v$sql
WHERE sql_id = '<sql_id>'
ORDER BY child_number;
-- 2) ACS histogram ve selectivity araliklari:
SELECT child_number, bucket_id, count
FROM v$sql_cs_histogram
WHERE sql_id = '<sql_id>'
ORDER BY child_number, bucket_id;
SELECT child_number, predicate, range_id, low, high
FROM v$sql_cs_selectivity
WHERE sql_id = '<sql_id>';
-- 3) Peek edilen / yakalanan bind degerleri:
SELECT child_number, name, position, datatype_string, value_string,
TO_CHAR(last_captured,'YYYY-MM-DD HH24:MI:SS') AS captured
FROM v$sql_bind_capture
WHERE sql_id = '<sql_id>'
ORDER BY child_number, position;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('<sql_id>', NULL, 'TYPICAL +PEEKED_BINDS'));
-- 4) Neden yeni child olustu?
SELECT child_number, bind_mismatch, bind_equiv_failure,
optimizer_mismatch, load_optimizer_stats
FROM v$sql_shared_cursor
WHERE sql_id = '<sql_id>';Ne yapar?
Optimizer ilk hard parse'ta bind değerine bakarak (peeking) plan seçer. Adaptive cursor sharing, histogramlı kolonlarda bind değerine göre farklı child cursor/plan üretebilir; bu sorgular cursor'ın bind-sensitive/aware olup olmadığını, hangi değerin peek edildiğini ve child oluşma nedenlerini gösterir.
Ne zaman kullanılır?
"Aynı SQL bazen hızlı bazen yavaş" şikayetinde, çarpık (skewed) veri dağılımında, child cursor sayısı patladığında (high version count).
Dikkat
Lisans gerektirmez; salt okunur. V$SQL_BIND_CAPTURE örneklemedir (varsayılan ~15 dk'da bir) ve yalnız WHERE/HAVING bind'lerini tutar; her çalıştırmanın değeri değildir. ACS, cursor ancak birkaç kötü çalıştırmadan sonra bind-aware olur. Kritik SQL'de plan dalgalanmasını önlemek için SQL Plan Baseline'a birden çok plan yüklemek daha deterministiktir.
İlgili
- AWR snapshot al ve iki snapshot arası AWR raporu üret
- İki dönemi karşılaştıran AWR diff (compare period) raporu
- ASH ile anlık/son dakikaların top wait event ve top SQL analizi
- ADDM analizini çalıştır ve raporunu al
- SQL Monitor raporu al (çalışan veya biten uzun SQL)
- Bir session için 10046 trace aç/kapat ve TKPROF ile özetle