DBAtlas · Veritabanı operasyon atlası

SQL profile kabul et, devre dışı bırak, kaldır

OraclePerformans

Komut

-- 1) Tuning task'in onerdigi profile'i kabul et:
DECLARE
  l_name VARCHAR2(128);
BEGIN
  l_name := DBMS_SQLTUNE.ACCEPT_SQL_PROFILE(
              task_name   => '<task_name>',
              name        => 'PROF_<sql_id>',
              description => 'STA onerisi, CHG-1234',
              force_match => TRUE,     -- literal farklari icin de eslesir
              replace     => TRUE);
  DBMS_OUTPUT.PUT_LINE('Profile: ' || l_name);
END;
/

-- 2) Profile'lar ve kullanan cursor'lar:
SELECT name, category, status, force_matching,
       TO_CHAR(created,'YYYY-MM-DD HH24:MI') AS created
FROM   dba_sql_profiles
ORDER  BY created DESC;

SELECT sql_id, child_number, plan_hash_value, sql_profile
FROM   v$sql
WHERE  sql_profile IS NOT NULL;

-- 3) Gecici devre disi birak / kaldir:
EXEC DBMS_SQLTUNE.ALTER_SQL_PROFILE(name => 'PROF_<sql_id>', attribute_name => 'STATUS', value => 'DISABLED');
EXEC DBMS_SQLTUNE.DROP_SQL_PROFILE(name => 'PROF_<sql_id>', ignore => TRUE);

Ne yapar?

SQL profile, optimizer'a ek cardinality/selectivity düzeltmeleri (OPT_ESTIMATE vb.) veren ve SQL metnine dokunmadan daha iyi plan üretmesini sağlayan nesnedir; FORCE_MATCH ile yalnızca literal'leri farklı SQL'lere de uygulanır.

Ne zaman kullanılır?

Hazır (packaged) uygulamada SQL değiştirilemiyorsa, STA doğrulanmış bir iyileşme önerdiğinde, plan regresyonuna hızlı müdahalede.

Dikkat

Tuning Pack lisansı gerekir. Profile planı "kilitlemez", tahminleri düzeltir; veri dağılımı değişince plan yine değişebilir. Plan sabitliği şartsa SQL Plan Baseline kullan. Profile ve baseline birlikte varsa baseline'daki kabul edilmiş planlar arasından seçim yapılır. Kabul öncesi validation sonuçlarını (raporun 'Validation results' bölümü) mutlaka oku.

DBAtlas'ta aç →

İlgili