DBAtlas · Veritabanı operasyon atlası

Baseline planını FIXED yap, devre dışı bırak veya sil

OraclePerformans

Komut

-- Planin icerigini gor:
SELECT *
FROM   TABLE(DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE(
         sql_handle => '<sql_handle>',
         plan_name  => '<plan_name>',
         format     => 'TYPICAL'));

SET SERVEROUTPUT ON
DECLARE
  n PLS_INTEGER;
BEGIN
  -- FIXED: bu plan tercih edilir, yeni planlar otomatik evolve edilmez
  n := DBMS_SPM.ALTER_SQL_PLAN_BASELINE(
         sql_handle => '<sql_handle>', plan_name => '<plan_name>',
         attribute_name => 'fixed', attribute_value => 'YES');

  -- Kotu plani kullanima kapat (silmeden):
  n := DBMS_SPM.ALTER_SQL_PLAN_BASELINE(
         sql_handle => '<sql_handle>', plan_name => '<bad_plan_name>',
         attribute_name => 'enabled', attribute_value => 'NO');
END;
/

-- Tek plani veya SQL'in tum baseline'ini sil:
DECLARE
  n PLS_INTEGER;
BEGIN
  n := DBMS_SPM.DROP_SQL_PLAN_BASELINE(sql_handle => '<sql_handle>', plan_name => '<plan_name>');
  -- plan_name verilmezse SQL'in tum planlari silinir:
  -- n := DBMS_SPM.DROP_SQL_PLAN_BASELINE(sql_handle => '<sql_handle>');
  DBMS_OUTPUT.PUT_LINE(n || ' plan silindi');
END;
/

Ne yapar?

Baseline'daki planların özniteliklerini yönetir: FIXED plan diğer kabul edilmiş planlara tercih edilir ve yeni planların otomatik evolve'unu durdurur; ENABLED=NO planı silmeden devre dışı bırakır; DROP kalıcı olarak kaldırır.

Ne zaman kullanılır?

Kritik SQL'de planı kesin olarak sabitlemek, yanlışlıkla kabul edilmiş kötü planı kapatmak, artık gerekmeyen baseline'ları temizlemek için.

Dikkat

Enterprise Edition gerekir. FIXED planlar veri büyüdükçe kötüleşebilir ve optimizer'ın daha iyi planı kullanmasını engeller; periyodik gözden geçir. Tüm planları ENABLED=NO olan SQL serbestçe optimize edilir. DROP geri alınamaz; önce DBMS_SPM.PACK_STGTAB_BASELINE ile staging tablosuna yedekle.

DBAtlas'ta aç →

İlgili