Patent Publication Number: US-8983934-B2

Title: SQL tuning base

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
     This application claims the benefit of U.S. Provisional Application No. 60/500,490, filed Sep. 6, 2003, which is incorporated herein by reference in its entirety. This application is related to co-pending applications “SQL TUNING SETS,” with U.S. application Ser. No. 10/936,449; “AUTO-TUNING SQL STATEMENTS,” with U.S. application Ser. No. 10/935,908; “SQL PROFILE,” with U.S. application Ser. No. 10/936,205; “GLOBAL HINTS,” with U.S. application Ser. No. 10/936,781; “HIGH LOAD SQL DRIVEN STATISTICS COLLECTION,” with U.S. application Ser. No. 10/936,427; “AUTOMATIC LEARNING OPTIMIZER,” with U.S. application Ser. No. 10/935,906; “AUTOMATIC PREVENTION OF RUN-AWAY QUERY EXECUTION,” with U.S. application Ser. No. 10/936,779; “METHOD FOR INDEX TUNING OF A SQL STATEMENT, AND INDEX MERGING FOR A MULTI-STATEMENT SQL WORKLOAD, USING A COST-BASED RELATIONAL QUERY OPTIMIZER,” with U.S. application Ser. No. 10/936,469; “SQL STRUCTURE ANALYZER,” with U.S. application Ser. No. 10/936,426; “AUTOMATIC SQL TUNING ADVISOR,” with U.S. application Ser. No. 10/936,778, all of which are filed Sep. 7, 2004 and are incorporated herein by reference in their entirety. 
    
    
     FIELD OF THE INVENTION 
     This invention is related to the field of electronic database management. 
     BACKGROUND 
     In a database management system, SQL statements are used to manipulate data and to retrieve data that matches certain selection criteria. A SQL statement is compiled in memory before being executed by a database engine. Though the compiled form of the SQL statement may be cached in memory for some amount of time for repeated executions, it is eventually discarded. Therefore SQL statements can be considered transient objects in a database system. 
     In practice, the set of SQL statements used by an application are repeatedly executed, and it is highly likely that the same SQL statements appear (are compiled into memory) with certain frequencies. The knowledge that certain SQL statements (especially those critical to application performance) reappear can be taken advantage of by placing special manual controls affecting the performance of the SQL statements. 
     However, selecting the proper control to insert is difficult or impossible, because execution data for the SQL statement is not collected and is therefore not used as feedback to select a control to influence future executions of a SQL statement. Even if an appropriate control is selected for targeting a SQL statement, the data (or metadata) cannot be associated with the SQL statement, because the SQL statement has no persistent representation. Thus, conventional methods place a control on a SQL statement by either modifying the text of the SQL statement, or by making modifications to the session context in which a SQL statement is executed. Both of these approaches require application changes, which can be difficult and sometimes impossible. Therefore, conventional methods of associating metadata with a SQL statement locate the metadata within the context of the executing SQL statement. If the metadata cannot be located in the execution context of SQL statement, the database system has no other way to deliver the metadata to the database engine when the SQL statement re-appears and is compiled into memory. 
     SUMMARY 
     A computer readable medium storing a database query language statement tuning base in a tuning base memory location is disclosed. The query language statement tuning base includes tuning information for one or more query language statements. The tuning information for each statement includes one or more tuning actions for the query language statement, and a signature to allow an optimizer to identify the one or more tuning actions for the query language statement. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  shows an example of a device that includes a SQL tuning base. 
         FIG. 2  shows an example of a method to perform accessing an object in a SQL tuning base. 
         FIG. 3  shows an example of a method of generating and persistently storing tracing information with the tuning base. 
         FIG. 4  shows an example of a method to use a profile in the tuning base to generate a well-tuned plan. 
         FIG. 5  is a block diagram of a computer system suitable for implementing an embodiment of coverage computation for verification. 
     
    
    
     DETAILED DESCRIPTION 
     Overview 
     The embodiments of the invention are described using the term “SQL”, however, the invention is not limited to just this exact database query language, and indeed may be used in conjunction with other database query languages and constructs. 
     The SQL tuning base (STB) provides a storage facility for a SQL statement and tuning information associated with the statement. The STB provides a mechanism for providing access to tuning information by automatically collecting, analyzing, and delivering the tuning information to an optimizer. This persistence and delivery mechanism can store a variety of tuning features in a location that is external to the SQL statement. The tuning features can persistently target a specific SQL statement, and can be delivered by the STB to the optimizer when the SQL statement is compiled. 
     An example of a device that includes a SQL tuning base is shown in  FIG. 1 . An application program  105  running on a computer processing system issues a SQL statement  110  to query optimizer  120 . The optimizer sends a signature of the statement to lookup device  125  to determine if the tuning base  130  of database  180  has tuning information about the statement. The lookup device retrieves the information from a profile section  140 , an outline section  150 , or a tracing information section,  160 , of tuning base  130 . The optimizer uses the tuning information to generate an execution plan  185 , which, when executed, selects query results  190  from the database  180 , and returns the results to the application. 
     For example, a persistent representation of a SQL statement can be used by a lookup scheme to identify the tuning information for the SQL statement from the STB, and send it to the optimizer at SQL compilation time. The STB therefore allows a tuning control, such as historical feedback control for example, to target a specific SQL statement, while being stored outside of the SQL statement and the application program that stores the SQL statement. This ability to store tuning information independently of the SQL statement and the application program of the statement can be used to automatically manage the database. 
     The STB stores tuning information for SQL statements on a per statement basis. The STB stores multiple types of metadata objects related to tuning actions for individual SQL statements: tracing information, outlines, and profiles. The tracing information provides the ability to trace and debug individual SQL statements. The outline facility offers plan stability and plan editing capabilities. The profile facility provides plan tuning functions. The metadata in the STB can be represented as a set of dictionary tables. For example, the STB can include a SQL table that stores a set of SQL statements that are associated with one or more tuning actions. The STB can also include a profile table that stores SQL profiles, an outline table that stores outlines, and a tracing table that stores tracing information. 
     Access to Tuning Information 
     At SQL compilation time, a signature is generated from the SQL text, and is used as a lookup key for any SQL tuning data associated with this SQL statement. This signature can be extended to include other environmental data values known before SQL compilation, such as “parsing user name” for example. 
     Any STB data retrieved by the optimizer is either directly consumed by the optimizer in creating the execution plan, or is copied to the compiled SQL statement for use while the statement is executed. For example, in one embodiment, SQL profile data is copied into the compiled SQL statements. However, the SQL profiles and outlines can be used without copying their data. (The tracing and debugging data is copied though, since tracing and debugging are acted upon during SQL execution as well as during compilation.) 
     Because the SQL tuning base is expected to be sparsely populated (in other words, most SQL statements are usually not represented in the STB), the lookup mechanism can be designed to take advantage of the negative lookup case. In one embodiment, this is performed by hashing the signature into a bit-vector (cached in memory), where 0 represents the fact that no data exists for the given SQL statements that hash to this value, and 1 means that a lookup to the STB tables is performed to see if any data exists for it. 
       FIG. 2  shows an example of a method to perform accessing an object in a SQL tuning base. The statement is received by a compiler,  210 . The signature of the statement is determined,  220 , and is mapped to a portion of a lookup table,  230 . If the information in the mapped portion of the lookup table indicates that tuning information is available,  240 , then the tuning information for the SQL statement is retrieved from the tuning base,  250 . The tuning information is then used by the compiler to tune the statement. 
     Tracing and Debugging 
     Tracing and debugging information from the tracing table can be used to identify a flaw in a SQL statement. For example, if a database administrator (DBA) determines that a certain statement is a high load statement, the DBA can cause the system to trace the execution of the statement. The tracing output for the statement can be persistently stored and used during a tuning process. The tracing information can be collected for a single SQL statement to be traced by setting a tracing parameter using the STB. Other parameters, such as enabling plan statistics and setting plan events, can also be set using the STB. An advantage of setting these features through the tuning base is being able to perform tracing functions without changing the software for the SQL statement in the application program or enabling tracing for the entire user session. 
     In one implementation, tracing of a SQL statement in the database causes every execution of that statement to be traced until the tracing is disabled for the SQL statement. Similarly, the plan statistics are traced as well. And thus statistics can be collected and used to improve performance of the SQL statement across different sessions and time periods. 
     A method of generating and persistently storing tracing information with the tuning base is shown in  FIG. 3 . A user sets a tracing parameter for the statement in the tuning base,  310 . When the statement is received by a compiler,  320 , the tracing parameter is retrieved from the tuning base,  330 . When the statement is executed,  340 , tracing information is collected and stored to disk,  350 . The tracing information can then be used during a tuning process to tune the SQL statement,  360 . 
     Outline 
     An outline is an abstraction of an execution plan generated by the optimizer. The stored outline, when used by an optimizer, causes the optimizer to use a specific plan, and, when stored in the tuning base, provides a persistent representation of the specific plan for the SQL statement. The outline can also be used to revert to a saved execution plan when a new plan generated by the optimizer is sub-optimal. Thus, an outline provides stability for an execution plan. 
     Profile 
     A SQL profile is a mechanism that is used to influence which plan is generated by the optimizer. The profile contains tuning information related to the statement, which is stored as a persistent database object, in a dictionary table, of the tuning base. A profile can have a name, and can be identified by its name, or by the signature of the corresponding SQL statement. The profile can be manually created by a database administrator (DBA), or automatically created by an auto-tune process. The profile can also be altered, cloned, deleted, and updated. 
     When the corresponding SQL statement is compiled (i.e., optimized), the query optimizer retrieves the SQL Profile from the tuning base. The tuning information from the SQL Profile is used by the optimizer, in conjunction with existing statistics, to produce a well-tuned plan for the corresponding SQL statement. The tuning information stored in the profile table can include a set of optimizer hints that target a particular SQL statement. Each hint can specify tuning actions such as setting parameters of the optimizer, adding or correcting statistics and estimates for the SQL statement, and modifying the execution behavior of the statement. 
     Statistics adjustment hints (e.g. TABLE_STATS( ), COLUMN_STATS( ), INDEX_STATS( ) hints) are used to adjust statistics of base objects accessed by the statement being compiled. For example, a NDV adjustment hint is used to correct the distinct cardinality, or the number of distinct values, estimate of a join key. A selectivity adjustment hint is used to correct the index selectivity of an index access path. A statistic adjustment hint contains adjustments to a stale statistic. A cardinality adjustment hint is used to correct the cardinality estimate of a result. An auto tuning hint can also specify correct optimization mode to use, such as FIRST_ROWS or ALL_ROWS. 
     The use of profile remains completely transparent to the end-user. For example, when a SQL statement is compiled, the optimizer searches the tuning base to determine if a SQL profile exists for that statement. If a profile exists, it is loaded into the optimizer, and information in the profile is used when building the execution plan for the statement. Because the profile is stored in the tuning base instead of being directly embedded in the text of the statement, the tuning base allows the hints in the profile to be fully separated from the statement. 
     An advantage of independently creating, storing, and accessing the profile with the SQL tuning base is that the SQL text is separated from the set of tuning hints and actions. Hence, the execution plan of a SQL statement can be tuned by the optimizer without changing the application source code of the statement. Therefore, with the tuning information stored in the tuning base, execution plans for SQL statements that are issued by packaged applications are tuned by gathering and storing related information for the SQL statement within the SQL tuning base of the database system itself. 
       FIG. 4  shows an example of a method to use a profile in the tuning base to generate a well-tuned plan. The statement is received by a compiler,  410 . The profile for the statement is retrieved from the tuning base,  420 . Statistic hints in the profile are used to adjust statistics related to the statement,  430 . Estimate hints in the profile are used to adjust table estimates,  440 . Optimizer settings are determined from tuning information in the profile,  450 . Execution parameters for the statement are set based on the information in the profile,  460 . A well-tuned execution plan for the statement is determined based on the hints,  470 . 
     Automatic Creation of Tuning Information 
     The tuning information for a SQL statement can be automatically generated by the database system. For example, an auto tuning optimizer, when tuning a statement, can detect errors present in estimates related to the statement. After an error is detected, it can be removed or reduced by applying a hint, such as an adjustment factor, to it. By reducing or eliminating these errors, the optimizer can select a better execution plan. Hints can also be generated to adjust stale statistics or to supply missing statistics for tables and indexes. Further, hints can be generated to store and supply relevant information about the past execution history of the SQL statement. The execution history can then be sent from the STB to the optimizer, to set an appropriate optimization mode. 
     The auto-tuning hints for the SQL statement are grouped together in a SQL profile which is associated with the SQL statement and is stored persistently in the SQL tuning base. When the SQL statement is compiled by the optimizer under normal mode, the auto tuning hints from the corresponding SQL profile are retrieved from the SQL tuning base to help the optimizer produce a well-tuned plan. Hence, the tuning process can be performed only once, and the resulting hints can be reused many times. 
       FIG. 5  is a block diagram of a computer system  500  suitable for implementing an embodiment of verification based on coverage computation. Computer system  500  includes a bus  502  or other communication mechanism for communicating information, which interconnects subsystems and devices, such as processor  504 , system memory  506  (e.g., RAM), static storage device  508  (e.g., ROM), disk drive  510  (e.g., magnetic or optical), communication interface  512  (e.g., modem or ethernet card), display  514  (e.g., CRT or LCD), input device  516  (e.g., keyboard), and cursor control  518  (e.g., mouse or trackball). 
     According to one embodiment of the invention, computer system  500  performs specific operations by processor  504  executing one or more sequences of one or more instructions contained in system memory  506 . Such instructions may be read into system memory  506  from another computer readable medium, such as static storage device  508  or disk drive  510 . In alternative embodiments, hard-wired circuitry may be used in place of or in combination with software instructions to implement the invention. 
     The term “computer readable medium” as used herein refers to any medium that participates in providing instructions to processor  504  for execution. Such a medium may take many forms, including but not limited to, non-volatile media and volatile media. Non-volatile media includes, for example, optical or magnetic disks, such as disk drive  510 . Volatile media includes dynamic memory, such as system memory  506 . 
     Common forms of computer readable media includes, for example, floppy disk, flexible disk, hard disk, magnetic tape, any other magnetic medium, CD-ROM, any other optical medium, punch cards, paper tape, any other physical medium with patterns of holes, RAM, PROM, EPROM, FLASH-EPROM, any other memory chip or cartridge, or any other medium from which a computer can read. 
     In an embodiment of the invention, execution of the sequences of instructions to practice the invention is performed by a single computer system  500 . According to other embodiments of the invention, two or more computer systems  500  coupled by communication link  520  (e.g., LAN, PTSN, or wireless network) may perform the sequence of instructions to practice the invention in coordination with one another. Computer system  500  may transmit and receive messages, data, and instructions, including program, i.e., application code, through communication link  520  and communication interface  512 . Received program code may be executed by processor  504  as it is received, and/or stored in disk drive  510 , or other non-volatile storage for later execution. 
     In the foregoing specification, the invention has been described with reference to specific embodiments thereof. It will, however, be evident that various modifications and changes may be made thereto without departing from the broader spirit and scope of the invention. The specification and drawings are, accordingly, to be regarded in an illustrative rather than restrictive sense.