SQL Tuning Advisor görevi oluştur, çalıştır ve önerileri oku
OraclePerformansKomut
-- 1) Cursor cache'teki SQL icin gorev olustur ve calistir:
VAR task VARCHAR2(64)
BEGIN
:task := DBMS_SQLTUNE.CREATE_TUNING_TASK(
sql_id => '<sql_id>',
scope => DBMS_SQLTUNE.SCOPE_COMPREHENSIVE,
time_limit => 300,
task_name => 'STA_<sql_id>',
description => 'Yavas rapor sorgusu');
DBMS_SQLTUNE.EXECUTE_TUNING_TASK(task_name => :task);
END;
/
-- AWR'daki gecmis SQL icin: begin_snap => <b>, end_snap => <e>, sql_id => '<sql_id>'
-- 2) Durum ve rapor:
SELECT task_name, status FROM dba_advisor_log WHERE task_name = :task;
SET LONG 1000000 LONGCHUNKSIZE 1000000 LINESIZE 200 PAGESIZE 0
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK(:task) FROM dual;
-- 3) Onerileri uygulanabilir script olarak al:
SELECT DBMS_SQLTUNE.SCRIPT_TUNING_TASK(:task) FROM dual;
-- 4) Is bitince:
EXEC DBMS_SQLTUNE.DROP_TUNING_TASK(task_name => :task);Ne yapar?
Optimizer'ı daha uzun süreli "tuning modu"nda çalıştırarak SQL için istatistik eksikliği, yeni index, SQL profile, alternatif plan ve SQL yeniden yazım önerileri üretir; profile önerisini gerçek çalıştırmayla doğrular.
Ne zaman kullanılır?
Tek bir problemli SQL için hızlı ikinci görüş gerektiğinde, plan regresyonunda SQL profile ile kodu değiştirmeden düzeltme ararken.
Dikkat
Tuning Pack lisansı gerekir. COMPREHENSIVE kapsam SQL'i test amaçlı çalıştırabilir (DML için yalnız SELECT kısmı); prod'da time_limit ver. Index önerileri sistem genelini dikkate almaz; DML maliyetini ayrıca değerlendir. Kullanıcıya ADVISOR yetkisi gerekir.
İ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