SlideShare ist ein Scribd-Unternehmen logo
1 von 69
Downloaden Sie, um offline zu lesen
IBM System z Technology Summit




DB2 10 for z/OS Query Technology features
Andrei Lurie
alurie@us.ibm.com




                                            © 2011 IBM Corporation
Disclaimer

          © Copyright IBM Corporation 2011. All rights reserved.
          U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule
          Contract with IBM Corp.

          THE INFORMATION CONTAINED IN THIS PRESENTATION IS PROVIDED FOR INFORMATIONAL PURPOSES
          ONLY.  WHILE EFFORTS WERE MADE TO VERIFY THE COMPLETENESS AND ACCURACY OF THE
          INFORMATION CONTAINED IN THIS PRESENTATION, IT IS PROVIDED “AS IS” WITHOUT WARRANTY OF
          ANY KIND, EXPRESS OR IMPLIED. IN ADDITION, THIS INFORMATION IS BASED ON IBM’S CURRENT
          PRODUCT PLANS AND STRATEGY, WHICH ARE SUBJECT TO CHANGE BY IBM WITHOUT NOTICE.  IBM
          SHALL NOT BE RESPONSIBLE FOR ANY DAMAGES ARISING OUT OF THE USE OF, OR OTHERWISE
          RELATED TO, THIS PRESENTATION OR ANY OTHER DOCUMENTATION. NOTHING CONTAINED IN THIS
          PRESENTATION IS INTENDED TO, NOR SHALL HAVE THE EFFECT OF, CREATING ANY WARRANTIES OR
          REPRESENTATIONS FROM IBM (OR ITS SUPPLIERS OR LICENSORS), OR ALTERING THE TERMS AND
          CONDITIONS OF ANY AGREEMENT OR LICENSE GOVERNING THE USE OF IBM PRODUCTS AND/OR
          SOFTWARE.

    IBM, the IBM logo, ibm.com, DB2 and z/OS are trademarks or registered trademarks of International Business Machines
    Corporation in the United States, other countries, or both. If these and other IBM trademarked terms are marked on their
    first occurrence in this information with a trademark symbol (® or ™), these symbols indicate U.S. registered or common
    law trademarks owned by IBM at the time this information was published. Such trademarks may also be registered or
    common law trademarks in other countries. A current list of IBM trademarks is available on the Web at “Copyright and
    trademark information” at www.ibm.com/legal/copytrade.shtml

    Other company, product, or service names may be trademarks or service marks of others.




2                                                                                                            © 2011 IBM Corporation
Agenda
     DB2 10 Optimizer
      – Plan management
      – Hints/Bind options
      – Explain
      – Dynamic Statement Caching
      – Optimizer costing
      – Runtime query performance
     DB2 10 SQL/Application Enablement
      – SQL table functions and non-inline SQL scalar functions
      – Implicit casting
      – Datetime constants and TIMESTAMP WITH TIMEZONE
      – Extended indicator variables
3                                                            © 2011 IBM Corporation
Plan Management Notes (DB2 9)
     REBIND PACKAGE options:                       FREE PACKAGE …
       – PLANMGMT (BASIC)                             – PLANMGMTSCOPE(ALL) – Free package
        2 copies: Current and Previous                  completely
       – PLANMGMT (EXTENDED)                          – PLANMGMTSCOPE(INACTIVE) – Free old
        3 copies: Current, Previous, Original           copies


     REBIND PACKAGE options:                       Catalog support
       – SWITCH(PREVIOUS)                             – SYSPACKAGE reflects active copy only
        Switch between current & previous             – SYSPACKDEP reflects dependencies of all
       – SWITCH(ORIGINAL)                               copies
        Switch between current & original             – Other catalogs (SYSPKSYSTEM, …) reflect
                                                        metadata for all copies
     Most bind options can be changed at REBIND
       – But a few must be the same …
                                                    Invalidation and Auto Bind
                                                      – Each copy invalidated separately




4                                                                                  © 2011 IBM Corporation
DB2 10 Updates to Plan Management
     SYSIBM.SYSPACKCOPY
         – New catalog table
         – Hold SYSPACKAGE-style metadata for any previous or original package
           copies
         – No longer need to SWITCH to see information on inactive copies


     APRETAINDUP option of REBIND
         – Default YES
            • Retain duplicate for BASIC or EXTENDED
         – Optional NO
            • Do not retain duplicate access path as PREVIOUS or ORIGINAL
               – PREVIOUS/ORIGINAL must be from DB2 9 or later

    
        Native SQL Stored Procedure packages are supported
5                                                                           © 2011 IBM Corporation
Retrieving Access Path with EXPLAIN(NO)
     EXPLAIN PACKAGE
       – Extract existing PLAN_TABLE information for packages
          • NOT a new explain
          • The package/copy must be created on DB2 9 or later
       – Useful if you didn’t BIND with EXPLAIN(YES)
          • Or PLAN_TABLE entries are lost
     >>-EXPLAIN----PACKAGE----------->

     >>-----COLLECTION--collection-name--PACKAGE--package-name--------->

     >----+--------------------------+----+-------------------+-------->
          |                          |    |                   |
          +---VERSION-version-name---+    +---COPY--copy-id---+




          • COPY-ID can be ‘CURRENT’, ‘PREVIOUS’, ‘ORIGINAL’

6                                                                      © 2011 IBM Corporation
What-if? BIND

 BIND package to see what's new
 Bind package EXPLAIN(ONLY) and/or SQLERROR(CHECK)
    – Existing package copies are not overwritten
      • Performs explain or syntax/semantic error checks on SQL


    – Requires BIND, BINDAGENT, or EXPLAIN privilege.


    – Supported for BIND only
      • Not REBIND
      • Targeted to application changes
         – E.g. Development environment is DB2 LUW, production DB2 for z/OS



7                                                                        © 2011 IBM Corporation
Access Path Stability with statement level hints
     Current limitations in hint matching
       – QUERYNO is used to link queries to their hints – a bit fragile
       – For dynamic SQL, require a change to apps – can be impractical
     New mechanisms:
       – Associate query text with its corresponding hint … more robust
       – Hints enforced for the entire DB2 subsystem
           • irrespective of static vs. dynamic, etc.
       – Hints integrated into the access path repository


     PLAN_TABLE isn’t going away
     Only the “hint lookup” mechanism is being improved.

8                                                                  © 2011 IBM Corporation
Statement level hints (cont.)


     Steps to use new hints mechanism
       – Populate a user table DSN_USERQUERY_TABLE with query text
         and QUERYNO
       – Populate PLAN_TABLE with the corresponding hints
       – Run new command BIND QUERY
          • To integrate the hint into the repository.
       – FREE QUERY command can be used to remove the hint.




9                                                           © 2011 IBM Corporation
Statement-level BIND options


      Statement-level granularity may be required rather than:
       – Subsystem level ZPARMs (STARJOIN, SJTABLES, MAX_PAR_DEGREE)
       – Package level BIND options (REOPT, DEF_CURR_DEGREE)
      For example
       – Only one statement in the package needs REOPT(ALWAYS)


      New mechanism for statement-level bind options:
       – Similar to mechanism used for hints
       – DSN_USERQUERY_TABLE can also hold per-statement options



10                                                                © 2011 IBM Corporation
Literal Replacement
      Dynamic SQL with literals can now be re-used in the cache
        – Literals replaced with &
           • Similar to parameter markers but not the same
      To enable:
        – Put CONCENTRATE STATEMENTS WITH LITERALS in the PREPARE
          ATTRIBUTES clause
        – Or set LITERALREPLACEMENT in the ODBC initialization file
        – Or set the keyword enableLiteralReplacement=’YES’ in the JCC Driver
      Lookup Sequence
        – Original SQL with literals is looked up in the cache
        – If not found, literals are replaced and new SQL is looked up in the cache
           • Additional match on literal usability
           • Can only match with SQL stored with same attribute, not parameter marker
        – If not found, new SQL is prepared and stored in the cache

11                                                                              © 2011 IBM Corporation
Literal Replacement …
      Example:
                                     Statement Cache (DSC)
                                     SELECT NAME FROM CUSTOMER
                                     WHERE ...
     SELECT BALANCE
     FROM CUSTOMER
     WHERE ACCOUNT_NUMBER = 123456


     SQL statement comes in ...




12                                                       © 2011 IBM Corporation
Literal Replacement …
      Example:
                                                   Statement Cache (DSC)
                                                   SELECT NAME FROM CUSTOMER
                                                   WHERE ...
     SELECT BALANCE
     FROM CUSTOMER
                                     find match?
     WHERE ACCOUNT_NUMBER = 123456




     First lookup




13                                                                     © 2011 IBM Corporation
Literal Replacement …
      Example:
                                          Statement Cache (DSC)
                                          SELECT NAME FROM CUSTOMER
                                          WHERE ...
     SELECT BALANCE
     FROM CUSTOMER
     WHERE ACCOUNT_NUMBER = 123456
                                     NO




14                                                            © 2011 IBM Corporation
Literal Replacement …
      Example:
                                                            Statement Cache (DSC)
                                                            SELECT NAME FROM CUSTOMER
                                                            WHERE ...
     SELECT BALANCE
     FROM CUSTOMER
                                              find match?
     WHERE ACCOUNT_NUMBER = &


     - Replace literal with & and look up DSC again




15                                                                              © 2011 IBM Corporation
Literal Replacement …
      Example:
                                     Statement Cache (DSC)
                                     SELECT NAME FROM CUSTOMER
                                     WHERE ...
     SELECT BALANCE
     FROM CUSTOMER
     WHERE ACCOUNT_NUMBER = &
                                NO




16                                                       © 2011 IBM Corporation
Literal Replacement …
      Example:
                                                            Statement Cache (DSC)
                                                            SELECT NAME FROM CUSTOMER
                                                            WHERE ...
     SELECT BALANCE
     FROM CUSTOMER                                          SELECT BALANCE
                                                            FROM CUSTOMER
     WHERE ACCOUNT_NUMBER = &                               WHERE ACCOUNT_NUMBER = &




     - PREPARE and save into DSC
     (note that PREPARE is done on & “version”, not on original statement with literal)




17                                                                              © 2011 IBM Corporation
Literal Replacement …
      Example:
                                     Statement Cache (DSC)
                                     SELECT NAME FROM CUSTOMER
                                     WHERE ...
     SELECT BALANCE
     FROM CUSTOMER                   SELECT BALANCE
                                     FROM CUSTOMER
     WHERE ACCOUNT_NUMBER = 678900   WHERE ACCOUNT_NUMBER = &




     - new statement (new literal)




18                                                       © 2011 IBM Corporation
Literal Replacement …
      Example:
                                                   Statement Cache (DSC)
                                                   SELECT NAME FROM CUSTOMER
                                                   WHERE ...
     SELECT BALANCE
     FROM CUSTOMER                                 SELECT BALANCE
                                     find match?   FROM CUSTOMER
     WHERE ACCOUNT_NUMBER = 678900                 WHERE ACCOUNT_NUMBER = &




19                                                                     © 2011 IBM Corporation
Literal Replacement …
      Example:
                                          Statement Cache (DSC)
                                          SELECT NAME FROM CUSTOMER
                                          WHERE ...
     SELECT BALANCE
     FROM CUSTOMER                        SELECT BALANCE
                                          FROM CUSTOMER
     WHERE ACCOUNT_NUMBER = 678900        WHERE ACCOUNT_NUMBER = &
                                     NO




20                                                            © 2011 IBM Corporation
Literal Replacement …
      Example:
                                                            Statement Cache (DSC)
                                                            SELECT NAME FROM CUSTOMER
                                                            WHERE ...
     SELECT BALANCE
     FROM CUSTOMER                                          SELECT BALANCE
                                              find match?   FROM CUSTOMER
     WHERE ACCOUNT_NUMBER = &                               WHERE ACCOUNT_NUMBER = &




     - Replace literal with & and look up DSC again




21                                                                              © 2011 IBM Corporation
Literal Replacement …
      Example:
                                       Statement Cache (DSC)
                                       SELECT NAME FROM CUSTOMER
                                       WHERE ...
     SELECT BALANCE
     FROM CUSTOMER                     SELECT BALANCE
                                       FROM CUSTOMER
     WHERE ACCOUNT_NUMBER = &          WHERE ACCOUNT_NUMBER = &




     - Match found :) avoids PREPARE




22                                                         © 2011 IBM Corporation
Literal Replacement …


      Performance Expectation
       – Using parameter marker still provides best performance
       – Biggest performance gain for repeated SQL with different literals
       – NOTE: Access path is not optimized for literals
          • True for parameter markers/host variables today
          • Need to use REOPT for that purpose




23                                                                 © 2011 IBM Corporation
Histogram Statistics (DB2 9)
      RUNSTATS will produce equal-depth histogram
      – Each quantile (range) will have approx same number of rows
        •       Not same number of values
      – Another term is range frequency

      Example
        •       1, 3, 3, 4, 4, 6, 7, 8, 9, 10, 12, 15 (sequenced)
      – Lets cut that into 3 quantiles.
        •       1, 3, 3, 4 ,4         6,7,8,9        10,12,15
       Seq No             Low Value        High Value           Cardinality   Frequency
            1                   1               4                   3           5/12
            2                   6               9                   4           4/12
            3                   10              15                  3           3/12
24                                                                              © 2011 IBM Corporation
Histogram Statistics Notes
      RUNSTATS
      – Maximum 100 quantiles for a column
      – Same value columns WILL be in the same quantile
      – Quantiles will be similar size but:
        •   Will try to avoid big gaps inside quantiles
        •   Highvalue and lowvalue may have separate quantiles
        •   Null WILL have a separate quantile


      Supports column groups as well as single columns


      Think “frequencies” for high cardinality columns


25                                                               © 2011 IBM Corporation
Histogram Statistics Example

  Customer uses INTEGER (or VARCHAR) for YEAR-MONTH

                    WHERE YEARMONTH BETWEEN 200601 AND 200612

       •       Assuming data for 2006 & 2007
           –       FF = (high-value – low-value) / (high2key – low2key)
           –       FF = (200612 – 200601) / (200711 – 200602)

           –       10% of rows estimated to return
                                                                     Data Distribution - Even Distribution



                                                   450000
                                                   400000

                                                   350000

     Data assumed as evenly                        300000


     distributed between low
                                                   250000
                                                                                                                      Year/Month
                                                   200000

     and high range                                150000
                                                   100000

                                                   50000

                                                       0
                                                            200601                                           200712



26                                                                                                           © 2011 IBM Corporation
Histogram Statistics Example
 • Example (cont.)
     – Data only exists in ranges 200601-12 & 200701-12
      •       Collect via histograms
          –       45% of rows estimated to return

                                                          Data Distribution - Histograms

                          1400000

                          1200000

                          1000000

                           800000
                                                                                                      Year/Month
                           600000

                           400000

                           200000

                               0
                                    2006 01-12   200613   ----->    ----->    200700   2007 01-12




                       No data between                                            WHERE YEARMONTH BETWEEN 200601 AND 200612

                       200613 & 200700


27                                                                                                            © 2011 IBM Corporation
Autonomic Statistics Solution Overview

 Autonomic Statistics is implemented through a set of Stored Procedures
     – Stored procedures are provided to enable administration tools and
       packaged applications to automate statistics collection.
         • ADMIN_UTL_MONITOR
         • ADMIN_UTL_EXECUTE
         • ADMIN_UTL_MODIFY


     – Working together, these SP’s
         •   Determine what stats to collect
         •   Determine when stats need to be collected
         •   Schedule and Perform the stats collection
         •   Records activity for later review


     – See Chapter 11 "Designing DB2 statistics for performance" in the DB2 10 for z/OS Performance
       Monitoring and Tuning Guide for details on how to configure autonomic monitoring directly within DB2.

28                                                                                          © 2011 IBM Corporation
RUNSTATS Simplification/Performance Overview


      RUNSTATS options to SET/UPDATE/USE a stats profile
       – Predefine set of options (one per table)
          • RUNSTATS … TABLE tbl COLUMN(C1) … SET PROFILE
            – Alternatively use SET PROFILE FROM EXISTING STATS
          • RUNSTATS … TABLE tbl COLUMN(C5)… UPDATE PROFILE
          • RUNSTATS … TABLE tbl USE PROFILE


      New option for page-level sampling
       – But what percentage of sampling to use?
          • RUNSTATS … TABLE tbl TABLESAMPLE SYSTEM AUTO



29                                                                © 2011 IBM Corporation
DB2 10 - Minimizing Optimizer Challenges

  Potential causes of sub-optimal plans
     – Insufficient statistics
     – Unknown literal values used for host variables or parameter markers


  DB2 10 Optimizer will evaluate the risk for each predicate
     – For example: WHERE BIRTHDATE < ?
        • Could qualify 0-100% of data depending on literal value used
     – As part of access path selection
        • Compare access paths with close cost and choose lowest risk plan




30                                                                       © 2011 IBM Corporation
Improvements to predicate application
      Major enhancements to OR and IN predicates
        – Improved performance for AND/OR combinations and long IN-lists
           • General performance improvement to stage 1 predicate processing
        – IN-list matching
           • Matching on multiple IN-lists
           • Transitive closure support for IN-list predicates
           • List prefetch support
        – SQL pagination
           • Single index matching for complex OR conditions


      Many stage 2 expressions to be executed at stage 1
        – Stage 2 expressions eligible for index screening
           • Not applicable for list prefetch
           • e.g. WHERE SUBSTR(SSN,8,4) = :hv, WHERE C1*2 > :hv ...
        – Externalized in DSN_FILTER_TABLE column PUSHDOWN
31                                                                             © 2011 IBM Corporation
IN-list Table - Table Type 'I' and Access Type 'IN'
      The IN-list predicate will be represented as an in-memory table if:
        – List prefetch is chosen, OR
        – More than one IN-list is chosen as matching.


        – The EXPLAIN output associated with the in-memory table will have:
           • New Table Type: TBTYPE – ‘I’
           • New Access Type: ACTYPE – ‘IN’

      SELECT *
        FROM T1
        WHERE T1.C1 IN (?, ?, ?);

 QBNO PLANNO METHOD TNAME               ACTYPE MC ACNAME       QBTYPE   TBTYPE PREFETCH

 1         1        0     DSNIN001(01) IN       0            SELECT I
 1         2        1     T1           I        1   T1_IX_C1 SELECT T          L


32                                                                           © 2011 IBM Corporation
IN-list Predicate Transitive Closure (PTC)
                                                          The idea:
                SELECT *
                                                          If A = B and B = C
                FROM T1, T2
                WHERE T1.C1 = T2.C1                       then A = C
                  AND T1.C1 IN (?, ?, ?)

                  AND T2.C1 IN (?, ?, ?)     Optimizer can generate
                               this predicate via PTC

      Without IN-list PTC (DB2 9)
       – Optimizer will be unlikely to consider T2 as the first table accessed


      With IN-list PTC (DB2 10)
       – Optimizer can choose to access T2 or T1 first.



33                                                                    © 2011 IBM Corporation
SQL Pagination (range list index scan)
      Targets 2 types of queries
       – Cursor scrolling (pagination) SQL
          • Retrieve next n rows
             – Common in COBOL/CICS and any screen scrolling application
          • Not to be confused with “scrollable cursors”
       – Complex OR predicates against the same columns
          • Common in SAP


      In both cases:
       – The OR (disjunct) predicate refers to a single table only.
       – Each OR predicate can be mapped to the same index.
       – Each disjunct has at least one matching predicate.

34                                                                         © 2011 IBM Corporation
Simple scrolling – Index matching and ORDER BY
     • Scroll forward to obtain the next 20 rows
        – Assumes index is available on (LASTNAME, FIRSTNAME)
        – WHERE clause may appear as:

         WHERE (LASTNAME='JONES' AND FIRSTNAME>'WENDY')
             OR (LASTNAME>'JONES')
         ORDER BY LASTNAME, FIRSTNAME;

        – DB2 10 supports
           • Single matching index access with sort avoided
        – DB2 9 requires
           • Multi-index access, list prefetch and sort
           • OR, extra predicate (AND LASTNAME >= ‘JONES’) for matching
             single index access and sort avoidance

35                                                                © 2011 IBM Corporation
Complex OR predicates against same index

     • Given WHERE clause
        – And index on one or both columns

      WHERE (LASTNAME='JONES' AND FIRSTNAME='WENDY')
          OR (LASTNAME='SMITH' AND FIRSTNAME='JOHN');

     • DB2 9 requires
        – Multi-index access with list prefetch


     • DB2 10 supports
        – Matching single index access – no list prefetch
        – Or, Multi-index access with list prefetch

36                                                          © 2011 IBM Corporation
Minimizing impact of RID failure

      RID overflow can occur for
       – Concurrent queries each consuming shared RID pool
       – Single query requesting > 25% of table or hitting RID pool limit


      DB2 9 will fallback to tablespace scan*


      DB2 10 will continue by writing new RIDs to workfile
       – Work-file usage may increase
          • Mitigate by increasing RID pool size (default increased in DB2 10).
          • MAXTEMPS_RID zparm for maximum WF usage for each RID list

 * Hybrid join can incrementally process. Dynamic Index ANDing will use WF for failover.
37                                                                                   © 2011 IBM Corporation
Removal Of Parallelism Restrictions

      Allow parallelism if a parallel group contains a work file
        – DB2 generates temporary work file when view or table expression is
          materialized
        – This type of work file can not be shared among child tasks in previous
          releases of DB2, hence parallelism is disabled
        – DB2 10 will make the work file shareable
           • only applies to CP mode parallelism and no full outer join case


      Support parallelism for multi-row fetch (READ ONLY cursors)
        – In previous releases parallelism is disabled for the last (top level query block) select
        – Example: SELECT * FROM CUSTOMER;




38                                                                                   © 2011 IBM Corporation
Parallelism Enhancements - Effectiveness

      Previous Releases of DB2 may use Key Range Partitioning
       – Key Ranges Decided at Bind Time
       – Based on Statistics (low2key, high2key, column cardinality)
          • Assumes uniform data distribution
          • Histograms can help
            – But rarely collected


       – If Statistics are outdated or data is not uniformly distributed what
         happens to performance?




39                                                                    © 2011 IBM Corporation
Parallelism Enhancements - Effectiveness

      Previous Releases of DB2 may use Key Range Partitioning
       – Key Ranges Decided at Bind Time
       – Based on Statistics (low2key, high2key, column cardinality)
          • Assumes uniform data distribution
          • Histograms can help
            – But rarely collected


       – If Statistics are outdated or data is not uniformly distributed what
         happens to performance?




40                                                                    © 2011 IBM Corporation
Key range partition – before DB2 10
                                                                            Large_T
      SELECT *                                                            10,000,000 rows
      FROM Medium_T M,                                                       C2    C3
             Large_T L
      WHERE M.C2 = L.C2
        AND M.C1 BETWEEN (CURRENTDATE-90) AND CURRENTDATE


      Medium_T
       10,000 rows                                          Workfile
        C1     C2
                                               12-31-2007
                           3-degree parallelism
                                              09-30-2007
                                              08-31-2007
                            SORT                            2,500 rows
                            ON C2
                     25%                                                                5,000,000 rows
                                              05-01-2007
                                              04-30-2007


                                              01-01-2007
                              Partition the
                              records according
                              to the key ranges
      M.C1 is date column, assume currentdate is 8-31-2007, after the
      between predicate is applied, only rows with date between
      06-03-2007 and 8-31-2007 survived, but optimizer chops up the key
      ranges within the whole year after the records are sorted :-(

41                                                                                          © 2011 IBM Corporation
Parallelism Effectiveness – Record range

      DB2 10 can use Dynamic record range partitioning
        – Results divided into ranges with equal number of records
        – Division doesn't have to be on the key boundary
           • Unless required for group by or distinct function
        – Record range partitioning is dynamic
           • no longer based on the key ranges decided at bind time
        – Now based on number of composite records and parallel degree
           • Data skew, out of date statistics etc. will not have any effect on performance




42                                                                                  © 2011 IBM Corporation
Dynamic record range partition

     SELECT *                                                     Large_T
     FROM Medium_T M,                                           10,000,000 rows
                                                                   C2    C3
            Large_T L
     WHERE M.C2 = L.C2
      AND M.C1 BETWEEN (CURRENTDATE-90) AND CURRENTDATE


        Medium_T
         10,000 rows
          C1     C2
                          3-degrees parallelism
                                                   Workfile

                            SORT
                            ON C2

                                                   2,500 rows

                              Partition the records -
                              each range has same
                              number of records




43                                                                          © 2011 IBM Corporation
Parallelism Effectiveness - Straw Model

      Previous releases of DB2 divide the number of keys or pages by the
       number representing the parallel degree
        – One task is allocated per degree of parallelism
        – The range is processed and the task ends
        – Tasks may take different times to process


      DB2 10 can use the Straw Model workload distribution method
        – More key or page ranges will be allocated than the number of parallel degrees
        – The same number of tasks as before are allocated (same as degree)
        – Once a task finishes it’s smaller range it will process another range
        – Even if data is skewed this new process should make processing faster



44                                                                          © 2011 IBM Corporation
STRAW Model
     SELECT *
     FROM   Medium_T M
     WHERE M.C1 BETWEEN 20 AND 50

                                Medium_T                                     Medium_T
                                10,000 rows                                  10,000 rows
                                 C1     C2       Task 3                       C1     C2
                          100                                          100
                                                 Task 2

                                                 Task 1




                                                                       50
                          50                                           47
                                                                       44
                          40                                           41
                                                                       38
                                                                       35
                          30                                           32
                                                                       29
                                                                       26
                          20                    degree=3               23
     degree = 3                                                        20
                                                #ranges=10

                          0                                            0
            index on C1                                  index on C1


     Divided in key ranges before DB2 10      Divided in key ranges with Straw Model
45                                                                              © 2011 IBM Corporation
Agenda
      DB2 10 Optimizer
       – Plan management
       – Hints/Bind options
       – Explain
       – Dynamic Statement Caching
       – Optimizer costing
       – Runtime query performance
      DB2 10 SQL/Application Enablement
       – SQL table functions and SQL scalar functions
       – Implicit casting
       – Datetime constants / TIMESTAMP WITH TIME ZONE
       – Extended indicator variables
46                                                       © 2011 IBM Corporation
SQL table functions

      DB2 10 supports simple SQL table functions
       – Can use single RETURN control statement in function body
       – Can define parameter as: distinct type, transition table
       – No package is generated; reference is replaced similar to inline SQL scalar

        CREATE FUNCTION TRYTABLE(P1 CHAR(3))
          RETURNS TABLE(FIRSTNAME VARCHAR(12), LASTNAME VARCHAR(15))
          RETURN SELECT FIRSTNME, LASTNAME FROM DSN8A10.EMP WHERE WORKDEPT = P1;


        SELECT * FROM TABLE(TRYTABLE('A00')) X;
           +--------------------------------+
          | FIRSTNAME    |    LASTNAME     |
          +--------------------------------+
          | CHRISTINE    | HAAS            |
          | VINCENZO     | LUCCHESI        |
          | SEAN         | O'CONNELL       |
          | DIAN         | HEMMINGER       |
          | GREG         | ORLANDO         |
          +--------------------------------+

47                                                                                 © 2011 IBM Corporation
SQL non-inline scalar functions

     DB2 10 differentiates between inline SQL scalar and non-inline SQL scalar
     functions
        – Inline: functions with the same capability as in prior releases
             • No package is generated; reference is replaced by the expression
        – Non-inline
             • Package is created (note REBIND PACKAGE rebinds only SQL in
               function body; does not rebind SQL control statements – use ALTER
               FUNCTION REGENERATE).
               e.g.: CREATE FUNCTION TEST_FN(P1 TABLE LIKE EMP AS LOCATOR)
                       RETURNS INT   LANGUAGE SQL …
                       BEGIN
                        DECLARE VAR1 INT;
                        SET VAR1 = (SELECT ID FROM TABLE(P1 LIKE EMP));
                        IF VAR1 <> 42 THEN INSERT INTO REPORT VALUES(...);
                        END IF;
                        RETURN VAR1;
                       END#



48                                                                           © 2011 IBM Corporation
SQL non-inline scalar functions

      DB2 10 differentiates between inline SQL scalar and non-inline SQL scalar
      functions
         – Inline: functions with the same capability as in prior releases
               • No package is generated; reference is replaced by the expression
         – Non-inline
               • Package is created (note REBIND PACKAGE rebinds only SQL in
                 function body; does not rebind SQL control statements – use ALTER
                 FUNCTION REGENERATE).
                 e.g.: CREATE FUNCTION TEST_FN(P1 TABLE LIKE EMP AS LOCATOR)
                        RETURNS INT   LANGUAGE SQL …
                        BEGIN
                         DECLARE VAR1 INT;
                         SET VAR1 = (SELECT ID FROM TABLE(P1 LIKE EMP));      REBIND PACKAGE
ALTER … REGENERATE       IF VAR1 <> 42 THEN INSERT INTO REPORT VALUES(...);
                         END IF;
                         RETURN VAR1;
                        END#



 49                                                                               © 2011 IBM Corporation
SQL scalar function versioning

     Similar to Native SQL Stored Procedure versioning:

     -- Create a non-inline SQL scalar function with initial version V1
     CREATE FUNCTION TRYVER()
     RETURNS VARCHAR(20)
     VERSION V1
     LANGUAGE SQL
     DETERMINISTIC ...
     RETURN 'Running version1';




50                                                                        © 2011 IBM Corporation
SQL scalar function versioning

     Similar to Native SQL Stored Procedure versioning:

     -- Create a non-inline SQL scalar function with initial version V1
     CREATE FUNCTION TRYVER()
     RETURNS VARCHAR(20)
     VERSION V1
     LANGUAGE SQL
     DETERMINISTIC ...
     RETURN 'Running version1';

     -- Add a second version V2 of the function created above
     ALTER FUNCTION TRYVER ADD VERSION V2 ()
     RETURNS VARCHAR(20)
     LANGUAGE SQL
     DETERMINISTIC ...
     RETURN 'Running version2';




51                                                                        © 2011 IBM Corporation
SQL scalar function versioning

     Similar to Native SQL Stored Procedure versioning:

     -- Create a non-inline SQL scalar function with initial version V1
     CREATE FUNCTION TRYVER()
     RETURNS VARCHAR(20)
     VERSION V1
     LANGUAGE SQL
     DETERMINISTIC ...
     RETURN 'Running version1';

     -- Add a second version V2 of the function created above
     ALTER FUNCTION TRYVER ADD VERSION V2 ()
     RETURNS VARCHAR(20)
     LANGUAGE SQL
     DETERMINISTIC ...
     RETURN 'Running version2';

     -- Invoke the function
     SELECT TRYVER() FROM SYSIBM.SYSDUMMY1;
     result: Running version1




52                                                                        © 2011 IBM Corporation
SQL scalar function versioning

     Similar to Native SQL Stored Procedure versioning:

     -- Create a non-inline SQL scalar function with initial version V1
     CREATE FUNCTION TRYVER()
     RETURNS VARCHAR(20)
     VERSION V1
     LANGUAGE SQL
     DETERMINISTIC ...
     RETURN 'Running version1';

     -- Add a second version V2 of the function created above
     ALTER FUNCTION TRYVER ADD VERSION V2 ()
     RETURNS VARCHAR(20)
     LANGUAGE SQL
     DETERMINISTIC ...
     RETURN 'Running version2';

     -- Invoke the function
     SELECT TRYVER() FROM SYSIBM.SYSDUMMY1;
     result: Running version1
     -- Now make V2 version the active version
     ALTER FUNCTION TRYVER ACTIVATE VERSION V2;




53                                                                        © 2011 IBM Corporation
SQL scalar function versioning

     Similar to Native SQL Stored Procedure versioning:

     -- Create a non-inline SQL scalar function with initial version V1
     CREATE FUNCTION TRYVER()
     RETURNS VARCHAR(20)
     VERSION V1
     LANGUAGE SQL
     DETERMINISTIC ...
     RETURN 'Running version1';

     -- Add a second version V2 of the function created above
     ALTER FUNCTION TRYVER ADD VERSION V2 ()
     RETURNS VARCHAR(20)
     LANGUAGE SQL
     DETERMINISTIC ...
     RETURN 'Running version2';

     -- Invoke the function
     SELECT TRYVER() FROM SYSIBM.SYSDUMMY1;
     result: Running version1
     -- Now make V2 version the active version
     ALTER FUNCTION TRYVER ACTIVATE VERSION V2;
     -- Invoke the function again
     SELECT TRYVER() FROM SYSIBM.SYSDUMMY1;
     result: Running version2

54                                                                        © 2011 IBM Corporation
Implicit cast support for strings and numerics

     
         Character or graphic strings and numeric data types are compatible (except for
         LOBs and non-Unicode graphic strings)
     
         DB2 can perform an implicit cast between those data types
     
         You can directly insert or compare the values of those data types:
          e.g.: ... WHERE EMP_ID = '100', INSERT INTO(CHARCOL) VALUES(123), etc.
     
         Implicit cast result data type is determined based on the following table:




55                                                                         © 2011 IBM Corporation
Date-time constants

     DB2 10 supports ANSI/ISO SQL standard form of a datetime constant:

     DATE '18.01.1977'                       -- date (EUR format)

     TIME '15.30.00'                         -- time (EUR format)

     TIMESTAMP '2007-05-14 11:55:00.1234'    -- timestamp
     TIMESTAMP '2007-05-14T11:55:00.1234'    -- timestamp

     TIMESTAMP '2007-05-14 11:55:00.1234+08:00'    -- timestamp with time zone UTC+8
     TIMESTAMP '2007-05-14 11.55.00Z'              -- timestamp with time zone UTC


     SELECT … WHERE DATECOL > '2011-01-01'         -- date column compared to string literal
     SELECT … WHERE DATECOL > DATE'2011-01-01'     -- date column compared with date literal


     SELECT HEX( DATE'2010-08-06' )         -- display date constant
     FROM   SYSIBM.SYSDUMMY1;
     -- result: 20100806                    -- i.e. DATE'2010-08-06' is a 4-byte date

     SELECT HEX(     '2010-08-06' )         -- display character string constant
     FROM   SYSIBM.SYSDUMMY1;
     -- result: F2F0F1F060F0F860F0F6        -- i.e. '2010-08-06' is a 10-byte string


56                                                                                     © 2011 IBM Corporation
Extended indicator variables

     There are frequent situations where an application needs to insert or update data
     only for a subset of columns for a given table.

     The application developers are faced with a dilemma of how to provide an
     application that could handle all possible insert or update requests when it is not
     known which columns are being inserted to or updated until application execution
     time:
          
             “custom” dynamic SQL queries
          
             Code all combinations ahead of time
          
             One SQL but application must determine values for all needed columns

     
       New extended indicator variable values:
     
       -5 means DEFAULT
     
       -7 means UNASSIGNED (treat as if it was not specified)
     
       -1, -2, -3, -4, -6 means NULL

     
       EXTENDEDINDICATOR BIND/REBIND PACKAGE option
     
       WITH EXTENDED INDICATORS PREPARE attribute
57                                                                           © 2011 IBM Corporation
Extended indicator variables

     Special extended indicator variable values can be specified only for host variables
     (parameter markers) that appear in:

     
         Set assignment list of an UPDATE operation in UPDATE or MERGE statements
     
         The values list of an INSERT operation in INSERT or MERGE statements
     
         The select list of an INSERT statement in the FROM clause of the SELECT
         statement
     
         The source-table parameter of a MERGE statement

     Furthermore, the host variable cannot be part of an expression other than an
     explicit cast (if the target column is not nullable, the explicit cast can be only to the
     same data type as the target column).




58                                                                               © 2011 IBM Corporation
Extended indicator variables - Example

     ...
     memset(&hv_indicators, 0, sizeof(hv_indicators));
     strcpy(hv_name,    "Michael");          /* use value       */

     strcpy(hv_country, "Australia");        /* use value       */

     hv_indicators.hvi_name     = -7;        /*   skip update   */
     hv_indicators.hvi_country = -5;         /*   use DEFAULT   */
     hv_indicators.hvi_city     = -7;        /*   skip update   */
     hv_indicators.hvi_zip      = -7;        /*   skip update   */
     EXEC SQL
     UPDATE TRYINDVAR SET
       NAME   = :hv_name:hvi_name
     ,COUNTRY = :hv_country:hvi_country
     ,CITY    = :hv_city:hvi_city
     ,ZIP     = :hv_zip:hvi_zip
     ;




59                                                                   © 2011 IBM Corporation
Timestamp with TIME ZONE

     New data type: TIMESTAMP WITH TIME ZONE

     Timestamp plus time zone: 2010-08-06 12.30.00-8:00 (UTC-8)
     ( UTC is 2010-08-06 20.30.00 - subtract UTC part to convert)

     Valid range for time zone:
      SQL standard specification: -12:59 to +14:00
      W3C XML standard for XSD schema definition specifies: -14:00 to +14:00

     Because the valid range for a CURRENT TIME ZONE special register is -24:00 to
     +24:00, the valid range for the time zone offset was chosen to also be -24:00 to
     24:00 for compatibility.




60                                                                       © 2011 IBM Corporation
Timestamp with TIME ZONE

     Determining the implicit TIME ZONE:

     DSNHDECP parameter IMPLICIT_TIMEZONE and a new special register
     SESSION TIME ZONE aid in determining the implicit time zone.

     The implicit time zone is determined as follows:
      If IMPLICIT_TIMEZONE is not specified or is specified as CURRENT, the implicit
      time zone is the value of the CURRENT TIME ZONE special register.

      If IMPLICIT_TIMEZONE is specified as SESSION, the implicit time zone is the
      value of the SESSION TIME ZONE special register.

      If IMPLICIT_TIMEZONE is specified as a character string in the format of '±th:tm',
      the implicit time zone is the time zone value represented by that character string.




61                                                                          © 2011 IBM Corporation
Time zone specific expressions

     You can use time zone specific expressions to adjust timestamp values and
     character-string or graphic-string representations of timestamp values to specific
     time zones




     AT LOCAL – value adjusted for the local time zone using SESSION TIME ZONE
                special register value.
     AT TIME ZONE ‘±th:tm’ - value adjusted for the specified time zone



62                                                                          © 2011 IBM Corporation
Time zone specific expressions - Examples

     -- establish session time zone as UTC+2
     SET SESSION TIMEZONE = '+2:00';




63                                             © 2011 IBM Corporation
Time zone specific expressions - Examples

     SET SESSION TIMEZONE = '+2:00';

     -- adjust column/literal to LOCAL
     SELECT '2007-05-14-11:55:00.0 -8:00' AT LOCAL
     FROM   SYSIBM.SYSDUMMY1;
     -- result: 2007-05-14-21.55.00.000000+02:00




64                                                   © 2011 IBM Corporation
Time zone specific expressions - Examples

     SET SESSION TIMEZONE = '+2:00';

     -- adjust column/literal to LOCAL
     SELECT '2007-05-14-11:55:00.0 -8:00' AT LOCAL
     FROM   SYSIBM.SYSDUMMY1;
     -- result: 2007-05-14-21.55.00.000000+02:00
     -- how did it get calculated:
     -- 1) … 11:55:00.0 -8:00 is 19:55 in UTC
     -- 2) SESSION TIMEZONE has '+2:00'
     --    so we add that to UTC: 19:55 + 2:00 = 21:55




65                                                       © 2011 IBM Corporation
Time zone specific expressions - Examples

     SELECT '2007-05-14-11:55:00.0 -8:00' AT TIME ZONE '+00:00'
     FROM   SYSIBM.SYSDUMMY1;
     -- result: 2007-05-14-19.55.00.000000+00:00
     -- this is UTC


     SELECT '2007-05-14-11:55:00.0 -8:00' AT TIME ZONE ('-'||'7'||':'||'00')
     FROM   SYSIBM.SYSDUMMY1;
     -- result: 2007-05-14-12.55.00.000000-07:00




66                                                                             © 2011 IBM Corporation
Time zone specific scalar functions




     The TIMESTAMP_TZ function returns a TIMESTAMP WITH TIME ZONE value
     from the input arguments.

     Examples (assume implicit time zone is '+8:00')

     TIMESTAMP_TZ(TIMESTAMP '2007-05-14-12.55.00')         ==> 2007-05-14-12.55.00+08:00
     TIMESTAMP_TZ(TIMESTAMP '2007-05-14-12.55.00+2:00')    ==> 2007-05-14-12.55.00+02:00
     TIMESTAMP_TZ(TIMESTAMP '2007-05-14-12.55.00','-7:00') ==> 2007-05-14-12.55.00-07:00




67                                                                                © 2011 IBM Corporation
Time zone – Application programming

     Declarations generated by DCLGEN:




     For Java:
     TIMESTAMP(p) WITH TIME ZONE ==> java.sql.TimestampTZ




     For more on SQL and Application Enablement, see “DB2 10 for z/OS Technical Overview”
     (SG24-7892-00)



68                                                                            © 2011 IBM Corporation
Thank you !




              © 2011 IBM Corporation

Weitere ähnliche Inhalte

Was ist angesagt?

The fillmore-group-aese-presentation-111810
The fillmore-group-aese-presentation-111810The fillmore-group-aese-presentation-111810
The fillmore-group-aese-presentation-111810Gennaro (Rino) Persico
 
Less12 maintenance
Less12 maintenanceLess12 maintenance
Less12 maintenanceAmit Bhalla
 
Less13 performance
Less13 performanceLess13 performance
Less13 performanceAmit Bhalla
 
Supply Relationship Management Srm 7.0
Supply Relationship Management Srm 7.0Supply Relationship Management Srm 7.0
Supply Relationship Management Srm 7.0SAPbyExpert
 
Mainframe JCL Part - 1
Mainframe JCL Part - 1Mainframe JCL Part - 1
Mainframe JCL Part - 1janaki ram
 
Consumer productspd7 guidelines_080111
Consumer productspd7 guidelines_080111Consumer productspd7 guidelines_080111
Consumer productspd7 guidelines_080111Kim Ponto
 
Spring Day | Behind the Scenes at Spring Batch | Dave Syer
Spring Day | Behind the Scenes at Spring Batch | Dave SyerSpring Day | Behind the Scenes at Spring Batch | Dave Syer
Spring Day | Behind the Scenes at Spring Batch | Dave SyerJAX London
 
The Decorator Pattern
The Decorator PatternThe Decorator Pattern
The Decorator PatternAkshat Vig
 
Quadcept 9.1.0 released
Quadcept 9.1.0 releasedQuadcept 9.1.0 released
Quadcept 9.1.0 releasedQuadcept
 
07 Using Oracle-Supported Package in Application Development
07 Using Oracle-Supported Package in Application Development07 Using Oracle-Supported Package in Application Development
07 Using Oracle-Supported Package in Application Developmentrehaniltifat
 

Was ist angesagt? (19)

Plsql les04
Plsql les04Plsql les04
Plsql les04
 
plsql les01
 plsql les01 plsql les01
plsql les01
 
The fillmore-group-aese-presentation-111810
The fillmore-group-aese-presentation-111810The fillmore-group-aese-presentation-111810
The fillmore-group-aese-presentation-111810
 
Less12 maintenance
Less12 maintenanceLess12 maintenance
Less12 maintenance
 
Less13 performance
Less13 performanceLess13 performance
Less13 performance
 
plsql les06
 plsql les06 plsql les06
plsql les06
 
15 decorator pattern
15 decorator pattern15 decorator pattern
15 decorator pattern
 
Jsf+ejb 50
Jsf+ejb 50Jsf+ejb 50
Jsf+ejb 50
 
Supply Relationship Management Srm 7.0
Supply Relationship Management Srm 7.0Supply Relationship Management Srm 7.0
Supply Relationship Management Srm 7.0
 
Mainframe JCL Part - 1
Mainframe JCL Part - 1Mainframe JCL Part - 1
Mainframe JCL Part - 1
 
Bapi jco[1]
Bapi jco[1]Bapi jco[1]
Bapi jco[1]
 
Consumer productspd7 guidelines_080111
Consumer productspd7 guidelines_080111Consumer productspd7 guidelines_080111
Consumer productspd7 guidelines_080111
 
PL/SQL 3 DML
PL/SQL 3 DMLPL/SQL 3 DML
PL/SQL 3 DML
 
Spring Day | Behind the Scenes at Spring Batch | Dave Syer
Spring Day | Behind the Scenes at Spring Batch | Dave SyerSpring Day | Behind the Scenes at Spring Batch | Dave Syer
Spring Day | Behind the Scenes at Spring Batch | Dave Syer
 
Heizer om10 ch09-layout
Heizer om10 ch09-layoutHeizer om10 ch09-layout
Heizer om10 ch09-layout
 
plsql les10
 plsql les10 plsql les10
plsql les10
 
The Decorator Pattern
The Decorator PatternThe Decorator Pattern
The Decorator Pattern
 
Quadcept 9.1.0 released
Quadcept 9.1.0 releasedQuadcept 9.1.0 released
Quadcept 9.1.0 released
 
07 Using Oracle-Supported Package in Application Development
07 Using Oracle-Supported Package in Application Development07 Using Oracle-Supported Package in Application Development
07 Using Oracle-Supported Package in Application Development
 

Ähnlich wie What’s New For SQL Optimization In DB2 9 And DB2 10 For z/OS

DB2 Design for High Availability and Scalability
DB2 Design for High Availability and ScalabilityDB2 Design for High Availability and Scalability
DB2 Design for High Availability and ScalabilitySurekha Parekh
 
Stephan Hummel – IT-Tage 2015 – DB2 In-Memory - Eine Technologie nicht nur fü...
Stephan Hummel – IT-Tage 2015 – DB2 In-Memory - Eine Technologie nicht nur fü...Stephan Hummel – IT-Tage 2015 – DB2 In-Memory - Eine Technologie nicht nur fü...
Stephan Hummel – IT-Tage 2015 – DB2 In-Memory - Eine Technologie nicht nur fü...Informatik Aktuell
 
Less04 database instance
Less04 database instanceLess04 database instance
Less04 database instanceAmit Bhalla
 
What's new on SAP HANA Workload Management
What's new on SAP HANA Workload ManagementWhat's new on SAP HANA Workload Management
What's new on SAP HANA Workload ManagementSAP Technology
 
MySQL Enterprise Backup - BnR Scenarios
MySQL Enterprise Backup - BnR ScenariosMySQL Enterprise Backup - BnR Scenarios
MySQL Enterprise Backup - BnR ScenariosKeith Hollman
 
SAP HANA SPS10- Workload Management
SAP HANA SPS10- Workload ManagementSAP HANA SPS10- Workload Management
SAP HANA SPS10- Workload ManagementSAP Technology
 
Jmorrow rtv den_auto_config_rapidclone
Jmorrow rtv den_auto_config_rapidcloneJmorrow rtv den_auto_config_rapidclone
Jmorrow rtv den_auto_config_rapidcloneMlx Le
 
DB2 11 for z/OS Migration Planning and Early Customer Experiences
DB2 11 for z/OS Migration Planning and Early Customer ExperiencesDB2 11 for z/OS Migration Planning and Early Customer Experiences
DB2 11 for z/OS Migration Planning and Early Customer ExperiencesJohn Campbell
 
11 Understanding and Influencing the PL/SQL Compilar
11 Understanding and Influencing the PL/SQL Compilar11 Understanding and Influencing the PL/SQL Compilar
11 Understanding and Influencing the PL/SQL Compilarrehaniltifat
 
Whats New on SAP HANA SPS 11 Core Database Capabilities
Whats New on SAP HANA SPS 11 Core Database CapabilitiesWhats New on SAP HANA SPS 11 Core Database Capabilities
Whats New on SAP HANA SPS 11 Core Database CapabilitiesSAP Technology
 
System z Technology Summit Streamlining Utilities
System z Technology Summit Streamlining UtilitiesSystem z Technology Summit Streamlining Utilities
System z Technology Summit Streamlining UtilitiesSurekha Parekh
 
Db2 blu acceleration and more
Db2 blu acceleration and moreDb2 blu acceleration and more
Db2 blu acceleration and moreIBM Sverige
 
EDBT 2013 - Near Realtime Analytics with IBM DB2 Analytics Accelerator
EDBT 2013 - Near Realtime Analytics with IBM DB2 Analytics AcceleratorEDBT 2013 - Near Realtime Analytics with IBM DB2 Analytics Accelerator
EDBT 2013 - Near Realtime Analytics with IBM DB2 Analytics AcceleratorDaniel Martin
 
A First Look at the DB2 10 DSNZPARM Changes
A First Look at the DB2 10 DSNZPARM ChangesA First Look at the DB2 10 DSNZPARM Changes
A First Look at the DB2 10 DSNZPARM ChangesWillie Favero
 

Ähnlich wie What’s New For SQL Optimization In DB2 9 And DB2 10 For z/OS (20)

DB2 Design for High Availability and Scalability
DB2 Design for High Availability and ScalabilityDB2 Design for High Availability and Scalability
DB2 Design for High Availability and Scalability
 
Les11.ppt
Les11.pptLes11.ppt
Les11.ppt
 
Sql views
Sql viewsSql views
Sql views
 
Stephan Hummel – IT-Tage 2015 – DB2 In-Memory - Eine Technologie nicht nur fü...
Stephan Hummel – IT-Tage 2015 – DB2 In-Memory - Eine Technologie nicht nur fü...Stephan Hummel – IT-Tage 2015 – DB2 In-Memory - Eine Technologie nicht nur fü...
Stephan Hummel – IT-Tage 2015 – DB2 In-Memory - Eine Technologie nicht nur fü...
 
Less04 database instance
Less04 database instanceLess04 database instance
Less04 database instance
 
Sql optimize
Sql optimizeSql optimize
Sql optimize
 
What's new on SAP HANA Workload Management
What's new on SAP HANA Workload ManagementWhat's new on SAP HANA Workload Management
What's new on SAP HANA Workload Management
 
MySQL Enterprise Backup - BnR Scenarios
MySQL Enterprise Backup - BnR ScenariosMySQL Enterprise Backup - BnR Scenarios
MySQL Enterprise Backup - BnR Scenarios
 
SAP HANA SPS10- Workload Management
SAP HANA SPS10- Workload ManagementSAP HANA SPS10- Workload Management
SAP HANA SPS10- Workload Management
 
Jmorrow rtv den_auto_config_rapidclone
Jmorrow rtv den_auto_config_rapidcloneJmorrow rtv den_auto_config_rapidclone
Jmorrow rtv den_auto_config_rapidclone
 
DB2 11 for z/OS Migration Planning and Early Customer Experiences
DB2 11 for z/OS Migration Planning and Early Customer ExperiencesDB2 11 for z/OS Migration Planning and Early Customer Experiences
DB2 11 for z/OS Migration Planning and Early Customer Experiences
 
11 Understanding and Influencing the PL/SQL Compilar
11 Understanding and Influencing the PL/SQL Compilar11 Understanding and Influencing the PL/SQL Compilar
11 Understanding and Influencing the PL/SQL Compilar
 
Whats New on SAP HANA SPS 11 Core Database Capabilities
Whats New on SAP HANA SPS 11 Core Database CapabilitiesWhats New on SAP HANA SPS 11 Core Database Capabilities
Whats New on SAP HANA SPS 11 Core Database Capabilities
 
System z Technology Summit Streamlining Utilities
System z Technology Summit Streamlining UtilitiesSystem z Technology Summit Streamlining Utilities
System z Technology Summit Streamlining Utilities
 
CDS Views.pptx
CDS Views.pptxCDS Views.pptx
CDS Views.pptx
 
Db2 blu acceleration and more
Db2 blu acceleration and moreDb2 blu acceleration and more
Db2 blu acceleration and more
 
EDBT 2013 - Near Realtime Analytics with IBM DB2 Analytics Accelerator
EDBT 2013 - Near Realtime Analytics with IBM DB2 Analytics AcceleratorEDBT 2013 - Near Realtime Analytics with IBM DB2 Analytics Accelerator
EDBT 2013 - Near Realtime Analytics with IBM DB2 Analytics Accelerator
 
A First Look at the DB2 10 DSNZPARM Changes
A First Look at the DB2 10 DSNZPARM ChangesA First Look at the DB2 10 DSNZPARM Changes
A First Look at the DB2 10 DSNZPARM Changes
 
Less03 db dbca
Less03 db dbcaLess03 db dbca
Less03 db dbca
 
Oracle RAC 12c Overview
Oracle RAC 12c OverviewOracle RAC 12c Overview
Oracle RAC 12c Overview
 

Mehr von Surekha Parekh

DB2 11 Technical Overview - John Campbell
DB2 11 Technical Overview - John CampbellDB2 11 Technical Overview - John Campbell
DB2 11 Technical Overview - John CampbellSurekha Parekh
 
A Time Traveller’s Guide to DB2: Technology Themes for 2014 and Beyond
A Time Traveller’s Guide to DB2: Technology Themes for 2014 and BeyondA Time Traveller’s Guide to DB2: Technology Themes for 2014 and Beyond
A Time Traveller’s Guide to DB2: Technology Themes for 2014 and BeyondSurekha Parekh
 
IBM Analytics Accelerator Trends & Directions Namk Hrle
IBM Analytics Accelerator  Trends & Directions Namk Hrle IBM Analytics Accelerator  Trends & Directions Namk Hrle
IBM Analytics Accelerator Trends & Directions Namk Hrle Surekha Parekh
 
DB2 10 Migration Planning & Customer experiences - Chris Crone (IDUG India)
DB2 10 Migration Planning & Customer experiences - Chris Crone (IDUG India) DB2 10 Migration Planning & Customer experiences - Chris Crone (IDUG India)
DB2 10 Migration Planning & Customer experiences - Chris Crone (IDUG India) Surekha Parekh
 
DB2 10 Smarter Database - IBM Tech Forum
DB2 10 Smarter Database   - IBM Tech ForumDB2 10 Smarter Database   - IBM Tech Forum
DB2 10 Smarter Database - IBM Tech ForumSurekha Parekh
 
Tools for developing and monitoring SQL in DB2 for z/OS
Tools for developing and monitoring SQL in DB2 for z/OSTools for developing and monitoring SQL in DB2 for z/OS
Tools for developing and monitoring SQL in DB2 for z/OSSurekha Parekh
 
Bank Data Frank Peterson DB2 10-Early_Experiences_pdf
Bank Data   Frank Peterson DB2 10-Early_Experiences_pdfBank Data   Frank Peterson DB2 10-Early_Experiences_pdf
Bank Data Frank Peterson DB2 10-Early_Experiences_pdfSurekha Parekh
 
Gain Insight Into DB2 9 And DB2 10 for z/OS Performance Updates And Save Cost...
Gain Insight Into DB2 9 And DB2 10 for z/OS Performance Updates And Save Cost...Gain Insight Into DB2 9 And DB2 10 for z/OS Performance Updates And Save Cost...
Gain Insight Into DB2 9 And DB2 10 for z/OS Performance Updates And Save Cost...Surekha Parekh
 
DB2 for z/OS Update Data Warehousing On System Z
DB2 for z/OS Update Data Warehousing On System ZDB2 for z/OS Update Data Warehousing On System Z
DB2 for z/OS Update Data Warehousing On System ZSurekha Parekh
 
DB2 9 for z/OS - Business Value
DB2 9 for z/OS  - Business  ValueDB2 9 for z/OS  - Business  Value
DB2 9 for z/OS - Business ValueSurekha Parekh
 
DB2 for z/O S Data Sharing
DB2 for z/O S  Data  SharingDB2 for z/O S  Data  Sharing
DB2 for z/O S Data SharingSurekha Parekh
 

Mehr von Surekha Parekh (11)

DB2 11 Technical Overview - John Campbell
DB2 11 Technical Overview - John CampbellDB2 11 Technical Overview - John Campbell
DB2 11 Technical Overview - John Campbell
 
A Time Traveller’s Guide to DB2: Technology Themes for 2014 and Beyond
A Time Traveller’s Guide to DB2: Technology Themes for 2014 and BeyondA Time Traveller’s Guide to DB2: Technology Themes for 2014 and Beyond
A Time Traveller’s Guide to DB2: Technology Themes for 2014 and Beyond
 
IBM Analytics Accelerator Trends & Directions Namk Hrle
IBM Analytics Accelerator  Trends & Directions Namk Hrle IBM Analytics Accelerator  Trends & Directions Namk Hrle
IBM Analytics Accelerator Trends & Directions Namk Hrle
 
DB2 10 Migration Planning & Customer experiences - Chris Crone (IDUG India)
DB2 10 Migration Planning & Customer experiences - Chris Crone (IDUG India) DB2 10 Migration Planning & Customer experiences - Chris Crone (IDUG India)
DB2 10 Migration Planning & Customer experiences - Chris Crone (IDUG India)
 
DB2 10 Smarter Database - IBM Tech Forum
DB2 10 Smarter Database   - IBM Tech ForumDB2 10 Smarter Database   - IBM Tech Forum
DB2 10 Smarter Database - IBM Tech Forum
 
Tools for developing and monitoring SQL in DB2 for z/OS
Tools for developing and monitoring SQL in DB2 for z/OSTools for developing and monitoring SQL in DB2 for z/OS
Tools for developing and monitoring SQL in DB2 for z/OS
 
Bank Data Frank Peterson DB2 10-Early_Experiences_pdf
Bank Data   Frank Peterson DB2 10-Early_Experiences_pdfBank Data   Frank Peterson DB2 10-Early_Experiences_pdf
Bank Data Frank Peterson DB2 10-Early_Experiences_pdf
 
Gain Insight Into DB2 9 And DB2 10 for z/OS Performance Updates And Save Cost...
Gain Insight Into DB2 9 And DB2 10 for z/OS Performance Updates And Save Cost...Gain Insight Into DB2 9 And DB2 10 for z/OS Performance Updates And Save Cost...
Gain Insight Into DB2 9 And DB2 10 for z/OS Performance Updates And Save Cost...
 
DB2 for z/OS Update Data Warehousing On System Z
DB2 for z/OS Update Data Warehousing On System ZDB2 for z/OS Update Data Warehousing On System Z
DB2 for z/OS Update Data Warehousing On System Z
 
DB2 9 for z/OS - Business Value
DB2 9 for z/OS  - Business  ValueDB2 9 for z/OS  - Business  Value
DB2 9 for z/OS - Business Value
 
DB2 for z/O S Data Sharing
DB2 for z/O S  Data  SharingDB2 for z/O S  Data  Sharing
DB2 for z/O S Data Sharing
 

Kürzlich hochgeladen

CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 

Kürzlich hochgeladen (20)

CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 

What’s New For SQL Optimization In DB2 9 And DB2 10 For z/OS

  • 1. IBM System z Technology Summit DB2 10 for z/OS Query Technology features Andrei Lurie alurie@us.ibm.com © 2011 IBM Corporation
  • 2. Disclaimer © Copyright IBM Corporation 2011. All rights reserved. U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. THE INFORMATION CONTAINED IN THIS PRESENTATION IS PROVIDED FOR INFORMATIONAL PURPOSES ONLY.  WHILE EFFORTS WERE MADE TO VERIFY THE COMPLETENESS AND ACCURACY OF THE INFORMATION CONTAINED IN THIS PRESENTATION, IT IS PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. IN ADDITION, THIS INFORMATION IS BASED ON IBM’S CURRENT PRODUCT PLANS AND STRATEGY, WHICH ARE SUBJECT TO CHANGE BY IBM WITHOUT NOTICE.  IBM SHALL NOT BE RESPONSIBLE FOR ANY DAMAGES ARISING OUT OF THE USE OF, OR OTHERWISE RELATED TO, THIS PRESENTATION OR ANY OTHER DOCUMENTATION. NOTHING CONTAINED IN THIS PRESENTATION IS INTENDED TO, NOR SHALL HAVE THE EFFECT OF, CREATING ANY WARRANTIES OR REPRESENTATIONS FROM IBM (OR ITS SUPPLIERS OR LICENSORS), OR ALTERING THE TERMS AND CONDITIONS OF ANY AGREEMENT OR LICENSE GOVERNING THE USE OF IBM PRODUCTS AND/OR SOFTWARE. IBM, the IBM logo, ibm.com, DB2 and z/OS are trademarks or registered trademarks of International Business Machines Corporation in the United States, other countries, or both. If these and other IBM trademarked terms are marked on their first occurrence in this information with a trademark symbol (® or ™), these symbols indicate U.S. registered or common law trademarks owned by IBM at the time this information was published. Such trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at “Copyright and trademark information” at www.ibm.com/legal/copytrade.shtml Other company, product, or service names may be trademarks or service marks of others. 2 © 2011 IBM Corporation
  • 3. Agenda  DB2 10 Optimizer – Plan management – Hints/Bind options – Explain – Dynamic Statement Caching – Optimizer costing – Runtime query performance  DB2 10 SQL/Application Enablement – SQL table functions and non-inline SQL scalar functions – Implicit casting – Datetime constants and TIMESTAMP WITH TIMEZONE – Extended indicator variables 3 © 2011 IBM Corporation
  • 4. Plan Management Notes (DB2 9)  REBIND PACKAGE options:  FREE PACKAGE … – PLANMGMT (BASIC) – PLANMGMTSCOPE(ALL) – Free package 2 copies: Current and Previous completely – PLANMGMT (EXTENDED) – PLANMGMTSCOPE(INACTIVE) – Free old 3 copies: Current, Previous, Original copies  REBIND PACKAGE options:  Catalog support – SWITCH(PREVIOUS) – SYSPACKAGE reflects active copy only Switch between current & previous – SYSPACKDEP reflects dependencies of all – SWITCH(ORIGINAL) copies Switch between current & original – Other catalogs (SYSPKSYSTEM, …) reflect metadata for all copies  Most bind options can be changed at REBIND – But a few must be the same …  Invalidation and Auto Bind – Each copy invalidated separately 4 © 2011 IBM Corporation
  • 5. DB2 10 Updates to Plan Management  SYSIBM.SYSPACKCOPY – New catalog table – Hold SYSPACKAGE-style metadata for any previous or original package copies – No longer need to SWITCH to see information on inactive copies  APRETAINDUP option of REBIND – Default YES • Retain duplicate for BASIC or EXTENDED – Optional NO • Do not retain duplicate access path as PREVIOUS or ORIGINAL – PREVIOUS/ORIGINAL must be from DB2 9 or later  Native SQL Stored Procedure packages are supported 5 © 2011 IBM Corporation
  • 6. Retrieving Access Path with EXPLAIN(NO)  EXPLAIN PACKAGE – Extract existing PLAN_TABLE information for packages • NOT a new explain • The package/copy must be created on DB2 9 or later – Useful if you didn’t BIND with EXPLAIN(YES) • Or PLAN_TABLE entries are lost >>-EXPLAIN----PACKAGE-----------> >>-----COLLECTION--collection-name--PACKAGE--package-name---------> >----+--------------------------+----+-------------------+--------> | | | | +---VERSION-version-name---+ +---COPY--copy-id---+ • COPY-ID can be ‘CURRENT’, ‘PREVIOUS’, ‘ORIGINAL’ 6 © 2011 IBM Corporation
  • 7. What-if? BIND  BIND package to see what's new  Bind package EXPLAIN(ONLY) and/or SQLERROR(CHECK) – Existing package copies are not overwritten • Performs explain or syntax/semantic error checks on SQL – Requires BIND, BINDAGENT, or EXPLAIN privilege. – Supported for BIND only • Not REBIND • Targeted to application changes – E.g. Development environment is DB2 LUW, production DB2 for z/OS 7 © 2011 IBM Corporation
  • 8. Access Path Stability with statement level hints  Current limitations in hint matching – QUERYNO is used to link queries to their hints – a bit fragile – For dynamic SQL, require a change to apps – can be impractical  New mechanisms: – Associate query text with its corresponding hint … more robust – Hints enforced for the entire DB2 subsystem • irrespective of static vs. dynamic, etc. – Hints integrated into the access path repository  PLAN_TABLE isn’t going away  Only the “hint lookup” mechanism is being improved. 8 © 2011 IBM Corporation
  • 9. Statement level hints (cont.)  Steps to use new hints mechanism – Populate a user table DSN_USERQUERY_TABLE with query text and QUERYNO – Populate PLAN_TABLE with the corresponding hints – Run new command BIND QUERY • To integrate the hint into the repository. – FREE QUERY command can be used to remove the hint. 9 © 2011 IBM Corporation
  • 10. Statement-level BIND options  Statement-level granularity may be required rather than: – Subsystem level ZPARMs (STARJOIN, SJTABLES, MAX_PAR_DEGREE) – Package level BIND options (REOPT, DEF_CURR_DEGREE)  For example – Only one statement in the package needs REOPT(ALWAYS)  New mechanism for statement-level bind options: – Similar to mechanism used for hints – DSN_USERQUERY_TABLE can also hold per-statement options 10 © 2011 IBM Corporation
  • 11. Literal Replacement  Dynamic SQL with literals can now be re-used in the cache – Literals replaced with & • Similar to parameter markers but not the same  To enable: – Put CONCENTRATE STATEMENTS WITH LITERALS in the PREPARE ATTRIBUTES clause – Or set LITERALREPLACEMENT in the ODBC initialization file – Or set the keyword enableLiteralReplacement=’YES’ in the JCC Driver  Lookup Sequence – Original SQL with literals is looked up in the cache – If not found, literals are replaced and new SQL is looked up in the cache • Additional match on literal usability • Can only match with SQL stored with same attribute, not parameter marker – If not found, new SQL is prepared and stored in the cache 11 © 2011 IBM Corporation
  • 12. Literal Replacement …  Example: Statement Cache (DSC) SELECT NAME FROM CUSTOMER WHERE ... SELECT BALANCE FROM CUSTOMER WHERE ACCOUNT_NUMBER = 123456 SQL statement comes in ... 12 © 2011 IBM Corporation
  • 13. Literal Replacement …  Example: Statement Cache (DSC) SELECT NAME FROM CUSTOMER WHERE ... SELECT BALANCE FROM CUSTOMER find match? WHERE ACCOUNT_NUMBER = 123456 First lookup 13 © 2011 IBM Corporation
  • 14. Literal Replacement …  Example: Statement Cache (DSC) SELECT NAME FROM CUSTOMER WHERE ... SELECT BALANCE FROM CUSTOMER WHERE ACCOUNT_NUMBER = 123456 NO 14 © 2011 IBM Corporation
  • 15. Literal Replacement …  Example: Statement Cache (DSC) SELECT NAME FROM CUSTOMER WHERE ... SELECT BALANCE FROM CUSTOMER find match? WHERE ACCOUNT_NUMBER = & - Replace literal with & and look up DSC again 15 © 2011 IBM Corporation
  • 16. Literal Replacement …  Example: Statement Cache (DSC) SELECT NAME FROM CUSTOMER WHERE ... SELECT BALANCE FROM CUSTOMER WHERE ACCOUNT_NUMBER = & NO 16 © 2011 IBM Corporation
  • 17. Literal Replacement …  Example: Statement Cache (DSC) SELECT NAME FROM CUSTOMER WHERE ... SELECT BALANCE FROM CUSTOMER SELECT BALANCE FROM CUSTOMER WHERE ACCOUNT_NUMBER = & WHERE ACCOUNT_NUMBER = & - PREPARE and save into DSC (note that PREPARE is done on & “version”, not on original statement with literal) 17 © 2011 IBM Corporation
  • 18. Literal Replacement …  Example: Statement Cache (DSC) SELECT NAME FROM CUSTOMER WHERE ... SELECT BALANCE FROM CUSTOMER SELECT BALANCE FROM CUSTOMER WHERE ACCOUNT_NUMBER = 678900 WHERE ACCOUNT_NUMBER = & - new statement (new literal) 18 © 2011 IBM Corporation
  • 19. Literal Replacement …  Example: Statement Cache (DSC) SELECT NAME FROM CUSTOMER WHERE ... SELECT BALANCE FROM CUSTOMER SELECT BALANCE find match? FROM CUSTOMER WHERE ACCOUNT_NUMBER = 678900 WHERE ACCOUNT_NUMBER = & 19 © 2011 IBM Corporation
  • 20. Literal Replacement …  Example: Statement Cache (DSC) SELECT NAME FROM CUSTOMER WHERE ... SELECT BALANCE FROM CUSTOMER SELECT BALANCE FROM CUSTOMER WHERE ACCOUNT_NUMBER = 678900 WHERE ACCOUNT_NUMBER = & NO 20 © 2011 IBM Corporation
  • 21. Literal Replacement …  Example: Statement Cache (DSC) SELECT NAME FROM CUSTOMER WHERE ... SELECT BALANCE FROM CUSTOMER SELECT BALANCE find match? FROM CUSTOMER WHERE ACCOUNT_NUMBER = & WHERE ACCOUNT_NUMBER = & - Replace literal with & and look up DSC again 21 © 2011 IBM Corporation
  • 22. Literal Replacement …  Example: Statement Cache (DSC) SELECT NAME FROM CUSTOMER WHERE ... SELECT BALANCE FROM CUSTOMER SELECT BALANCE FROM CUSTOMER WHERE ACCOUNT_NUMBER = & WHERE ACCOUNT_NUMBER = & - Match found :) avoids PREPARE 22 © 2011 IBM Corporation
  • 23. Literal Replacement …  Performance Expectation – Using parameter marker still provides best performance – Biggest performance gain for repeated SQL with different literals – NOTE: Access path is not optimized for literals • True for parameter markers/host variables today • Need to use REOPT for that purpose 23 © 2011 IBM Corporation
  • 24. Histogram Statistics (DB2 9)  RUNSTATS will produce equal-depth histogram – Each quantile (range) will have approx same number of rows • Not same number of values – Another term is range frequency  Example • 1, 3, 3, 4, 4, 6, 7, 8, 9, 10, 12, 15 (sequenced) – Lets cut that into 3 quantiles. • 1, 3, 3, 4 ,4 6,7,8,9 10,12,15 Seq No Low Value High Value Cardinality Frequency 1 1 4 3 5/12 2 6 9 4 4/12 3 10 15 3 3/12 24 © 2011 IBM Corporation
  • 25. Histogram Statistics Notes  RUNSTATS – Maximum 100 quantiles for a column – Same value columns WILL be in the same quantile – Quantiles will be similar size but: • Will try to avoid big gaps inside quantiles • Highvalue and lowvalue may have separate quantiles • Null WILL have a separate quantile  Supports column groups as well as single columns  Think “frequencies” for high cardinality columns 25 © 2011 IBM Corporation
  • 26. Histogram Statistics Example  Customer uses INTEGER (or VARCHAR) for YEAR-MONTH WHERE YEARMONTH BETWEEN 200601 AND 200612 • Assuming data for 2006 & 2007 – FF = (high-value – low-value) / (high2key – low2key) – FF = (200612 – 200601) / (200711 – 200602) – 10% of rows estimated to return Data Distribution - Even Distribution 450000 400000 350000 Data assumed as evenly 300000 distributed between low 250000 Year/Month 200000 and high range 150000 100000 50000 0 200601 200712 26 © 2011 IBM Corporation
  • 27. Histogram Statistics Example • Example (cont.) – Data only exists in ranges 200601-12 & 200701-12 • Collect via histograms – 45% of rows estimated to return Data Distribution - Histograms 1400000 1200000 1000000 800000 Year/Month 600000 400000 200000 0 2006 01-12 200613 -----> -----> 200700 2007 01-12 No data between WHERE YEARMONTH BETWEEN 200601 AND 200612 200613 & 200700 27 © 2011 IBM Corporation
  • 28. Autonomic Statistics Solution Overview  Autonomic Statistics is implemented through a set of Stored Procedures – Stored procedures are provided to enable administration tools and packaged applications to automate statistics collection. • ADMIN_UTL_MONITOR • ADMIN_UTL_EXECUTE • ADMIN_UTL_MODIFY – Working together, these SP’s • Determine what stats to collect • Determine when stats need to be collected • Schedule and Perform the stats collection • Records activity for later review – See Chapter 11 "Designing DB2 statistics for performance" in the DB2 10 for z/OS Performance Monitoring and Tuning Guide for details on how to configure autonomic monitoring directly within DB2. 28 © 2011 IBM Corporation
  • 29. RUNSTATS Simplification/Performance Overview  RUNSTATS options to SET/UPDATE/USE a stats profile – Predefine set of options (one per table) • RUNSTATS … TABLE tbl COLUMN(C1) … SET PROFILE – Alternatively use SET PROFILE FROM EXISTING STATS • RUNSTATS … TABLE tbl COLUMN(C5)… UPDATE PROFILE • RUNSTATS … TABLE tbl USE PROFILE  New option for page-level sampling – But what percentage of sampling to use? • RUNSTATS … TABLE tbl TABLESAMPLE SYSTEM AUTO 29 © 2011 IBM Corporation
  • 30. DB2 10 - Minimizing Optimizer Challenges  Potential causes of sub-optimal plans – Insufficient statistics – Unknown literal values used for host variables or parameter markers  DB2 10 Optimizer will evaluate the risk for each predicate – For example: WHERE BIRTHDATE < ? • Could qualify 0-100% of data depending on literal value used – As part of access path selection • Compare access paths with close cost and choose lowest risk plan 30 © 2011 IBM Corporation
  • 31. Improvements to predicate application  Major enhancements to OR and IN predicates – Improved performance for AND/OR combinations and long IN-lists • General performance improvement to stage 1 predicate processing – IN-list matching • Matching on multiple IN-lists • Transitive closure support for IN-list predicates • List prefetch support – SQL pagination • Single index matching for complex OR conditions  Many stage 2 expressions to be executed at stage 1 – Stage 2 expressions eligible for index screening • Not applicable for list prefetch • e.g. WHERE SUBSTR(SSN,8,4) = :hv, WHERE C1*2 > :hv ... – Externalized in DSN_FILTER_TABLE column PUSHDOWN 31 © 2011 IBM Corporation
  • 32. IN-list Table - Table Type 'I' and Access Type 'IN'  The IN-list predicate will be represented as an in-memory table if: – List prefetch is chosen, OR – More than one IN-list is chosen as matching. – The EXPLAIN output associated with the in-memory table will have: • New Table Type: TBTYPE – ‘I’ • New Access Type: ACTYPE – ‘IN’ SELECT * FROM T1 WHERE T1.C1 IN (?, ?, ?); QBNO PLANNO METHOD TNAME ACTYPE MC ACNAME QBTYPE TBTYPE PREFETCH 1 1 0 DSNIN001(01) IN 0 SELECT I 1 2 1 T1 I 1 T1_IX_C1 SELECT T L 32 © 2011 IBM Corporation
  • 33. IN-list Predicate Transitive Closure (PTC) The idea: SELECT * If A = B and B = C FROM T1, T2 WHERE T1.C1 = T2.C1 then A = C AND T1.C1 IN (?, ?, ?) AND T2.C1 IN (?, ?, ?)  Optimizer can generate this predicate via PTC  Without IN-list PTC (DB2 9) – Optimizer will be unlikely to consider T2 as the first table accessed  With IN-list PTC (DB2 10) – Optimizer can choose to access T2 or T1 first. 33 © 2011 IBM Corporation
  • 34. SQL Pagination (range list index scan)  Targets 2 types of queries – Cursor scrolling (pagination) SQL • Retrieve next n rows – Common in COBOL/CICS and any screen scrolling application • Not to be confused with “scrollable cursors” – Complex OR predicates against the same columns • Common in SAP  In both cases: – The OR (disjunct) predicate refers to a single table only. – Each OR predicate can be mapped to the same index. – Each disjunct has at least one matching predicate. 34 © 2011 IBM Corporation
  • 35. Simple scrolling – Index matching and ORDER BY • Scroll forward to obtain the next 20 rows – Assumes index is available on (LASTNAME, FIRSTNAME) – WHERE clause may appear as: WHERE (LASTNAME='JONES' AND FIRSTNAME>'WENDY') OR (LASTNAME>'JONES') ORDER BY LASTNAME, FIRSTNAME; – DB2 10 supports • Single matching index access with sort avoided – DB2 9 requires • Multi-index access, list prefetch and sort • OR, extra predicate (AND LASTNAME >= ‘JONES’) for matching single index access and sort avoidance 35 © 2011 IBM Corporation
  • 36. Complex OR predicates against same index • Given WHERE clause – And index on one or both columns WHERE (LASTNAME='JONES' AND FIRSTNAME='WENDY') OR (LASTNAME='SMITH' AND FIRSTNAME='JOHN'); • DB2 9 requires – Multi-index access with list prefetch • DB2 10 supports – Matching single index access – no list prefetch – Or, Multi-index access with list prefetch 36 © 2011 IBM Corporation
  • 37. Minimizing impact of RID failure  RID overflow can occur for – Concurrent queries each consuming shared RID pool – Single query requesting > 25% of table or hitting RID pool limit  DB2 9 will fallback to tablespace scan*  DB2 10 will continue by writing new RIDs to workfile – Work-file usage may increase • Mitigate by increasing RID pool size (default increased in DB2 10). • MAXTEMPS_RID zparm for maximum WF usage for each RID list * Hybrid join can incrementally process. Dynamic Index ANDing will use WF for failover. 37 © 2011 IBM Corporation
  • 38. Removal Of Parallelism Restrictions  Allow parallelism if a parallel group contains a work file – DB2 generates temporary work file when view or table expression is materialized – This type of work file can not be shared among child tasks in previous releases of DB2, hence parallelism is disabled – DB2 10 will make the work file shareable • only applies to CP mode parallelism and no full outer join case  Support parallelism for multi-row fetch (READ ONLY cursors) – In previous releases parallelism is disabled for the last (top level query block) select – Example: SELECT * FROM CUSTOMER; 38 © 2011 IBM Corporation
  • 39. Parallelism Enhancements - Effectiveness  Previous Releases of DB2 may use Key Range Partitioning – Key Ranges Decided at Bind Time – Based on Statistics (low2key, high2key, column cardinality) • Assumes uniform data distribution • Histograms can help – But rarely collected – If Statistics are outdated or data is not uniformly distributed what happens to performance? 39 © 2011 IBM Corporation
  • 40. Parallelism Enhancements - Effectiveness  Previous Releases of DB2 may use Key Range Partitioning – Key Ranges Decided at Bind Time – Based on Statistics (low2key, high2key, column cardinality) • Assumes uniform data distribution • Histograms can help – But rarely collected – If Statistics are outdated or data is not uniformly distributed what happens to performance? 40 © 2011 IBM Corporation
  • 41. Key range partition – before DB2 10 Large_T SELECT * 10,000,000 rows FROM Medium_T M, C2 C3 Large_T L WHERE M.C2 = L.C2 AND M.C1 BETWEEN (CURRENTDATE-90) AND CURRENTDATE Medium_T 10,000 rows Workfile C1 C2 12-31-2007 3-degree parallelism 09-30-2007 08-31-2007 SORT 2,500 rows ON C2 25% 5,000,000 rows 05-01-2007 04-30-2007 01-01-2007 Partition the records according to the key ranges M.C1 is date column, assume currentdate is 8-31-2007, after the between predicate is applied, only rows with date between 06-03-2007 and 8-31-2007 survived, but optimizer chops up the key ranges within the whole year after the records are sorted :-( 41 © 2011 IBM Corporation
  • 42. Parallelism Effectiveness – Record range  DB2 10 can use Dynamic record range partitioning – Results divided into ranges with equal number of records – Division doesn't have to be on the key boundary • Unless required for group by or distinct function – Record range partitioning is dynamic • no longer based on the key ranges decided at bind time – Now based on number of composite records and parallel degree • Data skew, out of date statistics etc. will not have any effect on performance 42 © 2011 IBM Corporation
  • 43. Dynamic record range partition SELECT * Large_T FROM Medium_T M, 10,000,000 rows C2 C3 Large_T L WHERE M.C2 = L.C2 AND M.C1 BETWEEN (CURRENTDATE-90) AND CURRENTDATE Medium_T 10,000 rows C1 C2 3-degrees parallelism Workfile SORT ON C2 2,500 rows Partition the records - each range has same number of records 43 © 2011 IBM Corporation
  • 44. Parallelism Effectiveness - Straw Model  Previous releases of DB2 divide the number of keys or pages by the number representing the parallel degree – One task is allocated per degree of parallelism – The range is processed and the task ends – Tasks may take different times to process  DB2 10 can use the Straw Model workload distribution method – More key or page ranges will be allocated than the number of parallel degrees – The same number of tasks as before are allocated (same as degree) – Once a task finishes it’s smaller range it will process another range – Even if data is skewed this new process should make processing faster 44 © 2011 IBM Corporation
  • 45. STRAW Model SELECT * FROM Medium_T M WHERE M.C1 BETWEEN 20 AND 50 Medium_T Medium_T 10,000 rows 10,000 rows C1 C2 Task 3 C1 C2 100 100 Task 2 Task 1 50 50 47 44 40 41 38 35 30 32 29 26 20 degree=3 23 degree = 3 20 #ranges=10 0 0 index on C1 index on C1 Divided in key ranges before DB2 10 Divided in key ranges with Straw Model 45 © 2011 IBM Corporation
  • 46. Agenda  DB2 10 Optimizer – Plan management – Hints/Bind options – Explain – Dynamic Statement Caching – Optimizer costing – Runtime query performance  DB2 10 SQL/Application Enablement – SQL table functions and SQL scalar functions – Implicit casting – Datetime constants / TIMESTAMP WITH TIME ZONE – Extended indicator variables 46 © 2011 IBM Corporation
  • 47. SQL table functions  DB2 10 supports simple SQL table functions – Can use single RETURN control statement in function body – Can define parameter as: distinct type, transition table – No package is generated; reference is replaced similar to inline SQL scalar CREATE FUNCTION TRYTABLE(P1 CHAR(3)) RETURNS TABLE(FIRSTNAME VARCHAR(12), LASTNAME VARCHAR(15)) RETURN SELECT FIRSTNME, LASTNAME FROM DSN8A10.EMP WHERE WORKDEPT = P1; SELECT * FROM TABLE(TRYTABLE('A00')) X; +--------------------------------+ | FIRSTNAME | LASTNAME | +--------------------------------+ | CHRISTINE | HAAS | | VINCENZO | LUCCHESI | | SEAN | O'CONNELL | | DIAN | HEMMINGER | | GREG | ORLANDO | +--------------------------------+ 47 © 2011 IBM Corporation
  • 48. SQL non-inline scalar functions DB2 10 differentiates between inline SQL scalar and non-inline SQL scalar functions – Inline: functions with the same capability as in prior releases • No package is generated; reference is replaced by the expression – Non-inline • Package is created (note REBIND PACKAGE rebinds only SQL in function body; does not rebind SQL control statements – use ALTER FUNCTION REGENERATE). e.g.: CREATE FUNCTION TEST_FN(P1 TABLE LIKE EMP AS LOCATOR) RETURNS INT LANGUAGE SQL … BEGIN DECLARE VAR1 INT; SET VAR1 = (SELECT ID FROM TABLE(P1 LIKE EMP)); IF VAR1 <> 42 THEN INSERT INTO REPORT VALUES(...); END IF; RETURN VAR1; END# 48 © 2011 IBM Corporation
  • 49. SQL non-inline scalar functions DB2 10 differentiates between inline SQL scalar and non-inline SQL scalar functions – Inline: functions with the same capability as in prior releases • No package is generated; reference is replaced by the expression – Non-inline • Package is created (note REBIND PACKAGE rebinds only SQL in function body; does not rebind SQL control statements – use ALTER FUNCTION REGENERATE). e.g.: CREATE FUNCTION TEST_FN(P1 TABLE LIKE EMP AS LOCATOR) RETURNS INT LANGUAGE SQL … BEGIN DECLARE VAR1 INT; SET VAR1 = (SELECT ID FROM TABLE(P1 LIKE EMP)); REBIND PACKAGE ALTER … REGENERATE IF VAR1 <> 42 THEN INSERT INTO REPORT VALUES(...); END IF; RETURN VAR1; END# 49 © 2011 IBM Corporation
  • 50. SQL scalar function versioning Similar to Native SQL Stored Procedure versioning: -- Create a non-inline SQL scalar function with initial version V1 CREATE FUNCTION TRYVER() RETURNS VARCHAR(20) VERSION V1 LANGUAGE SQL DETERMINISTIC ... RETURN 'Running version1'; 50 © 2011 IBM Corporation
  • 51. SQL scalar function versioning Similar to Native SQL Stored Procedure versioning: -- Create a non-inline SQL scalar function with initial version V1 CREATE FUNCTION TRYVER() RETURNS VARCHAR(20) VERSION V1 LANGUAGE SQL DETERMINISTIC ... RETURN 'Running version1'; -- Add a second version V2 of the function created above ALTER FUNCTION TRYVER ADD VERSION V2 () RETURNS VARCHAR(20) LANGUAGE SQL DETERMINISTIC ... RETURN 'Running version2'; 51 © 2011 IBM Corporation
  • 52. SQL scalar function versioning Similar to Native SQL Stored Procedure versioning: -- Create a non-inline SQL scalar function with initial version V1 CREATE FUNCTION TRYVER() RETURNS VARCHAR(20) VERSION V1 LANGUAGE SQL DETERMINISTIC ... RETURN 'Running version1'; -- Add a second version V2 of the function created above ALTER FUNCTION TRYVER ADD VERSION V2 () RETURNS VARCHAR(20) LANGUAGE SQL DETERMINISTIC ... RETURN 'Running version2'; -- Invoke the function SELECT TRYVER() FROM SYSIBM.SYSDUMMY1; result: Running version1 52 © 2011 IBM Corporation
  • 53. SQL scalar function versioning Similar to Native SQL Stored Procedure versioning: -- Create a non-inline SQL scalar function with initial version V1 CREATE FUNCTION TRYVER() RETURNS VARCHAR(20) VERSION V1 LANGUAGE SQL DETERMINISTIC ... RETURN 'Running version1'; -- Add a second version V2 of the function created above ALTER FUNCTION TRYVER ADD VERSION V2 () RETURNS VARCHAR(20) LANGUAGE SQL DETERMINISTIC ... RETURN 'Running version2'; -- Invoke the function SELECT TRYVER() FROM SYSIBM.SYSDUMMY1; result: Running version1 -- Now make V2 version the active version ALTER FUNCTION TRYVER ACTIVATE VERSION V2; 53 © 2011 IBM Corporation
  • 54. SQL scalar function versioning Similar to Native SQL Stored Procedure versioning: -- Create a non-inline SQL scalar function with initial version V1 CREATE FUNCTION TRYVER() RETURNS VARCHAR(20) VERSION V1 LANGUAGE SQL DETERMINISTIC ... RETURN 'Running version1'; -- Add a second version V2 of the function created above ALTER FUNCTION TRYVER ADD VERSION V2 () RETURNS VARCHAR(20) LANGUAGE SQL DETERMINISTIC ... RETURN 'Running version2'; -- Invoke the function SELECT TRYVER() FROM SYSIBM.SYSDUMMY1; result: Running version1 -- Now make V2 version the active version ALTER FUNCTION TRYVER ACTIVATE VERSION V2; -- Invoke the function again SELECT TRYVER() FROM SYSIBM.SYSDUMMY1; result: Running version2 54 © 2011 IBM Corporation
  • 55. Implicit cast support for strings and numerics  Character or graphic strings and numeric data types are compatible (except for LOBs and non-Unicode graphic strings)  DB2 can perform an implicit cast between those data types  You can directly insert or compare the values of those data types: e.g.: ... WHERE EMP_ID = '100', INSERT INTO(CHARCOL) VALUES(123), etc.  Implicit cast result data type is determined based on the following table: 55 © 2011 IBM Corporation
  • 56. Date-time constants DB2 10 supports ANSI/ISO SQL standard form of a datetime constant: DATE '18.01.1977' -- date (EUR format) TIME '15.30.00' -- time (EUR format) TIMESTAMP '2007-05-14 11:55:00.1234' -- timestamp TIMESTAMP '2007-05-14T11:55:00.1234' -- timestamp TIMESTAMP '2007-05-14 11:55:00.1234+08:00' -- timestamp with time zone UTC+8 TIMESTAMP '2007-05-14 11.55.00Z' -- timestamp with time zone UTC SELECT … WHERE DATECOL > '2011-01-01' -- date column compared to string literal SELECT … WHERE DATECOL > DATE'2011-01-01' -- date column compared with date literal SELECT HEX( DATE'2010-08-06' ) -- display date constant FROM SYSIBM.SYSDUMMY1; -- result: 20100806 -- i.e. DATE'2010-08-06' is a 4-byte date SELECT HEX( '2010-08-06' ) -- display character string constant FROM SYSIBM.SYSDUMMY1; -- result: F2F0F1F060F0F860F0F6 -- i.e. '2010-08-06' is a 10-byte string 56 © 2011 IBM Corporation
  • 57. Extended indicator variables There are frequent situations where an application needs to insert or update data only for a subset of columns for a given table. The application developers are faced with a dilemma of how to provide an application that could handle all possible insert or update requests when it is not known which columns are being inserted to or updated until application execution time:  “custom” dynamic SQL queries  Code all combinations ahead of time  One SQL but application must determine values for all needed columns  New extended indicator variable values:  -5 means DEFAULT  -7 means UNASSIGNED (treat as if it was not specified)  -1, -2, -3, -4, -6 means NULL  EXTENDEDINDICATOR BIND/REBIND PACKAGE option  WITH EXTENDED INDICATORS PREPARE attribute 57 © 2011 IBM Corporation
  • 58. Extended indicator variables Special extended indicator variable values can be specified only for host variables (parameter markers) that appear in:  Set assignment list of an UPDATE operation in UPDATE or MERGE statements  The values list of an INSERT operation in INSERT or MERGE statements  The select list of an INSERT statement in the FROM clause of the SELECT statement  The source-table parameter of a MERGE statement Furthermore, the host variable cannot be part of an expression other than an explicit cast (if the target column is not nullable, the explicit cast can be only to the same data type as the target column). 58 © 2011 IBM Corporation
  • 59. Extended indicator variables - Example ... memset(&hv_indicators, 0, sizeof(hv_indicators)); strcpy(hv_name, "Michael"); /* use value */ strcpy(hv_country, "Australia"); /* use value */ hv_indicators.hvi_name = -7; /* skip update */ hv_indicators.hvi_country = -5; /* use DEFAULT */ hv_indicators.hvi_city = -7; /* skip update */ hv_indicators.hvi_zip = -7; /* skip update */ EXEC SQL UPDATE TRYINDVAR SET NAME = :hv_name:hvi_name ,COUNTRY = :hv_country:hvi_country ,CITY = :hv_city:hvi_city ,ZIP = :hv_zip:hvi_zip ; 59 © 2011 IBM Corporation
  • 60. Timestamp with TIME ZONE New data type: TIMESTAMP WITH TIME ZONE Timestamp plus time zone: 2010-08-06 12.30.00-8:00 (UTC-8) ( UTC is 2010-08-06 20.30.00 - subtract UTC part to convert) Valid range for time zone: SQL standard specification: -12:59 to +14:00 W3C XML standard for XSD schema definition specifies: -14:00 to +14:00 Because the valid range for a CURRENT TIME ZONE special register is -24:00 to +24:00, the valid range for the time zone offset was chosen to also be -24:00 to 24:00 for compatibility. 60 © 2011 IBM Corporation
  • 61. Timestamp with TIME ZONE Determining the implicit TIME ZONE: DSNHDECP parameter IMPLICIT_TIMEZONE and a new special register SESSION TIME ZONE aid in determining the implicit time zone. The implicit time zone is determined as follows: If IMPLICIT_TIMEZONE is not specified or is specified as CURRENT, the implicit time zone is the value of the CURRENT TIME ZONE special register. If IMPLICIT_TIMEZONE is specified as SESSION, the implicit time zone is the value of the SESSION TIME ZONE special register. If IMPLICIT_TIMEZONE is specified as a character string in the format of '±th:tm', the implicit time zone is the time zone value represented by that character string. 61 © 2011 IBM Corporation
  • 62. Time zone specific expressions You can use time zone specific expressions to adjust timestamp values and character-string or graphic-string representations of timestamp values to specific time zones AT LOCAL – value adjusted for the local time zone using SESSION TIME ZONE special register value. AT TIME ZONE ‘±th:tm’ - value adjusted for the specified time zone 62 © 2011 IBM Corporation
  • 63. Time zone specific expressions - Examples -- establish session time zone as UTC+2 SET SESSION TIMEZONE = '+2:00'; 63 © 2011 IBM Corporation
  • 64. Time zone specific expressions - Examples SET SESSION TIMEZONE = '+2:00'; -- adjust column/literal to LOCAL SELECT '2007-05-14-11:55:00.0 -8:00' AT LOCAL FROM SYSIBM.SYSDUMMY1; -- result: 2007-05-14-21.55.00.000000+02:00 64 © 2011 IBM Corporation
  • 65. Time zone specific expressions - Examples SET SESSION TIMEZONE = '+2:00'; -- adjust column/literal to LOCAL SELECT '2007-05-14-11:55:00.0 -8:00' AT LOCAL FROM SYSIBM.SYSDUMMY1; -- result: 2007-05-14-21.55.00.000000+02:00 -- how did it get calculated: -- 1) … 11:55:00.0 -8:00 is 19:55 in UTC -- 2) SESSION TIMEZONE has '+2:00' -- so we add that to UTC: 19:55 + 2:00 = 21:55 65 © 2011 IBM Corporation
  • 66. Time zone specific expressions - Examples SELECT '2007-05-14-11:55:00.0 -8:00' AT TIME ZONE '+00:00' FROM SYSIBM.SYSDUMMY1; -- result: 2007-05-14-19.55.00.000000+00:00 -- this is UTC SELECT '2007-05-14-11:55:00.0 -8:00' AT TIME ZONE ('-'||'7'||':'||'00') FROM SYSIBM.SYSDUMMY1; -- result: 2007-05-14-12.55.00.000000-07:00 66 © 2011 IBM Corporation
  • 67. Time zone specific scalar functions The TIMESTAMP_TZ function returns a TIMESTAMP WITH TIME ZONE value from the input arguments. Examples (assume implicit time zone is '+8:00') TIMESTAMP_TZ(TIMESTAMP '2007-05-14-12.55.00') ==> 2007-05-14-12.55.00+08:00 TIMESTAMP_TZ(TIMESTAMP '2007-05-14-12.55.00+2:00') ==> 2007-05-14-12.55.00+02:00 TIMESTAMP_TZ(TIMESTAMP '2007-05-14-12.55.00','-7:00') ==> 2007-05-14-12.55.00-07:00 67 © 2011 IBM Corporation
  • 68. Time zone – Application programming Declarations generated by DCLGEN: For Java: TIMESTAMP(p) WITH TIME ZONE ==> java.sql.TimestampTZ For more on SQL and Application Enablement, see “DB2 10 for z/OS Technical Overview” (SG24-7892-00) 68 © 2011 IBM Corporation
  • 69. Thank you ! © 2011 IBM Corporation