DBAtlas · Veritabanı operasyon atlası

Bind peeking ve adaptive cursor sharing durumunu kontrol et

OraclePerformans

Komut

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

DBAtlas'ta aç →

İlgili