<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jinfeng_wang

    G-G-S,D-D-U!

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      400 Posts :: 0 Stories :: 296 Comments :: 0 Trackbacks
    http://www.oracle-base.com/articles/11g/SqlPerformanceAnalyzer_11gR1.php#sql_performance_analyzer_api 

    The concept of SQL tuning sets, along with the DBMS_SQLTUNE package to manipulate them, was introduced in Oracle 10g as part of the Automatic SQL Tuning functionality. Oracle 11g makes further use of SQL tuning sets with the SQL Performance Analyzer, which compares the performance of the statements in a tuning set before and after a database change. The database change can be as major or minor as you like, such as:
    • Database, operating system, or hardware upgrades.
    • Database, operating system, or hardware configuration changes.
    • Database initialization parameter changes.
    • Schema changes, such as adding indexes or materialized views.
    • Refreshing optimizer statistics.
    • Creating or changing SQL profiles.
    Unlike Database Replay, the SQL Performance Analyzer does not try and replicate the workload on the system. It just plugs through each statement gathering performance statistics.

    The SQL Performance Analyzer can be run manually using the DBMS_SQLPA package or using Enterprise Manager. This article gives an overview of both methods.

    Setting Up the Test

    The SQL performance analyzer requires SQL tuning sets, and SQL tuning sets are pointless unless they contain SQL, so the first task should be to issue some SQL statements. We are only trying to demonstrate the technology, so the example can be really simple. The following code creates a test user called SPA_TEST_USER.
    CONN sys/password@prod AS SYSDBA
    CREATE USER spa_test_user IDENTIFIED BY spa_test_user
    QUOTA UNLIMITED ON users;
    GRANT CONNECT, CREATE TABLE TO spa_test_user;
    Next, connect to the test user and create a test table called MY_OBJECTS using a query from the ALL_OBJECTS view.
    CONN spa_test_user/spa_test_user@prod
    CREATE TABLE my_objects AS
    SELECT * FROM all_objects;
    EXEC DBMS_STATS.gather_table_stats(USER, 'MY_OBJECTS', cascade => TRUE);
    This schema represents our "before" state. Still logged in as the test user, issue the following statements.
    SELECT COUNT(*) FROM my_objects WHERE object_id <= 100;
    SELECT object_name FROM my_objects WHERE object_id = 100;
    SELECT COUNT(*) FROM my_objects WHERE object_id <= 1000;
    SELECT object_name FROM my_objects WHERE object_id = 1000;
    SELECT COUNT(*) FROM my_objects WHERE object_id BETWEEN 100 AND 1000;
    Notice, all statements make reference to the currently unindexed OBJECT_ID column. Later we will be indexing this column to create our changed "after" state.

    The select statements are now in the shared pool, so we can start creating an SQL tuning set.

    Creating SQL Tuning Sets using the DBMS_SQLTUNE Package

    The DBMS_SQLTUNE package contains procedures and functions that allow us to create, manipulate and drop SQL tuning sets. The first step is to create an SQL tuning set called spa_test_sqlset using the CREATE_SQLSET procedure.
    CONN sys/password@prod AS SYSDBA
    EXEC DBMS_SQLTUNE.create_sqlset(sqlset_name => 'spa_test_sqlset');
    Next, the SELECT_CURSOR_CACHE table function is used to retrieve a cursor containing all SQL statements that were parsed by the SPA_TEST_USER schema and contain the word "my_objects". The resulting cursor is loaded into the tuning set using the LOAD_SQLSET procedure.
    DECLARE
    l_cursor  DBMS_SQLTUNE.sqlset_cursor;
    BEGIN
    OPEN l_cursor FOR
    SELECT VALUE(a)
    FROM   TABLE(
    DBMS_SQLTUNE.select_cursor_cache(
    basic_filter   => 'sql_text LIKE ''%my_objects%'' and parsing_schema_name = ''SPA_TEST_USER''',
    attribute_list => 'ALL')
    ) a;
    DBMS_SQLTUNE.load_sqlset(sqlset_name     => 'spa_test_sqlset',
    populate_cursor => l_cursor);
    END;
    /
    The DBA_SQLSET_STATEMENTS view allows us to see which statements have been associated with the tuning set.
    SELECT sql_text
    FROM   dba_sqlset_statements
    WHERE  sqlset_name = 'spa_test_sqlset';
    SQL_TEXT
    --------------------------------------------------------------------------------
    SELECT object_name FROM my_objects WHERE object_id = 100
    SELECT COUNT(*) FROM my_objects WHERE object_id <= 100
    SELECT COUNT(*) FROM my_objects WHERE object_id BETWEEN 100 AND 1000
    SELECT COUNT(*) FROM my_objects WHERE object_id <= 1000
    SELECT object_name FROM my_objects WHERE object_id = 1000
    5 rows selected.
    SQL>
    Now we have an SQL tuning set, we can start using the SQL performance analyzer.

    Running the SQL Performance Analyzer using the DBMS_SQLPA Package

    The DBMS_SQLPA package is the PL/SQL API used to manage the SQL performance ananlyzer. The first step is to create an analysis task using the CREATE_ANALYSIS_TASK function, passing in the SQL tuning set name and making a note of the resulting task name.
    CONN sys/password@prod AS SYSDBA
    VARIABLE v_task VARCHAR2(64);
    EXEC :v_task :=  DBMS_SQLPA.create_analysis_task(sqlset_name => 'spa_test_sqlset');
    PL/SQL procedure successfully completed.
    SQL> PRINT :v_task
    V_TASK
    --------------------------------------------------------------------------------
    TASK_122
    SQL>
    Next, use the EXECUTE_ANALYSIS_TASK procedure to execute the contents of the SQL tuning set against the current state of the database to gather information about the performance before any modifications are made. This analysis run is named before_change.
    BEGIN
    DBMS_SQLPA.execute_analysis_task(
    task_name       => :v_task,
    execution_type  => 'test execute',
    execution_name  => 'before_change');
    END;
    /
    Now we have the "before" performance information, we need to make a change so we can test the "after" performance. For this example we will simply add an index to the test table on the OBJECT_ID column. In a new SQL*Plus session create the index using the following statements.
    CONN spa_test_user/spa_test_user@prod
    CREATE INDEX my_objects_index_01 ON my_objects(object_id);
    EXEC DBMS_STATS.gather_table_stats(USER, 'MY_OBJECTS', cascade => TRUE);
    Now, we can return to our original session and test the performance after the database change. Once again use the EXECUTE_ANALYSIS_TASK procedure, naming the analysis task "after_change".
    BEGIN
    DBMS_SQLPA.execute_analysis_task(
    task_name       => :v_task,
    execution_type  => 'test execute',
    execution_name  => 'after_change');
    END;
    /
    Once the before and after analysis tasks are complete, we must run a comparison analysis task. The following code explicitly names the analysis tasks to compare using name-value pairs in the EXECUTION_PARAMS parameter. If this is ommited, the latest two analysis runs are compared.
    BEGIN
    DBMS_SQLPA.execute_analysis_task(
    task_name        => :v_task,
    execution_type   => 'compare performance',
    execution_params => dbms_advisor.arglist(
    'execution_name1',
    'before_change',
    'execution_name2',
    'after_change')
    );
    END;
    /
    With this final analysis run complete, we can check out the comparison report using the REPORT_ANALYSIS_TASK function. The function returns a CLOB containing the report in text or HTML format. The script below spools the default text format report out to a file.
    SET LONG 1000000
    SET PAGESIZE 0
    SET LINESIZE 200
    SET LONGCHUNKSIZE 200
    SET TRIMSPOOL ON
    SPOOL /tmp/execute_comparison_report.txt
    SELECT DBMS_SQLPA.report_analysis_task(:v_task)
    FROM   dual;
    SPOOL OFF
    An example of this file can be seen here.

    Creating SQL Tuning Sets using Enterprise Manager

    Click on the "SQL Tuning Sets" link towards the bottom of the "Performance" tab.

    SQL Tuning Sets Link

    On the "SQL Tuning Sets" screen, click the "Create" button.

    SQL Tuning Sets

    Enter a name for the SQL tuning set and click the "Next" button.

    Options

    Select the "Load SQL statements one time only" option, select the "Cursor Cache" as the data source, then click the "Next" button.

    Load Methods

    Set the appropriate values for the "Parsing Schema Name" and "SQL Text" filter attributes, remove any extra attributes by clicking their remove icons, then click the "Next" button.

    Filter Options

    Accept the immediate schedule by clicking the "Next" button.

    Schedule

    Assuming the review information looks correct, click the "Submit" button.

    Review

    The "SQL Tuning Sets" screen shows the confirmation of the tuning set creation and the scheduled job to populate it.

    Confirmation

    Once the population job completes, clicking on the SQL tuning set displays its contents.

    SQL Tuning Set Contents

    Now we have an SQL tuning set, we can start using the SQL performance analyzer.

    Running the SQL Performance Analyzer using Enterprise Manager

    Click the "SQL Performance Analayzer" link on the "Software and Support" tab.

    SQL Performance Analyzer Link

    Click the "Guided Workflow" link on the "SQL Performance Analayzer" screen.

    Guided Workflow

    Click the execute icon on the first step to create the SQL Performance Analyzer task.

    Create SPA Task Icon

    Enter a name for the SPA task, select the SQL tuning set to associate with it, then click the "Create" button.

    Create SPA Task

    When the status of the previous step becomes a green tick, click the execute icon on the second step to capture the SQL tuning set performance information of the "before" state.

    Replay Before Icon

    Enter a "Replay Trial Name" of "before_change", check the "Trial environment established" checkbox, then click the "Submit" button.

    Replay Before

    When the status of the previous step becomes a green tick, click the execute icon on the third step to capture the SQL tuning set performance information of the "after" state.

    Replay After Icon

    Alter the state of the database by creating an index on the OBJECT_ID column of the test table.
    CONN spa_test_user/spa_test_user@prod
    CREATE INDEX my_objects_index_01 ON my_objects(object_id);
    EXEC DBMS_STATS.gather_table_stats(USER, 'MY_OBJECTS', cascade => TRUE);
    Enter a "Replay Trial Name" of "after_change", check the "Trial environment established" checkbox, then click the "Submit" button.

    Replay After

    When the status of the previous step becomes a green tick, click the execute icon on the forth step to run a comparison analysis task.

    Compare Icon

    Accept the default "Trial 1 Name" and "Trial 2 Name" settings by clicking the "Submit" button.

    Compare

    When the status of the previous step becomes a green tick, click the execute icon on the fifth step to view the comparison report.

    Report Icon

    The resulting page contains the comparison report for the SQL Performance Analyzer task.

    Report

    Clicking on a specific SQL ID displays the statement specific results, along with the before and after execution plans.

    SQL Report

    Optimizer Upgrade Simulation

    The SQL Performance Analyzer allows you to test the affects of optimizer version changes on SQL tuning sets. Click the "Optimizer Upgrade Simulation" link on the "SQL Performance Analyzer" page.

    Optimizer Upgrade Simulation Link

    Enter a task name, select the two optimizer versions to compare, then click the "Submit" button.

    Optimizer Upgrade Simulation

    The task is listed in the "SQL Performance Analyzer Tasks" section. Refresh the page intermittently until the task status becomes a green tick, then click on the task name.

    Task List

    The resulting screen shows details of the selected task. Click on the "Comparison Report" classes icon allows you to view the comparison report.

    Task Details

    Parameter Change

    The SQL Performance Analyzer provides a shortcut for setting up tests of initialization parameter changes on SQL tuning sets. Click the "Parameter" link on the "SQL Performance Analyzer" page.

    Parameter Change Link

    Enter a task name and the parameter you wish to test. Enter the base and changed value, then click the "Submit" button.

    Parameter Change

    The task is listed in the "SQL Performance Analyzer Tasks" section. Refresh the page intermittently until the task status becomes a green tick, then click on the task name.

    Task List

    The resulting screen shows details of the selected task. Click on the "Comparison Report" classes icon allows you to view the comparison report.

    Task Details

    Transferring SQL Tuning Sets

    In the examples listed above, the tests have been performed on the same system. In reality you are more likely to want to create a tuning set on your production system, then run the SQL Performance Analyzer against it on a test system. Fortunately, the DBMS_SQLTUNE package allows you to transport SQL tuning sets by storing them in a staging table.

    First, create the staging table using the CREATE_STGTAB_SQLSET procedure.
    CONN sys/password@prod AS SYSDBA
    BEGIN
    DBMS_SQLTUNE.create_stgtab_sqlset(table_name      => 'SQLSET_TAB',
    schema_name     => 'SPA_TEST_USER',
    tablespace_name => 'USERS');
    END;
    /
    Next, use the PACK_STGTAB_SQLSET procedure to export SQL tuning set into the staging table.
    BEGIN
    DBMS_SQLTUNE.pack_stgtab_sqlset(sqlset_name          => 'SPA_TEST_SQLSET',
    sqlset_owner         => 'SYS',
    staging_table_name   => 'SQLSET_TAB',
    staging_schema_owner => 'SPA_TEST_USER');
    END;
    /
    Once the SQL tuning set is packed into the staging table, the table can be transferred to the test system using Datapump, Export/Import or via a database link. Once on the test system, the SQL tuning set can be imported using the UNPACK_STGTAB_SQLSET procedure.
    BEGIN
    DBMS_SQLTUNE.unpack_stgtab_sqlset(sqlset_name          => '%',
    sqlset_owner         => 'SYS',
    replace              => TRUE,
    staging_table_name   => 'SQLSET_TAB',
    staging_schema_owner => 'SPA_TEST_USER');
    END;
    /
    The SQL tuning set can now be used with the SQL Performance Analyzer on the test system.

    For more information see:
    posted on 2009-10-24 13:58 jinfeng_wang 閱讀(1321) 評論(0)  編輯  收藏 所屬分類: ZZoracle
    主站蜘蛛池模板: 日本高清免费观看| 一个人看的免费观看日本视频www| 国产成人久久AV免费| 亚洲综合熟女久久久30p| 99久久精品毛片免费播放| 国产精品亚洲A∨天堂不卡| 国产福利在线观看永久免费| 亚洲一级Av无码毛片久久精品| 一级黄色免费网站| 亚洲人成网站在线观看播放| 十八禁视频在线观看免费无码无遮挡骂过| 亚洲欭美日韩颜射在线二| 在线观看免费无码专区| 亚洲色大成网站www永久| 国产在线观看免费观看不卡| 亚洲免费网站观看视频| 亚洲无码日韩精品第一页| 大地影院MV在线观看视频免费| 亚洲午夜在线电影| 欧洲黑大粗无码免费| 特黄特色大片免费| 久久夜色精品国产亚洲AV动态图| 1000部啪啪毛片免费看| 亚洲国产精品成人综合色在线| 亚洲精品国产自在久久| 无码日韩精品一区二区三区免费 | 精品久久久久久无码免费| 亚洲大尺度无码专区尤物| 精品香蕉在线观看免费| 在线观看亚洲免费视频| 国产精品亚洲A∨天堂不卡| 九九九精品成人免费视频| 一级视频免费观看| 亚洲三级在线播放| 亚洲情侣偷拍精品| 99无码人妻一区二区三区免费| 国产精品观看在线亚洲人成网| 亚洲AV无码精品无码麻豆| 成年女性特黄午夜视频免费看| 国产免费伦精品一区二区三区| 亚洲欧洲日产v特级毛片|