Database Journal
MS SQL Oracle DB2 Access MySQL PostgreSQL Sybase PHP SQL Etc SQL Scripts & Samples Tips Database Forum Rss Feed

» Database Journal Home
» Database Articles
» Database Tutorials
MS Access
SQL Scripts & Samples
» Database Forum
» Slideshows
Free Newsletters:

News Via RSS Feed

Rss Feed

Database Journal |DBA Support |SQLCourse |SQLCourse2

Featured Database Articles


Posted Nov 29, 2007

Oracle Database 11g: SQL Performance Analyzer, Part 2

By Jim Czuprynski

Synopsis. Oracle Database 11g Release 1 (11gR1) features the new SQL Performance Analyzer that promises to ease significantly the workload of busy Oracle DBAs because it provides a way to accurately evaluate complete database workloads for “before versus after” performance changes. This article – the next in a series on new Oracle Database 11g SQL performance improvement features – discusses how to use the SQL Performance Analyzer to evaluate a SQL workload generated from an Oracle 10gR2 database to detect potential performance issues for that workload if it were executed within an Oracle 11g database system.

The previous article in this series illustrated the basics of using Oracle Database 11g’s new SQL Performance Analyzer (SPA) tool to:

  • Capture a SQL workload
  • Record that workload’s performance against the current database configuration before changes have been made to that configuration
  • Record that same workload’s performance after the database configuration changes have been implemented
  • Compare the performance of that workload before and after the changes were made

In this article, I’ll demonstrate how the SQL Performance Analyzer can analyze more complex Oracle environment changes – specifically, the upgrade of the cost-based optimizer (CBO) between Oracle database releases -- and I’ll show how to transfer a SQL workload generated from an Oracle 10gR2 database to an Oracle 11gR1 database. In addition, since I concentrated on the PL/SQL interface to measure SQL workload performance in the last article, I’ll focus on using Oracle 11g’s Enterprise Manager (EM) Database Control interface for the SQL Performance Analyzer to demonstrate how easy it is to analyze a SQL workload with a few mouse clicks.

SQL Performance Analysis Scenario: Simulating an Optimizer Upgrade

1.) Prepare for Simulation. I’ve built an Oracle 10gR2 database named DB10G using the standard “seed” database within an Oracle 10gR2 home. To carry forward the identical example from the previous article, I then constructed the, SH.SALES_AGENTS table on that database, loaded it with the same sample set of approximately 420,000 rows, and then constructed the same five indexes against that table. I used the identical DDL that I presented in Listing 1.1 for the previous article to accomplish this, and I utilized the identical DML statements (LoadSalesAgents.sql) to perform an initial load of this table.

2.) Prepare for SQL Workload Gathering. Next, I’ll create a SQL Workload on the DB10G database. I’ll use the same SQL statements that access the SH.SALES_AGENTS table that I used in the previous article, along with a few additional SQL statements that’ll access some of the other demo schema tables. The statements that comprise this SQL workload are shown in GenerateSQLWorkload.sql. Note that the last four SQL statements – the ones tagged as LDGN 4.1 through LDGN 4.4 - make use of older optimizer hints that are still available in Oracle 9i but no longer fully supported in Oracle 10g. I’ll use these statements to demonstrate how the SQL Performance Analyzer can simulate performance using cost-based optimizer settings from other older Oracle database environments. The code shown in Listing 2.1 captures these SQL statements into a SQL Tuning Set named STS_SPA_200.

3.) Stage and Export SQL Tuning Set. Now that I’ve executed the SQL workload and have gathered the resulting statistics into the STS_SPA_200 SQL Tuning Set, I’ll transfer that workload and its corresponding execution statistics to my Oracle 11gR1 database. I’ll do this by creating staging tables to hold that information, transferring the SQL workload and its performance information into that table, and then transporting those data to the targeted Oracle 11g database. Listing 2.2 shows how I captured (or “packed”) the SQL Tuning Set into staging tables with the DBMS_SQLTUNE.PACK_STGTAB_SQLSET procedure. I then used Oracle DataPump to export those staging tables into a DataPump Export dumpset named DumpStagingTable.dmp.

4.) Import, unpack, and prepare SQL Tuning Set for test execution. After copying the DataPump dump set into the default DataPump directory for my Oracle 11g database, I’ll need to transfer the information contained within the staging tables for the SQL Tuning Set into my Oracle 11g target database for analysis. Listing 2.3 illustrates how I imported the staging tables from Oracle 10gR2 into the target Oracle 11gR1 database using Oracle DataPump Import and an appropriate parameter file. I then used the DBMS_SQLTUNE.UNPACK_STGTAB_SQLSET procedure to “unpack” the SQL Workload stored in those staging tables into my target Oracle 11gR1 database.

5.) Simulate an Optimizer Upgrade From to Now that my preparations are completed, I’m ready to turn the SQL Performance Analyzer loose to let it find any noticeable performance impacts on the SQL statements in the imported SQL Workload if it were executed against the target Oracle 11gR1 database. I’ll use the Oracle Database 11g’s Enterprise Manager Database Control interface to perform this analysis. Figure 2.1 shows the initial state of the SQL Performance Analyzer panel.

Figure 2.1. SQL Performance Analyzer Home Panel

When I select the Optimizer Upgrade Simulation link from this panel, Enterprise Manager presents the Optimizer Upgrade Simulation panel. As shown in Figure 2.2, I’ve specified a task name of SPA_OUS_100, SYS.STS_SPA_200 as the SQL Tuning Set, and a brief description of the task. Note that for this task, I’ve specified the “before” and “after” optimizer versions as and, respectively.

Figure 2.2. Creating an Optimizer Upgrade Simulation Task

Once I’ve clicked on Submit, control returns to the SQL Performance Analyzer home panel, and the job that I’ve submitted eventually shows it has completed (see Figure 2.3 below).

Figure 2.3. Successful execution of SQL Performance Analyzer task SPA_OUS_100

To view the completed task, I simply click on the Task Name link, and then Enterprise Manager presents a summary of the successful task execution as shown below in Figure 2.4:

Figure 2.4. SQL Performance Analyzer Task SPA_OUS_100 Execution Details

To see the details of the initial run of this task, I’ll click on the corresponding “eyeglasses” icon under the Comparison Report column near the bottom of this panel, and this displays the results shown in Figure 2.5.1:

Figure 2.5.1. Results of Elapsed Time Comparison

At last, some interesting results – and mostly good news! The SQL Performance Analyzer shows that it believes there will be at least some improvement in execution time – or at least, no degradation in execution time - for all 12 SQL statements if they were executed in an Oracle 11gR1 database environment. However, I’m not satisfied with merely comparing execution times; I also want to know more about the change to any of the execution plans. Therefore, I reran the same detailed analysis, but this time I compared the estimated changes in optimizer costs as well. Figure 2.5.2 and Figure 2.5.3 speak for themselves: Though there are some pretty apparent improvements in execution time, only one statement had any significant improvements in optimizer cost,

Figure 2.5.2. Elapsed Time Comparison Details Within SQL Statement

Figure 2.5.3. Optimizer Cost Comparison Details Within SQL Statement

6.) Simulate an Optimizer Upgrade From 9.2.0 to 11.0.1. Out of curiosity, I’ve also experimented with using the same SQL Tuning Set (STS_SPA_200) to simulate an upgrade from the Oracle 9i optimizer to the Oracle 11g optimizer. To accomplish this, I’ve set up another SQL Performance Analyzer Task named SPA_OUS_200. This task is identical to SPA_OUS_100, except that I’ve selected a “before” optimizer setting of 9.2.0 instead of A summary of the execution of this new simulated optimizer upgrade task is shown in Figure 2.6, while Figure 2.7 shows the results page for that same task:

Figure 2.6. SQL Performance Analyzer Task SPA_OUS_200 Execution

Figure 2.7. SQL Performance Analyzer Task SPA_OUS_100 Results

Figures 2.8.1, 2.8.2, and 2.8.3 show the results for just one of the SQL statements for which the optimizer upgrade simulation was performed. Note that while the actual number of buffer gets and the number of rows processed for this statement haven’t changed in the least, Oracle 11g’s SQL Performance Analyzer is apparently smart enough to project that the 9.2.0 optimizer cost (1001) would have been slightly higher (995) if the statement were executed under the 11.1.0 optimizer. Also, note that the EXPLAIN PLAN for the two simulated executions were slightly different for the identical SQL statement.

Figure 2.8.1. SQL Performance Analyzer Task SPA_OUS_200 Result (Statement 5pkmwau93fg58)

Figure 2.8.2. “Before” EXPLAIN PLAN Results for Statement 5pkmwau93fg58

Figure 2.8.3. “After” EXPLAIN PLAN Results for Statement 5pkmwau93fg58

Next Steps

The third and final article in this series on Oracle 11g’s new SQL Performance Analyzer tool set will discuss how to use this tool to conquer one of the more frustrating SQL performance tuning challenges: the impact of modified database initialization parameters upon SQL statement performance. I’ll also delve more deeply into some of the SQL Performance Analyzer’s reporting and analyses options to get a complete picture of what is causing a SQL statement to regress, and how this new tool facilitates creation of SQL Plan Baselines for SQL Plan Management.

References and Additional Reading

While I’m hopeful that I’ve given you a thorough grounding in the technical aspects of the features I’ve discussed in this article, I’m also sure that there may be better documentation available since it’s been published. I therefore strongly suggest that you take a close look at the corresponding Oracle documentation on these features to obtain crystal-clear understanding before attempting to implement them in a production environment. Please note that I’ve drawn upon the following Oracle Database 11gR1 documentation for the deeper technical details of this article:

B28274-01 Oracle Database 11gR1 Performance Tuning Guide

B28279-02 Oracle Database 11gR1 New Features Guide

B28419-02 Oracle Database 11gR1 PL/SQL Packages and Types Reference

» See All Articles by Columnist Jim Czuprynski

Oracle Archives

Latest Forum Threads
Oracle Forum
Topic By Replies Updated
Oracle Data Mining: Classification jan.hasller 0 July 5th, 07:19 AM
Find duplicates - Unique IDs Lava 5 July 2nd, 08:30 AM
no matching unique or primary key rcanter 1 April 25th, 12:32 PM
Update values of one table based on condition of values in other table using Trigger Gladiator 3 February 29th, 06:01 PM