SQL profile kabul et, devre dışı bırak, kaldır
OraclePerformansKomut
-- 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.
İ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