SQL Access Advisor in Oracle Database 10g |
SQL Access Advisor in Oracle Database 10g - De SQL Access Advisor doet suggesties over indexen en materialized views die wellicht de performance omhoog brengt. Dit artikel beschrijft hoe de SQL Access Advisor in Oracle 10g te gebruiken.
* Enterprise Manager * DBMS_ADVISOR * Quick Tune * Relateerde Views
Enterprise Manager De SQL Access Advisor is voor de Enterprise Manager toegankelijk. Specifieke reports kunnen gemaakt worden door op de "Advisor Central" link, te klikken en dan op de "SQL Access Advisor" link. De getoonde pagina stelt je in staat een workload te creëren en een SQL Access Advisor task. Als de taak klaar is kan je informatie over de bevindingen en de aanbevelingen lezen.
DBMS_ADVISOR De DBMS_ADVISOR package kan gebruikt worden om welk advisory task dan ook te executen, waaronder SQL Access Advisor tasks. Het volgende voorbeeld laat zien hoe het gebruikt wordt om een typisch SQL Access Advisor script te creëren, executen en laten zien voor de huidige workload:
DECLARE l_taskname VARCHAR2(30) := 'test_sql_access_task'; l_task_desc VARCHAR2(128) := 'Test SQL Access Task'; l_wkld_name VARCHAR2(30) := 'test_work_load'; l_saved_rows NUMBER := 0; l_failed_rows NUMBER := 0; l_num_found NUMBER; BEGIN -- Creëer een SQL Access Advisor task. DBMS_ADVISOR.create_task ( advisor_name => DBMS_ADVISOR.sqlaccess_advisor, task_name => l_taskname, task_desc => l_task_desc); -- Reset de task. DBMS_ADVISOR.reset_task(task_name => l_taskname);
-- Creëer een workload. SELECT COUNT(*) INTO l_num_found FROM user_advisor_sqlw_sum WHERE workload_name = l_wkld_name;
IF l_num_found = 0 deN DBMS_ADVISOR.create_sqlwkld(workload_name => l_wkld_name); END IF;
-- Link de workload aan task. SELECT count(*) INTO l_num_found FROM user_advisor_sqla_wk_map WHERE task_name = l_taskname AND workload_name = l_wkld_name; IF l_num_found = 0 deN DBMS_ADVISOR.add_sqlwkld_ref( task_name => l_taskname, workload_name => l_wkld_name); END IF; -- Zet de workload parameters. DBMS_ADVISOR.set_sqlwkld_parameter(l_wkld_name, 'ACTION_LIST', DBMS_ADVISOR.ADVISOR_UNUSED); DBMS_ADVISOR.set_sqlwkld_parameter(l_wkld_name, 'MODULE_LIST', DBMS_ADVISOR.ADVISOR_UNUSED); DBMS_ADVISOR.set_sqlwkld_parameter(l_wkld_name, 'SQL_LIMIT', DBMS_ADVISOR.ADVISOR_UNLIMITED); DBMS_ADVISOR.set_sqlwkld_parameter(l_wkld_name, 'ORDER_LIST', 'PRIORITY,OPTIMIZER_COST'); DBMS_ADVISOR.set_sqlwkld_parameter(l_wkld_name, 'USERNAME_LIST', DBMS_ADVISOR.ADVISOR_UNUSED); DBMS_ADVISOR.set_sqlwkld_parameter(l_wkld_name, 'VALID_TABLE_LIST', DBMS_ADVISOR.ADVISOR_UNUSED);
DBMS_ADVISOR.import_sqlwkld_sqlcache(l_wkld_name, 'REPLACE', 2, l_saved_rows, l_failed_rows);
-- Zet task parameters. DBMS_ADVISOR.set_task_parameter(l_taskname, '_MARK_IMPLEMENTATION', 'FALSE'); DBMS_ADVISOR.set_task_parameter(l_taskname, 'EXECUTION_TYPE', 'INDEX_ONLY'); DBMS_ADVISOR.set_task_parameter(l_taskname, 'MODE', 'COMPREHENSIVE'); DBMS_ADVISOR.set_task_parameter(l_taskname, 'STORAGE_CHANGE', DBMS_ADVISOR.ADVISOR_UNLIMITED); DBMS_ADVISOR.set_task_parameter(l_taskname, 'DML_VOLATILITY', 'TRUE'); DBMS_ADVISOR.set_task_parameter(l_taskname, 'ORDER_LIST', 'PRIORITY,OPTIMIZER_COST'); DBMS_ADVISOR.set_task_parameter(l_taskname, 'WORKLOAD_SCOPE', 'PARTIAL'); DBMS_ADVISOR.set_task_parameter(l_taskname, 'DEF_INDEX_TABLESPACE', DBMS_ADVISOR.ADVISOR_UNUSED); DBMS_ADVISOR.set_task_parameter(l_taskname, 'DEF_INDEX_OWNER', DBMS_ADVISOR.ADVISOR_UNUSED); DBMS_ADVISOR.set_task_parameter(l_taskname, 'DEF_MVIEW_TABLESPACE', DBMS_ADVISOR.ADVISOR_UNUSED); DBMS_ADVISOR.set_task_parameter(l_taskname, 'DEF_MVIEW_OWNER', DBMS_ADVISOR.ADVISOR_UNUSED);
-- Execute de task. DBMS_ADVISOR.execute_task(task_name => l_taskname); END; /
-- Laat het resultaat script zien. SET LONG 100000 SET PAGESIZE 50000 SELECT DBMS_ADVISOR.get_task_script('test_sql_access_task') AS script FROM dual; SET PAGESIZE 24
De waarde voor het SET LONG commando moet aangepast worden om het hele script te kunnen laten zien.
Quick Tune Als je alleen een individueel statement wil tunen, kan je de QUICK_TUNE procedure als volgt gebruiken:
BEGIN DBMS_ADVISOR.quick_tune( advisor_name => DBMS_ADVISOR.SQLACCESS_ADVISOR, task_name => 'emp_quick_tune', attr1 => 'SELECT e.* FROM emp e WHERE UPPER(e.ename) = ''SMITH'''); END; /
Alle aanbevelingen kunnen dan middels de bovenstaande query met invulling van de juiste naam gezien laten worden.
Related Views De volgende views kunnen gebruikt worden om de SQL Access Advisor output te laten zien zonder gebruik te maken van de Enterprise Manager of de get_task_script functie:
* DBA_ADVISOR_TASKS - Basic informatie over bestaande tasks. * DBA_ADVISOR_LOG - Status informatie over bestaande tasks. * DBA_ADVISOR_FINDINGS - Bevindingen gevonden voor een bestaande tasks. * DBA_ADVISOR_RECOMMENDATIONS - Aanbevelingen voor de problemen gevonden door een bestaande task.
Voor meer informatie:
* DBMS_ADVISOR |
|
|