SlideShare a Scribd company logo
1 of 39
Download to read offline
#IDUG
Efficient Monitoring & Tuning of Dynamic SQL
Namik Hrle
IBM
April 16, 2014 | Platform: DB2 for z/OS
2
#IDUG
© Copyright IBM Corporation 2012. 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 DB2 for 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.
Disclaimer
3
#IDUG
Monitoring
Systems tuning
Applications tuning
Agenda
4
#IDUG
program A
program B
COMMIT
EXECUTE S
EDM
Statement Pool
thread A
thread B
EXECUTE S
sqlcode=0
no effect on
prepared statements
sqlcode=0
EXECUTE S
sqlcode=0
EXECUTE S
sqlcode=0
2
3
1
4
5
sqlcode=0
PREPARE S
prepared statementprepared statement SS
SKDSSKDS
SS
sqlcode=0
full prepare
PREPARE S
prepared statementprepared statement SS
sqlcode=0
short prepare
avoided
prepare
CACHEDYN=YES and KEEPDYNAMIC=YES
5
#IDUG
Monitoring
– Global statements cache
– Local statements cache
– Specific cached statements
Systems tuning
Applications tuning
Agenda
6
#IDUG
Prepare requests QXPREP + QXSTIPRP 100005
Not found in cache QXSTNFND 5005
Full prepares QISEDSI 5003
Found in cache QXSTFND 95000
Short prepares QISEDSG - QISEDSI 95000
Global cache hit ratio
QISEDSG - QISEDSI
QISEDSG
95%
Monitoring Global Statements Cache
7
#IDUG
Implicit prepares QXSTIPRP 20000
Avoided prepares QXSTNPRP 200000
Statements invalidated QXSTDEXP+QXSTDINV 8010
MAXKEEPD exceeded QXSTDEXP 8000
DROP/ALTER/REVOKE/RUNSTATS QXSTDINV 10
Local cache hit ratio
QXSTNPRP
QXSTNPRP+QXSTIPRP 91%
Monitoring Local Statements Cache
8
#IDUG
EXPLAIN support
– STMTCACHE ALL
– STMTCACHE STMTID statement-id
– STMTCACHE STMTTOKEN statement-token
– Special register: CURRENT EXPLAIN MODE (1)
DB2 Trace support
– IFCID 316 – externalizes execution statistics
– IFCID 317 – externalizes full statement text
– IFCID 318 – controls type collected statistics
(1) – available as of DB2 10
Monitoring Cached Statements
9
#IDUG
Explains a set of cached statements
Populates table DSN_STATEMENT_CACHE_TABLE
– Qualified by current SQLID value
One row for each cached statement
– All statements included if EXPLAIN executed by SYSADM or SQLADM
– Otherwise only statements with matching authorization
Reports the statement’s execution statistics
– Analogous to IFCIDs 316 and 317
– Statistics controlled and reset by means of IFCID 318
– Details documented later in the presentation
Member specific
– Need to be executed on all members
EXPLAIN STMTCACHE ALL
10
#IDUG
Explains a specific statement identified by its id
– Can be either integer constant or host variable
– It is assigned by DB2 at prepare time and it uniquely identifies cached
statement
– It can be retrieved via IFI call from IFCIDs 316 and 124
• also available in IFCIDs 172, 196, 337
– Value reported in PLAN_TABLE’s QUERYNO column
EXPLAIN populates following tables:
– PLAN_TABLE, DSN_STATEMNT_TABLE, DSN_FUNCTION_TABLE
• Identifies actual access path details for specified statement providing it is still in
the cache
– DSN_STATEMENT_CACHE_TABLE
• Reports execution statistics for the specified statement
EXPLAIN STMTCACHE STMTID
11
#IDUG
Explains a specific statement identified by its token
– Can be either string constant or host variable
• Up to 240 characters
– It is assigned by application at prepare time
• RRSAF SET_ID function for local applications
• sqlseti API for remote applications
– Value reported in PLAN_TABLE’s STMTTOKEN column
EXPLAIN populates following tables:
– PLAN_TABLE, DSN_STATEMNT_TABLE, DSN_FUNCTION_TABLE
• Identifies actual access path details for specified statement providing it is still
in the cache
– DSN_STATEMENT_CACHE_TABLE
• Reports execution statistics for the specified statement.
–
EXPLAIN STMTCACHE STMTTOKEN
12
#IDUG
Prior to DB2 10, performance monitoring and tuning of dynamic SQL
statements was not ideally suited for application programmers
– There is no equivalent of EXPLAIN bind option that is provided for static SQL
• Each monitored statements need to be changed (adding STMTTOKEN)
• Alternatively, time consuming and complex analysis of performance traces or
DSN_STATEMENT_CACHE_TABLE is needed
– Statement could be purged from the cache before having a chance to retrieve its
performance characteristics
DB2 10 addresses these challenges
– Application programmers can turn on/off collection of access path details and
performance data for dynamic SQL statements
• SET CURRENT EXPLAIN MODE = NO | YES | EXPLAIN
• JCC connection property: currentExplainMode
• ODBC/CLI:
– keyword DB2Explain in db2cli.ini file, or
– Setting SQL_ATTR_DB2EXPLAIN with SQLSetConnectAttr() function
– For YES and EXPLAIN, access path details are written in standard explain tables
• This also applies to CACHEDYN=NO and REOPT(ALWAYS) cases
– For YES, performance data are written in DSN_STATEMENTS_CACHE_TABLE
Special Register CURRENT EXPLAIN MODE
13
#IDUG
PLAN_TABLE
DSN_STATEMENT_
CACHE_TABLE
QUERYNO STMT_ID
• The key correlation value.
• DB2 generates the value when the statement got inserted into cache.
COLLID COLLID
● One of the constants:
➔ DSNDYNAMICSQLCACHE
➔
DSNEXPLAINMODEYES (1) (2)
➔
DSNEXPLAINMODEEXPLAIN (1) (2)
STMT_TOKEN STMT_TOKEN • Optionally present – only if specified by the application
BIND_TIME CACHED_TS (2) • The time when the statement got inserted into the cache.
TIMESTAMP
or
EXPLAIN_TIME (1)
EXPLAIN_TS (2)
• The time when EXPLAIN STMTCACHE was executed
• The same statement can have multiple entries in PLAN_TABLE and
DSN_STATEMENT_CACHE_TABLE but wih different TIMESTAMP
i.e. EXPLAIN_TIME and EXPLAIN_TS values, respectively.
• As of DB2 10 TIMESTAMP is deprecated; use EXPLAIN_TIME
instead
(1) Available as of DB2 10
(2) For DSN_STATEMENT_CACHE_TABLE entries created by EXPLAIN STMTCACHE ALL, use CACHED_TS=BIND_TIME
For DSN_STATEMENT_CACHE_TABLE entries created by EXPLAIN MODE=YES|EXPLAIN, use EXPLAIN_TS=BIND_TIME
Correlating EXPLAIN Tables
14
#IDUG
IFCID 316
– Externalises statement-level statistics
– Prior to DB2 10, the statistics available for statements that are found in the
dynamic statements cache at retrieval time
• Retrieved via IFI READS request
• Require active Monitor Trace Class 1
– In DB2 10 the statistics is also available for statements that were removed
from the dynamic statements cache
• These are retrieved via IFI READA request or by post-processing SMF/GTF data
• Require active Monitor trace Class 29
• Side remark: IFCID 400 as an analogue to IFCID 316 is introduced for static SQL
statements
IFCID 317
– Complements IFCID 316
– Provides full statement text for a give statement ID
For detailed usage information see DB2 documentation library, e.g. 'Managing Performance' manual in DB2 10
DB2 Trace Support
15
#IDUG
IFCID 318
– This is a switch that controls what gets externalised in IFCID 316
– Performance Trace user defined Class, e.g. 30
• DB2 10 adds Monitor trace Class 29
– Accounting Class 3 required for suspension timers
– Statistics reset at performance class stop
– Side remark: IFCID 401 as an analogue to IFCID 318 is introduced for static SQL
statements. Included in Monitor trace Class 29
Techniques to limit the number of reported statements
– Prior to DB2 10, the result set can be limited to the statements that:
• exceeded a given threshold, e.g. number of executions, number of getpages, …
• belong to a top list by a given performance indicator, e.g. elapsed time, CPU, time, …
• match a given statement ID (single statement retrieval)
– As of DB2 10 the result set can be also limited to the statements that:
• were executed for a given end-user ID, transaction/application ID, workstation name
• refer to a specific table
• were prepared after specific time
• were re-executed after specific time
–
DB2 Trace Support
16
#IDUG
DSN_STATEMENT_CACHE_TABLE IFCID
Statement ID (generated by DB2) STMT_ID QW0316ID
Statement token (provided by application) STMT_TOKEN QW0316UI
Collection ID COLLID
Package/DBRM that performed PREPARE PROGRAM_NAME QW0316X1
Precompiler line number for PREPARE statement LINES QW0316LX
Transaction name QW0316X2
Primary authorization ID who did initial prepare PRIMAUTH QW0316X3
Current SQLID of user who did initial prepare CURSQLID QW0316X4
CURRENT SCHEMA special register content SCHEMA QW0316SC
Data sharing member name (1)
GROUP_MEMBER QW0316MBR
Table qualifier QW0316QD
Table name QW0316TD
First 60 characters of statement text QW0316ST
Full statement text STMT_TEXT QW0317TX
Literal replacement ('&') indication (1)
LITERAL_REPL QW0317LR
(1) – available as of DB2 10
Statement Level Indicators: Correlation
17
#IDUG
DSN_STATEMENT_CACHE_TABLE IFCID
Timestamp of initial prepare CACHED_TS QW0316TM
Timestamp of statistics last update QW0316UT
Timestamp of last IFCID 318 activation STAT_TS QW0316TS
Status: valid or reason for invalidation
(LRU,RUNSTATS,REVOKE,DROP/ALTER)
INV_LRU, INV_RUNSTATS
INV_REVOKE, INV_DROPALT
QW0316FL
Value of QUALIFIER bind option BIND_QUALIFIER QW0316X5
Value of ISOLATION bind option BIND_ISO QW0316X6
Value of CURRENTDATA bind option BIND_CDATA QW0316X7
Value of DYNAMICRULES bind option BIND_DYNRL QW0316X8
Value of CURRENT DEGREE special register BIND_DEGRE QW0316X9
Value of CURRENT RULES special register BIND_SQLRL QW0316XA
Number of REBINDs due to REOPT(AUTO) BIND_RA_TOT
Value of REOPT option (1)
BIND_RO_TYPE
Value of CURRENT PRECISION special register QW0316XB
Cursor WITH HOLD identification BIND_CHOLD QW0316XC
(1) – available as of DB2 10
Statement Level Indicators: Status
18
#IDUG
DSN_STATEMENT_CACHE_TABLE IFCID
Locally cached copies currently used (1)
USERS QW0316US
Locally cached copies – total (1)
COPIES QW0316CP
Statement executions (1)
STAT_EXEC or STAT_EXECB(2)
QW0316NE
Synchronous reads (1)
STAT_SYNR or STAT_SYNRB(2)
QW0316NB
Synchronous writes (1)
STAT_WRIT or STAT_WRITB(2)
QW0316NW
Getpages (1)
STAT_GPAG or STAT_GPAGB(2)
QW0316NG
Rows examined (1)
STAT_EROW or STAT_EROWB(2)
QW0316NR
Rows processed (1)
STAT_PROW or STAT_PROWB(2)
QW0316NP
Sorts performed (1)
STAT_SORT or STAT_SORTB(2)
QW0316NS
Index scans performed (1)
STAT_INDX or STAT_INDXB(2)
QW0316NI
Tablespace scans performed (1)
STAT_RSCN or STAT_RSCNB(2)
QW0316NT
RID List failures: no storage (1)
STAT_RIDSTOR or STAT_RIDSTORB(2)
QW0316RS
RID List failures: limit exceeded (1)
STAT_RIDLIMIT or STAT_RIDLIMITB(2)
QW0316RT
Parallel groups created (1)
STAT_PGRP or STAT_PGRPB(2)
QW0316NL
(1) – available only if IFCID 318 is activated
(2) – as of DB2 10 use columns with suffix 'B' (BIGINT)
Statement Level Indicators: Statistics
19
#IDUG
DSN_STATEMENT_CACHE_TABLE IFCID
Elapsed time (1)
STAT_ELAP QW0316AE
CPU time (1)
STAT_CPU QW0316CT
Wait time for synchronous I/O (1) (2)
STAT_SUS_SYNIO QW0316W1
Wait time for locks (1) (2) (3)
STAT_SUS_LOCK QW0316W2
Wait time for synchronous execution unit
switch (1) (2) STAT_SUS_SWIT QW0316W3
Wait time for global locks (1) (2)
STAT_SUS_GLCK QW0316W4
Wait time for other agents reads (1) (2)
STAT_SUS_OTHR QW0316W5
Wait time for other agents writes (1) (2)
STAT_SUS_OTHW QW0316W6
Wait time for latches (1) (2) (4)
STAT_SUS_LATCH QW0316W7
Wait time for page latches (1) (2) (4)
STAT_SUS_PLATCH QW0316W8
Wait time for drain locks (1) (2) (4)
STAT_SUS_DRAIN QW0316W9
Wait time for releasing of claims (1) (2) (4)
STAT_SUS_CLAIM QW0316WA
Wait time for log writes (1) (2) (4)
STAT_SUS_LOG QW0316WB
(1) – available only if IFCID 318 is activated
(2) – available only Accounting Class 3 is activated
(3) – priot to DB2 10 the timer includes latches as well
(4) – available as of DB2 10
Statement Level Indicators: Timers
20
#IDUG
DB2 10 adds an indicator whether a statement is dynamic or static
to the following trace events:
Event IFCID
SQL statement end 58
SQL statement text at bind/prepare 63 and 350
Currently executing SQL statement 124
Deadlock details 172
Timeout details 196
Lock escalation details 337
The statement type indicator is also added to the applicable messages.
Statement Type Indicators
21
#IDUG
Monitoring
Systems tuning
– EDM storage
– Thread storage
– Controlling virtual storage consumption
– IBM DB2 Analytics Accelerator considerations
Applications tuning
Agenda
22
#IDUG
The dynamic statements are cached in the EDM Statement Pool which
belongs to EDM storage.
EDM Statement Pool
– Skeleton dynamic statements (SKDS)
– zparm EDMSTMTC
– As of DB2 V8 above-the-bar
EDM DBD Pool
– Database Descriptors (DBDs)
– zparm EDMDBDC
– As of DB2 V8 above-the-bar
EDM Skeleton Pool
– Skeleton Cursor (SKCT) and Package
Tables (SKPT)
– zparm EDM_SKELETON_POOL
– As of DB2 9 above-the-bar
EDM RDS Pool
– Cursor (CT) and Package Tables (PT)
– zparm EDMPOOL
– As of DB2 9 partially above-the-bar
– As of DB2 10 entirely above-the-bar
DBM1
2GBRDS Pool
Skeleton Pool
DBD Pool
Statement
Pool
RDS Pool
Skeleton Pool
DBD Pool
Statement
Pool
V9V9
V10V10
EDM Statement Pool
23
#IDUG
EDM Statement Pool resides entirely above-the-bar
– Therefore, not critical as a virtual storage constraint
– Of course, do not over-commit real storage
Use zparm EDMSTMTC to specify the EDM Statement Pool size
– Can be updated online
For applications that rely on dynamic SQL allocate a large pool
– E.g. In SAP case, start with 300MB
– Adjust upwards in increments of 20MB if the global cache hit ratio keeps
consistently below 95%
– Beware of the effects of multiple authorization IDs
• Result in separate cache entries even for identical statements
Keep zparm EDMBFIT at its default: NO
– Otherwise you can expect large increase in class 24 latches
EDM Statement Pool Considerations
24
#IDUG
Prior to DB2 10, dynamic statements caching can consume lots of DBM1
virtual storage below the 2GB bar, especially with
– Local caching, i.e. KEEPDYNAMIC(YES)
• A large portion (up to 50%) of virtual storage that holds locally cached statements (particularly
INSERTs) moved above-the-bar in V9
– Long running threads
• Even worse with long units of recovery
Selected knobs to control thread virtual storage utilization
– KEEPDYNAMIC bind parameter
– MAXKEEPD zparm
– CACHEDYN_FREELOCAL zparm
– CONTSTOR zparm
– MINSTOR zparm
Keep an eye on DB2 service
– Informational APARs: II04309 and II10817
DB2 10 brings radical improvements in this space
– Runtime structure moved to agent local storage above the bar
Thread Virtual Storage
25
#IDUG
KEEPDYNAMIC(YES) turns on so called local statements caching
– Results in reduced number of explicit prepares
– Preserves statement text across commits
– Automatically closes withheld cursors in DRDA at SQLCODE=+100
• reduces message traffic and locks duration
– It is incompatible with REOPT(ALWAYS), but compatible with REOPT(ONCE) and
REOPT(AUTO)
– DDF server threads that execute KEEPDYNAMIC(YES) packages remain active
(CMTSTAT=INACTIVE is ignored)
• Active DDF server threads are subject to idle thread timeouts
• Although CMTSTAT=INACTIVE is ignored, it’s needed for transaction-level accounting data and changes
WLM enclaves at transaction boundaries
– Prior to V10 it puts lots of pressure on thread virtual storage
Recommendation:
– Set KEEPDYNAMIC to NO, i.e. do not use local statements caching unless you fully
understand ramifications or the application (e.g. SAP) requires it
KEEPDYNAMIC Considerations
26
#IDUG
MAXKEEPD limits number of cached executables
It enables prepare avoidance at cost of virtual storage
It is checked at system level, but enforced at thread level
– FIFO method regarding prepare operation
Online zparm
– range 0 - 65535, default 5000
– DB2 10 opens opportunity to be more relaxed with this parameter, subject to
appropriate availability of real storage
MAXKEEPD = 0 disables keeping statement executables across
commits
– Statements text is still preserved
– Reasons for setting MAXKEEPD to 0 and KEEPDYNAMIC to YES:
• Reduced number of explicit prepares
• Cutting accounting records at commit
• WLM flexibility
• Reduced CPU utilization associated with package allocation
MAXKEEPD Considerations
27
#IDUG
CONTSTOR
– Default is NO in V8 and V9, but changed to YES in V10
– Updateable online
– If set to YES, DB2 releases unused thread storage at commit instead of
deallocation
• The check is done after certain number of commits
– Recommendation: CONTSTOR = YES
MINSTOR
– Default keeps changing
• V8: NO
• V9: YES
• V10: NO
– Updateable online
– If set to YES, DB2 regularly reduces thread’s virtual storage footprint
– Recommendation:
• V8, V9: MINSTOR=YES
• V10: MINSTOR=NO.
CONTSTOR and MINSTOR zparms
28
#IDUG
Introduced in DB2 V8, APAR PK21861
– New serviceability functionality added by PM24696
Updateable online
In case of below-the-bar virtual storage stress conditions, DB2 frees cached
statement and releases associated virtual storage upon statement’s
completion, i.e. does not wait for a commit to do that.
If the statement is re-referenced after being freed, DB2 performs implicit
prepare, so the process is transparent to the applications
– Unless there are concurrent DROPs or ALTERs affecting associated objects,
in which case -204 could be returned to the application executing the freed
statement
Applies only to statements bound with KEEPDYNAMIC(YES)
Possible values
– 0 : Feature is disabled. Default value in DB2 V8.
– 1 : Feature is enabled. Default value in DB2 9 and 10
– 2, 3, etc are serviceability values
CACHEDYN_FREELOCAL zparm
29
#IDUG
IBM DB2 Analytics Accelerator Considerations
●
The queries that qualify for routing to the accelerator are not stored in the Dynamic
Statement Cache
➔
Every prepare is a full prepare
●
Not a concern because of the relative cost of prepare vs. query execution
➔
IBM DB2 Analytics Accelerator Studio monitoring capabilities compensate for the lack of
statement-level execution statistics provided for the cached statements
●
Queries that do not qualify for routing to the accelerator are stored in the Dynamic
Statement Cache
➔
There is no practically measurable overhead for short prepares, i.e. the queries that have
already been stored in the cache
➔
The cache is searched prior to the extensive checking whether the query qualifies for
routing to the accelerator
➔
There are two cases when the cached entries need to be explicitly invalidated in order to
give the optimizer chance to consider the accelerator

DSN_PROFILE_ATRIBUTES table is updated to set new values for the accelerator relevant heuristics
parameters (SMALLTABLE_THRESHOLD, CHECK_RESULTSET, RESULTSET_THRESHOLD)

A new table has been defined, loaded and enabled for acceleration
➔
In both cases, the most efficient way to invalidate the relevant cached entries is to run
RUNSTATS REPORT NO UPDATE NONE for the corresponding tablespaces
30
#IDUG
IBM DB2 Analytics Accelerator Considerations
●
There are only few cases where the cost of short prepares is slightly higher
than without IDAA
➔
Table not enabled (but defined or loaded)
➔
Table does not reside in the same accelerator as the rest of the tables referenced by
the query
➔
A column has been added to the DB2 table after it has been defined and loaded to
IDAA
• For each of these you can have simple, self-explanatory tuning actions
• The full prepares that are somewhat more expensive, but only if there is at
least one IDAA started and the special register CURRENT ACCELERATION is
set to ENABLE or ENABLE with FAILBACK
➔
Assuming that your system is connected to a started IDAA, make sure to set the
special register to NONE (which is the default) if:
♦
There are no queries that should be considered for acceleration
♦
There are lots of full prepares for queries that do not qualify for acceleration. In this case set the
special register explicitly to ENABLE or ENABLE with FAILBACK for the queries you want to
accelerate and set it back to NONE for other queries.
31
#IDUG
Monitoring
Systems tuning
Applications tuning
– Parameter markers considerations
– Reoptimization options
Agenda
32
#IDUG
Use dynamic SQL statements
– SELECT, UPDATE, INSERT, DELETE
– local and distributed
Understand statements matching criteria
– Statements must be identical character-for-character
• including imbedded blanks
– as of DB2 10 the trailing blanks are removed from the matching criteria
• SELECT list considerations
– Prior to DB2 10 caching was of limited value unless using parameter markers
• Major enhancement in DB2 10 with CONCENTRATE STATEMENTS option
– Authorization IDs must be identical
– Selected bind options such as ISOLATION and CURRENTDATA must be identical
– Selected special registers such as CURRENT DEGREE must be identical
If using local caching do not explicitly re-prepare statements after
commits
– Still provide for possible sqlcode -514 or -518
No caching for REOPT(ALWAYS)
Writing Cache Friendly Applications
33
#IDUG
Use of literals typically results in dynamic statements cache inefficiency
– A short (cost effective) prepare is possible only if the new statement matches a cached
statement character-for-character
– New copies of statements that could have shared already cached statement 'thrash' dynamic
statements cache
– Usage of literals cannot be always avoided, e.g. for some CLI applications, Ruby on Rails, PHP
DB2 10 introduces option to reuse a cached, previously prepared statement
irrespective of literal values
– CONCENTRATE STATEMENTS WITH LITERALS
• New option for ATTRIBUTES on PREPARE
• New JCC driver's datasource/connection property enableLiteralReplacement='Yes'
• New keyword LITERALREPLACEMENT in the ODBC initialization file
• CONCENTRATE STATEMENTS OFF (default) causes pre-V10 behaviour
– Before a prepared statement is cached each literal is replaced by a single ‘&’
• Additionally, DB2 removes the trailing blacks that follow the statement
• ‘&’s are shown instead of literals in instrumentation (e.g. IFCID 317)
– Subsequent prepares of the same statement with different literals can result in short prepares
• The exact match has a precedence over matching with ‘&’
• The literals must be ‘reusable’ in the prepare context
• Mixture of parameter markers ‘?’ and literals results in the pre-V10 behaviour
– Monitoring support in DSN_STATEMENT_CACHE_TABLE (column LITERAL_REPL) and
IFCID 316: values ‘R’, ‘D’ or ‘ ‘
Concentrating Cached Statements in DB2 10
34
#IDUG
Dynamic statements cache efficiency is reduced by using different subsets of
columns in otherwise identical INSERT, UPDATE and MERGE statements
– Prior to V10 the applications had to prepare separate statements for each combination of
columns to be inserted, updated or merged – typical case for data entry/update applications
– The reason is a lack of mechanism to indicate that no value is provided for the target column
DB2 10 introduces new extended indicator variables
– The extended indicator variable is activated via:
• PREPARE attributes WITH / WITHOUT EXTENDED INDICATORS
• BIND parameter EXTENDEDINDICATOR = YES / NO
– A value of -5 means that target column is to be set to its default value
– A value of -7 means that target column is to be treated as if it had not been specified
– Example:
stmt1 = 'UPDATE T1 SET C1=?'
PREPARE S1 FROM stmt1
stmt2 = 'UPDATE T1 SET C2=?'
PREPARE S2 FROM stmt2
EXECUTE S1 USING :inputvar1
EXECUTE S2 USING :inputvar2
stmt = 'UPDATE T1 SET C1=?, C2=?'
PREPARE S1 ATTRIBUTES WITH EXTENDED INDICATORS FROM stmt
IND1 = -7
IND2 = -7
EXECUTE S1 USING :inputvar1, :IND2
EXECUTE S1 USING :IND1, :inputvar2
prior to V10 in V10
All-Columns INSERT, UPDATE, MERGE in DB2 10
35
#IDUG
When parameter markers are used for dynamic SQL, the DB2
Optimizer cannot take advantage of columns values distribution. A
simple example is:
For a low card(C1) this most often results in tablespace scan which is
very bad if the cursor is opened with a non-existing value of C1.
The same negative effect exist whenever there is a skew in column
values distribution.
REOPT(ALWAYS) is often too strong medicine with significant
downsides in performance, concurrency and monitoring.
PREPARE ...
SELECT ... FROM T WHERE C1 = ?
Parameter marker Optimizer Challanges
36
#IDUG
Bind option REOPT(ONCE) results in following:
– Delaying optimization until the first execute
• At that time the parameter marker values are known
• DB2 optimizer can use the values and take full advantage of their frequency
distribution
– Fixing the access plan into the statements cache
• Consequently take full advantage of caching
– Statement-level hints (given via Access Path Repository) allow different
REOPT settings for different statements within the same package
In effect only for dynamic SQL and if global caching is activated
Use the feature if the first set of values is more representative than
the application agnostic set of default values which must be
assumed by DB2 otherwise
Traditional EXPLAIN is not suitable
– See the Monitoring section in this presentation
REOPT (ONCE)
37
#IDUG
REOPT(AUTO) addresses REOPT(ONCE) exposure which occurs when:
– The first set of parameter marker values is not representative regarding DB2
optimization
Bind option REOPT(AUTO) instructs DB2 to automatically determine if a new
access path is needed to further optimize performance.
In effect only for dynamic SQL and if global caching is activated
Use the feature if the parameter marker values vary across statement
executions so much that occasional reprepare is needed, but still
REOPT(ALWAYS) would be an overkill.
Traditional EXPLAIN is not suitable
– See the Monitoring section in this presentation
DSN_STATEMENT_CACHE_TABLE includes two new columns to support
REOPT(AUTO):
– BIND_RO_TYPE – The current specification of REOPT for the statement:
• N – REOPT(NONE)
• 1 – REOPT(ONCE)
• A – REOPT(AUTO)
• 0 – The current plan is deemed optimal and there is no need for REOPT(AUTO)
– BIND_RA_TOT – Total number of REBINDs executed due to REOPT(AUTO)
REOPT (AUTO)
38
#IDUG
DB2 for z/OS Product Documentation
– DB2 10 for z/OS: Managing Performance, SC19-2978
– DB2 9 for z/OS: Performance Monitoring and Tuning Guide,
SC18-9851
DB2 for z/OS and OS/390 : Squeezing the Most Out of Dynamic
SQL - Redbook SG24-6418
DB2 for z/OS: Considerations on Small and Large Packages -
Redpaper REDP-4424
Dynamic Statements Cache: Getting the Most Out of It by Namik
Hrle - IDUG Solutions Journal Volume 8 Number 2
Memory Management for Dynamic SQL by Thomas Baumann -
IDUG NA 2008
References
#IDUG
Please fill out your session
evaluation before leaving!
Namik Hrle
IBM
hrle@de.ibm.com
Title: Efficient Monitoring & Tuning of
Dynamic SQL

More Related Content

What's hot

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
 
Z OS IBM Utilities
Z OS IBM UtilitiesZ OS IBM Utilities
Z OS IBM Utilitieskapa rohit
 
IBM DB2 for z/OS Administration Basics
IBM DB2 for z/OS Administration BasicsIBM DB2 for z/OS Administration Basics
IBM DB2 for z/OS Administration BasicsIBM
 
DOAG Oracle Unified Audit in Multitenant Environments
DOAG Oracle Unified Audit in Multitenant EnvironmentsDOAG Oracle Unified Audit in Multitenant Environments
DOAG Oracle Unified Audit in Multitenant EnvironmentsStefan Oehrli
 
Parallel Sysplex Implement2
Parallel Sysplex Implement2Parallel Sysplex Implement2
Parallel Sysplex Implement2ggddggddggdd
 
Row-level security and Dynamic Data Masking
Row-level security and Dynamic Data MaskingRow-level security and Dynamic Data Masking
Row-level security and Dynamic Data MaskingSolidQ
 
Best practices for DB2 for z/OS log based recovery
Best practices for DB2 for z/OS log based recoveryBest practices for DB2 for z/OS log based recovery
Best practices for DB2 for z/OS log based recoveryFlorence Dubois
 
Oracle Transparent Data Encryption (TDE) 12c
Oracle Transparent Data Encryption (TDE) 12cOracle Transparent Data Encryption (TDE) 12c
Oracle Transparent Data Encryption (TDE) 12cNabeel Yoosuf
 
IBM FlashSystems A9000/R presentation
IBM FlashSystems A9000/R presentation IBM FlashSystems A9000/R presentation
IBM FlashSystems A9000/R presentation Joe Krotz
 
Why oracle data guard new features in oracle 18c, 19c
Why oracle data guard new features in oracle 18c, 19cWhy oracle data guard new features in oracle 18c, 19c
Why oracle data guard new features in oracle 18c, 19cSatishbabu Gunukula
 
[Oracle DBA & Developer Day 2016] しばちょう先生の特別講義!!ストレージ管理のベストプラクティス ~ASMからExada...
[Oracle DBA & Developer Day 2016] しばちょう先生の特別講義!!ストレージ管理のベストプラクティス ~ASMからExada...[Oracle DBA & Developer Day 2016] しばちょう先生の特別講義!!ストレージ管理のベストプラクティス ~ASMからExada...
[Oracle DBA & Developer Day 2016] しばちょう先生の特別講義!!ストレージ管理のベストプラクティス ~ASMからExada...オラクルエンジニア通信
 
IBM Db2 11.5 External Tables
IBM Db2 11.5 External TablesIBM Db2 11.5 External Tables
IBM Db2 11.5 External TablesPhil Downey
 
Backup and recovery in oracle
Backup and recovery in oracleBackup and recovery in oracle
Backup and recovery in oraclesadegh salehi
 
Educational seminar lessons learned from customer db2 for z os health check...
Educational seminar   lessons learned from customer db2 for z os health check...Educational seminar   lessons learned from customer db2 for z os health check...
Educational seminar lessons learned from customer db2 for z os health check...John Campbell
 
An overview of snowflake
An overview of snowflakeAn overview of snowflake
An overview of snowflakeSivakumar Ramar
 
Introducing Workload XM 8.7.18
Introducing Workload XM 8.7.18Introducing Workload XM 8.7.18
Introducing Workload XM 8.7.18Cloudera, Inc.
 
SQL Server High Availability and Disaster Recovery
SQL Server High Availability and Disaster RecoverySQL Server High Availability and Disaster Recovery
SQL Server High Availability and Disaster RecoveryMichael Poremba
 
zIIP Capacity Planning
zIIP Capacity PlanningzIIP Capacity Planning
zIIP Capacity PlanningMartin Packer
 

What's hot (20)

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
 
Z OS IBM Utilities
Z OS IBM UtilitiesZ OS IBM Utilities
Z OS IBM Utilities
 
IBM DB2 for z/OS Administration Basics
IBM DB2 for z/OS Administration BasicsIBM DB2 for z/OS Administration Basics
IBM DB2 for z/OS Administration Basics
 
DOAG Oracle Unified Audit in Multitenant Environments
DOAG Oracle Unified Audit in Multitenant EnvironmentsDOAG Oracle Unified Audit in Multitenant Environments
DOAG Oracle Unified Audit in Multitenant Environments
 
Parallel Sysplex Implement2
Parallel Sysplex Implement2Parallel Sysplex Implement2
Parallel Sysplex Implement2
 
Row-level security and Dynamic Data Masking
Row-level security and Dynamic Data MaskingRow-level security and Dynamic Data Masking
Row-level security and Dynamic Data Masking
 
Best practices for DB2 for z/OS log based recovery
Best practices for DB2 for z/OS log based recoveryBest practices for DB2 for z/OS log based recovery
Best practices for DB2 for z/OS log based recovery
 
MAINVIEW for DB2.ppt
MAINVIEW for DB2.pptMAINVIEW for DB2.ppt
MAINVIEW for DB2.ppt
 
Oracle Transparent Data Encryption (TDE) 12c
Oracle Transparent Data Encryption (TDE) 12cOracle Transparent Data Encryption (TDE) 12c
Oracle Transparent Data Encryption (TDE) 12c
 
IBM FlashSystems A9000/R presentation
IBM FlashSystems A9000/R presentation IBM FlashSystems A9000/R presentation
IBM FlashSystems A9000/R presentation
 
Why oracle data guard new features in oracle 18c, 19c
Why oracle data guard new features in oracle 18c, 19cWhy oracle data guard new features in oracle 18c, 19c
Why oracle data guard new features in oracle 18c, 19c
 
[Oracle DBA & Developer Day 2016] しばちょう先生の特別講義!!ストレージ管理のベストプラクティス ~ASMからExada...
[Oracle DBA & Developer Day 2016] しばちょう先生の特別講義!!ストレージ管理のベストプラクティス ~ASMからExada...[Oracle DBA & Developer Day 2016] しばちょう先生の特別講義!!ストレージ管理のベストプラクティス ~ASMからExada...
[Oracle DBA & Developer Day 2016] しばちょう先生の特別講義!!ストレージ管理のベストプラクティス ~ASMからExada...
 
DB2 on Mainframe
DB2 on MainframeDB2 on Mainframe
DB2 on Mainframe
 
IBM Db2 11.5 External Tables
IBM Db2 11.5 External TablesIBM Db2 11.5 External Tables
IBM Db2 11.5 External Tables
 
Backup and recovery in oracle
Backup and recovery in oracleBackup and recovery in oracle
Backup and recovery in oracle
 
Educational seminar lessons learned from customer db2 for z os health check...
Educational seminar   lessons learned from customer db2 for z os health check...Educational seminar   lessons learned from customer db2 for z os health check...
Educational seminar lessons learned from customer db2 for z os health check...
 
An overview of snowflake
An overview of snowflakeAn overview of snowflake
An overview of snowflake
 
Introducing Workload XM 8.7.18
Introducing Workload XM 8.7.18Introducing Workload XM 8.7.18
Introducing Workload XM 8.7.18
 
SQL Server High Availability and Disaster Recovery
SQL Server High Availability and Disaster RecoverySQL Server High Availability and Disaster Recovery
SQL Server High Availability and Disaster Recovery
 
zIIP Capacity Planning
zIIP Capacity PlanningzIIP Capacity Planning
zIIP Capacity Planning
 

Similar to Efficient Monitoring & Tuning of Dynamic SQL in DB2 for z/OS by Namik Hrle -IBM Fellow

Track 2 session 4 db2 for z os optimizer- what’s new in db2 11 and exploiti...
Track 2 session 4   db2 for z os optimizer- what’s new in db2 11 and exploiti...Track 2 session 4   db2 for z os optimizer- what’s new in db2 11 and exploiti...
Track 2 session 4 db2 for z os optimizer- what’s new in db2 11 and exploiti...IBMSystemzEvents
 
Diagnose RIDPool Failures
Diagnose RIDPool FailuresDiagnose RIDPool Failures
Diagnose RIDPool FailuresCuneyt Goksu
 
Oracle - Checklist for performance issues
Oracle - Checklist for performance issuesOracle - Checklist for performance issues
Oracle - Checklist for performance issuesMarkus Flechtner
 
Ibm db2update2019 continuous delivery-update
Ibm db2update2019   continuous delivery-updateIbm db2update2019   continuous delivery-update
Ibm db2update2019 continuous delivery-updateGustav Lundström
 
IDUG NA 2014 / 11 tips for DB2 11 for z/OS
IDUG NA 2014 / 11 tips for DB2 11 for z/OSIDUG NA 2014 / 11 tips for DB2 11 for z/OS
IDUG NA 2014 / 11 tips for DB2 11 for z/OSCuneyt Goksu
 
Oracle RI ETL process overview.
Oracle RI ETL process overview.Oracle RI ETL process overview.
Oracle RI ETL process overview.Puneet Kala
 
NOCOUG_201311_Fine_Tuning_Execution_Plans.pdf
NOCOUG_201311_Fine_Tuning_Execution_Plans.pdfNOCOUG_201311_Fine_Tuning_Execution_Plans.pdf
NOCOUG_201311_Fine_Tuning_Execution_Plans.pdfcookie1969
 
Temporal Tables, Transparent Archiving in DB2 for z/OS and IDAA
Temporal Tables, Transparent Archiving in DB2 for z/OS and IDAATemporal Tables, Transparent Archiving in DB2 for z/OS and IDAA
Temporal Tables, Transparent Archiving in DB2 for z/OS and IDAACuneyt Goksu
 
Build a Big Data solution using DB2 for z/OS
Build a Big Data solution using DB2 for z/OSBuild a Big Data solution using DB2 for z/OS
Build a Big Data solution using DB2 for z/OSJane Man
 
SQL Server Admin Best Practices with DMV's
SQL Server Admin Best Practices with DMV'sSQL Server Admin Best Practices with DMV's
SQL Server Admin Best Practices with DMV'sSparkhound Inc.
 
Slide 1 - Parallels Plesk Control Panel 8.6.0
Slide 1 - Parallels Plesk Control Panel 8.6.0Slide 1 - Parallels Plesk Control Panel 8.6.0
Slide 1 - Parallels Plesk Control Panel 8.6.0webhostingguy
 
Cics application programming - session 2
Cics   application programming - session 2Cics   application programming - session 2
Cics application programming - session 2Srinimf-Slides
 
Understanding IBM Tivoli OMEGAMON for DB2 Batch Reporting, Customization and ...
Understanding IBM Tivoli OMEGAMON for DB2 Batch Reporting, Customization and ...Understanding IBM Tivoli OMEGAMON for DB2 Batch Reporting, Customization and ...
Understanding IBM Tivoli OMEGAMON for DB2 Batch Reporting, Customization and ...Cuneyt Goksu
 
Teradata Tutorial for Beginners
Teradata Tutorial for BeginnersTeradata Tutorial for Beginners
Teradata Tutorial for Beginnersrajkamaltibacademy
 
Advanced tips for making Oracle databases faster
Advanced tips for making Oracle databases fasterAdvanced tips for making Oracle databases faster
Advanced tips for making Oracle databases fasterSolarWinds
 
AppDynamics Administration - AppSphere16
AppDynamics Administration - AppSphere16AppDynamics Administration - AppSphere16
AppDynamics Administration - AppSphere16AppDynamics
 
Evolutionary db development
Evolutionary db development Evolutionary db development
Evolutionary db development Open Party
 
Reduce planned database down time with Oracle technology
Reduce planned database down time with Oracle technologyReduce planned database down time with Oracle technology
Reduce planned database down time with Oracle technologyKirill Loifman
 
2013 Collaborate - OAUG - Presentation
2013 Collaborate - OAUG - Presentation2013 Collaborate - OAUG - Presentation
2013 Collaborate - OAUG - PresentationBiju Thomas
 

Similar to Efficient Monitoring & Tuning of Dynamic SQL in DB2 for z/OS by Namik Hrle -IBM Fellow (20)

Track 2 session 4 db2 for z os optimizer- what’s new in db2 11 and exploiti...
Track 2 session 4   db2 for z os optimizer- what’s new in db2 11 and exploiti...Track 2 session 4   db2 for z os optimizer- what’s new in db2 11 and exploiti...
Track 2 session 4 db2 for z os optimizer- what’s new in db2 11 and exploiti...
 
Diagnose RIDPool Failures
Diagnose RIDPool FailuresDiagnose RIDPool Failures
Diagnose RIDPool Failures
 
Oracle - Checklist for performance issues
Oracle - Checklist for performance issuesOracle - Checklist for performance issues
Oracle - Checklist for performance issues
 
Ibm db2update2019 continuous delivery-update
Ibm db2update2019   continuous delivery-updateIbm db2update2019   continuous delivery-update
Ibm db2update2019 continuous delivery-update
 
IDUG NA 2014 / 11 tips for DB2 11 for z/OS
IDUG NA 2014 / 11 tips for DB2 11 for z/OSIDUG NA 2014 / 11 tips for DB2 11 for z/OS
IDUG NA 2014 / 11 tips for DB2 11 for z/OS
 
Oracle RI ETL process overview.
Oracle RI ETL process overview.Oracle RI ETL process overview.
Oracle RI ETL process overview.
 
NOCOUG_201311_Fine_Tuning_Execution_Plans.pdf
NOCOUG_201311_Fine_Tuning_Execution_Plans.pdfNOCOUG_201311_Fine_Tuning_Execution_Plans.pdf
NOCOUG_201311_Fine_Tuning_Execution_Plans.pdf
 
Temporal Tables, Transparent Archiving in DB2 for z/OS and IDAA
Temporal Tables, Transparent Archiving in DB2 for z/OS and IDAATemporal Tables, Transparent Archiving in DB2 for z/OS and IDAA
Temporal Tables, Transparent Archiving in DB2 for z/OS and IDAA
 
Build a Big Data solution using DB2 for z/OS
Build a Big Data solution using DB2 for z/OSBuild a Big Data solution using DB2 for z/OS
Build a Big Data solution using DB2 for z/OS
 
SQL Server Admin Best Practices with DMV's
SQL Server Admin Best Practices with DMV'sSQL Server Admin Best Practices with DMV's
SQL Server Admin Best Practices with DMV's
 
Slide 1 - Parallels Plesk Control Panel 8.6.0
Slide 1 - Parallels Plesk Control Panel 8.6.0Slide 1 - Parallels Plesk Control Panel 8.6.0
Slide 1 - Parallels Plesk Control Panel 8.6.0
 
Cics application programming - session 2
Cics   application programming - session 2Cics   application programming - session 2
Cics application programming - session 2
 
Understanding IBM Tivoli OMEGAMON for DB2 Batch Reporting, Customization and ...
Understanding IBM Tivoli OMEGAMON for DB2 Batch Reporting, Customization and ...Understanding IBM Tivoli OMEGAMON for DB2 Batch Reporting, Customization and ...
Understanding IBM Tivoli OMEGAMON for DB2 Batch Reporting, Customization and ...
 
Teradata Tutorial for Beginners
Teradata Tutorial for BeginnersTeradata Tutorial for Beginners
Teradata Tutorial for Beginners
 
Advanced tips for making Oracle databases faster
Advanced tips for making Oracle databases fasterAdvanced tips for making Oracle databases faster
Advanced tips for making Oracle databases faster
 
AppDynamics Administration - AppSphere16
AppDynamics Administration - AppSphere16AppDynamics Administration - AppSphere16
AppDynamics Administration - AppSphere16
 
Evolutionary db development
Evolutionary db development Evolutionary db development
Evolutionary db development
 
Reduce planned database down time with Oracle technology
Reduce planned database down time with Oracle technologyReduce planned database down time with Oracle technology
Reduce planned database down time with Oracle technology
 
Monitor DB2 performance on z/VM and z/VSE
Monitor DB2 performance on z/VM and z/VSEMonitor DB2 performance on z/VM and z/VSE
Monitor DB2 performance on z/VM and z/VSE
 
2013 Collaborate - OAUG - Presentation
2013 Collaborate - OAUG - Presentation2013 Collaborate - OAUG - Presentation
2013 Collaborate - OAUG - Presentation
 

Recently uploaded

Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...
Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...
Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...amitlee9823
 
April 2024 - Crypto Market Report's Analysis
April 2024 - Crypto Market Report's AnalysisApril 2024 - Crypto Market Report's Analysis
April 2024 - Crypto Market Report's Analysismanisha194592
 
Thane Call Girls 7091864438 Call Girls in Thane Escort service book now -
Thane Call Girls 7091864438 Call Girls in Thane Escort service book now -Thane Call Girls 7091864438 Call Girls in Thane Escort service book now -
Thane Call Girls 7091864438 Call Girls in Thane Escort service book now -Pooja Nehwal
 
BigBuy dropshipping via API with DroFx.pptx
BigBuy dropshipping via API with DroFx.pptxBigBuy dropshipping via API with DroFx.pptx
BigBuy dropshipping via API with DroFx.pptxolyaivanovalion
 
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...ZurliaSoop
 
Mg Road Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Banga...
Mg Road Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Banga...Mg Road Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Banga...
Mg Road Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Banga...amitlee9823
 
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service BangaloreCall Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangaloreamitlee9823
 
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night StandCall Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Standamitlee9823
 
Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...amitlee9823
 
Generative AI on Enterprise Cloud with NiFi and Milvus
Generative AI on Enterprise Cloud with NiFi and MilvusGenerative AI on Enterprise Cloud with NiFi and Milvus
Generative AI on Enterprise Cloud with NiFi and MilvusTimothy Spann
 
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...amitlee9823
 
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men 🔝Bangalore🔝 Esc...
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men  🔝Bangalore🔝   Esc...➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men  🔝Bangalore🔝   Esc...
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men 🔝Bangalore🔝 Esc...amitlee9823
 
Call Girls Hsr Layout Just Call 👗 7737669865 👗 Top Class Call Girl Service Ba...
Call Girls Hsr Layout Just Call 👗 7737669865 👗 Top Class Call Girl Service Ba...Call Girls Hsr Layout Just Call 👗 7737669865 👗 Top Class Call Girl Service Ba...
Call Girls Hsr Layout Just Call 👗 7737669865 👗 Top Class Call Girl Service Ba...amitlee9823
 
Invezz.com - Grow your wealth with trading signals
Invezz.com - Grow your wealth with trading signalsInvezz.com - Grow your wealth with trading signals
Invezz.com - Grow your wealth with trading signalsInvezz1
 
Call Girls In Attibele ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Attibele ☎ 7737669865 🥵 Book Your One night StandCall Girls In Attibele ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Attibele ☎ 7737669865 🥵 Book Your One night Standamitlee9823
 
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...amitlee9823
 

Recently uploaded (20)

Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...
Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...
Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...
 
April 2024 - Crypto Market Report's Analysis
April 2024 - Crypto Market Report's AnalysisApril 2024 - Crypto Market Report's Analysis
April 2024 - Crypto Market Report's Analysis
 
Thane Call Girls 7091864438 Call Girls in Thane Escort service book now -
Thane Call Girls 7091864438 Call Girls in Thane Escort service book now -Thane Call Girls 7091864438 Call Girls in Thane Escort service book now -
Thane Call Girls 7091864438 Call Girls in Thane Escort service book now -
 
BigBuy dropshipping via API with DroFx.pptx
BigBuy dropshipping via API with DroFx.pptxBigBuy dropshipping via API with DroFx.pptx
BigBuy dropshipping via API with DroFx.pptx
 
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
 
Sampling (random) method and Non random.ppt
Sampling (random) method and Non random.pptSampling (random) method and Non random.ppt
Sampling (random) method and Non random.ppt
 
Mg Road Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Banga...
Mg Road Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Banga...Mg Road Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Banga...
Mg Road Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Banga...
 
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service BangaloreCall Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
 
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night StandCall Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
 
Call Girls In Shalimar Bagh ( Delhi) 9953330565 Escorts Service
Call Girls In Shalimar Bagh ( Delhi) 9953330565 Escorts ServiceCall Girls In Shalimar Bagh ( Delhi) 9953330565 Escorts Service
Call Girls In Shalimar Bagh ( Delhi) 9953330565 Escorts Service
 
Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Bommasandra Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
 
Generative AI on Enterprise Cloud with NiFi and Milvus
Generative AI on Enterprise Cloud with NiFi and MilvusGenerative AI on Enterprise Cloud with NiFi and Milvus
Generative AI on Enterprise Cloud with NiFi and Milvus
 
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
 
Abortion pills in Doha Qatar (+966572737505 ! Get Cytotec
Abortion pills in Doha Qatar (+966572737505 ! Get CytotecAbortion pills in Doha Qatar (+966572737505 ! Get Cytotec
Abortion pills in Doha Qatar (+966572737505 ! Get Cytotec
 
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men 🔝Bangalore🔝 Esc...
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men  🔝Bangalore🔝   Esc...➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men  🔝Bangalore🔝   Esc...
➥🔝 7737669865 🔝▻ Bangalore Call-girls in Women Seeking Men 🔝Bangalore🔝 Esc...
 
(NEHA) Call Girls Katra Call Now 8617697112 Katra Escorts 24x7
(NEHA) Call Girls Katra Call Now 8617697112 Katra Escorts 24x7(NEHA) Call Girls Katra Call Now 8617697112 Katra Escorts 24x7
(NEHA) Call Girls Katra Call Now 8617697112 Katra Escorts 24x7
 
Call Girls Hsr Layout Just Call 👗 7737669865 👗 Top Class Call Girl Service Ba...
Call Girls Hsr Layout Just Call 👗 7737669865 👗 Top Class Call Girl Service Ba...Call Girls Hsr Layout Just Call 👗 7737669865 👗 Top Class Call Girl Service Ba...
Call Girls Hsr Layout Just Call 👗 7737669865 👗 Top Class Call Girl Service Ba...
 
Invezz.com - Grow your wealth with trading signals
Invezz.com - Grow your wealth with trading signalsInvezz.com - Grow your wealth with trading signals
Invezz.com - Grow your wealth with trading signals
 
Call Girls In Attibele ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Attibele ☎ 7737669865 🥵 Book Your One night StandCall Girls In Attibele ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Attibele ☎ 7737669865 🥵 Book Your One night Stand
 
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Junnasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
 

Efficient Monitoring & Tuning of Dynamic SQL in DB2 for z/OS by Namik Hrle -IBM Fellow

  • 1. #IDUG Efficient Monitoring & Tuning of Dynamic SQL Namik Hrle IBM April 16, 2014 | Platform: DB2 for z/OS
  • 2. 2 #IDUG © Copyright IBM Corporation 2012. 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 DB2 for 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. Disclaimer
  • 4. 4 #IDUG program A program B COMMIT EXECUTE S EDM Statement Pool thread A thread B EXECUTE S sqlcode=0 no effect on prepared statements sqlcode=0 EXECUTE S sqlcode=0 EXECUTE S sqlcode=0 2 3 1 4 5 sqlcode=0 PREPARE S prepared statementprepared statement SS SKDSSKDS SS sqlcode=0 full prepare PREPARE S prepared statementprepared statement SS sqlcode=0 short prepare avoided prepare CACHEDYN=YES and KEEPDYNAMIC=YES
  • 5. 5 #IDUG Monitoring – Global statements cache – Local statements cache – Specific cached statements Systems tuning Applications tuning Agenda
  • 6. 6 #IDUG Prepare requests QXPREP + QXSTIPRP 100005 Not found in cache QXSTNFND 5005 Full prepares QISEDSI 5003 Found in cache QXSTFND 95000 Short prepares QISEDSG - QISEDSI 95000 Global cache hit ratio QISEDSG - QISEDSI QISEDSG 95% Monitoring Global Statements Cache
  • 7. 7 #IDUG Implicit prepares QXSTIPRP 20000 Avoided prepares QXSTNPRP 200000 Statements invalidated QXSTDEXP+QXSTDINV 8010 MAXKEEPD exceeded QXSTDEXP 8000 DROP/ALTER/REVOKE/RUNSTATS QXSTDINV 10 Local cache hit ratio QXSTNPRP QXSTNPRP+QXSTIPRP 91% Monitoring Local Statements Cache
  • 8. 8 #IDUG EXPLAIN support – STMTCACHE ALL – STMTCACHE STMTID statement-id – STMTCACHE STMTTOKEN statement-token – Special register: CURRENT EXPLAIN MODE (1) DB2 Trace support – IFCID 316 – externalizes execution statistics – IFCID 317 – externalizes full statement text – IFCID 318 – controls type collected statistics (1) – available as of DB2 10 Monitoring Cached Statements
  • 9. 9 #IDUG Explains a set of cached statements Populates table DSN_STATEMENT_CACHE_TABLE – Qualified by current SQLID value One row for each cached statement – All statements included if EXPLAIN executed by SYSADM or SQLADM – Otherwise only statements with matching authorization Reports the statement’s execution statistics – Analogous to IFCIDs 316 and 317 – Statistics controlled and reset by means of IFCID 318 – Details documented later in the presentation Member specific – Need to be executed on all members EXPLAIN STMTCACHE ALL
  • 10. 10 #IDUG Explains a specific statement identified by its id – Can be either integer constant or host variable – It is assigned by DB2 at prepare time and it uniquely identifies cached statement – It can be retrieved via IFI call from IFCIDs 316 and 124 • also available in IFCIDs 172, 196, 337 – Value reported in PLAN_TABLE’s QUERYNO column EXPLAIN populates following tables: – PLAN_TABLE, DSN_STATEMNT_TABLE, DSN_FUNCTION_TABLE • Identifies actual access path details for specified statement providing it is still in the cache – DSN_STATEMENT_CACHE_TABLE • Reports execution statistics for the specified statement EXPLAIN STMTCACHE STMTID
  • 11. 11 #IDUG Explains a specific statement identified by its token – Can be either string constant or host variable • Up to 240 characters – It is assigned by application at prepare time • RRSAF SET_ID function for local applications • sqlseti API for remote applications – Value reported in PLAN_TABLE’s STMTTOKEN column EXPLAIN populates following tables: – PLAN_TABLE, DSN_STATEMNT_TABLE, DSN_FUNCTION_TABLE • Identifies actual access path details for specified statement providing it is still in the cache – DSN_STATEMENT_CACHE_TABLE • Reports execution statistics for the specified statement. – EXPLAIN STMTCACHE STMTTOKEN
  • 12. 12 #IDUG Prior to DB2 10, performance monitoring and tuning of dynamic SQL statements was not ideally suited for application programmers – There is no equivalent of EXPLAIN bind option that is provided for static SQL • Each monitored statements need to be changed (adding STMTTOKEN) • Alternatively, time consuming and complex analysis of performance traces or DSN_STATEMENT_CACHE_TABLE is needed – Statement could be purged from the cache before having a chance to retrieve its performance characteristics DB2 10 addresses these challenges – Application programmers can turn on/off collection of access path details and performance data for dynamic SQL statements • SET CURRENT EXPLAIN MODE = NO | YES | EXPLAIN • JCC connection property: currentExplainMode • ODBC/CLI: – keyword DB2Explain in db2cli.ini file, or – Setting SQL_ATTR_DB2EXPLAIN with SQLSetConnectAttr() function – For YES and EXPLAIN, access path details are written in standard explain tables • This also applies to CACHEDYN=NO and REOPT(ALWAYS) cases – For YES, performance data are written in DSN_STATEMENTS_CACHE_TABLE Special Register CURRENT EXPLAIN MODE
  • 13. 13 #IDUG PLAN_TABLE DSN_STATEMENT_ CACHE_TABLE QUERYNO STMT_ID • The key correlation value. • DB2 generates the value when the statement got inserted into cache. COLLID COLLID ● One of the constants: ➔ DSNDYNAMICSQLCACHE ➔ DSNEXPLAINMODEYES (1) (2) ➔ DSNEXPLAINMODEEXPLAIN (1) (2) STMT_TOKEN STMT_TOKEN • Optionally present – only if specified by the application BIND_TIME CACHED_TS (2) • The time when the statement got inserted into the cache. TIMESTAMP or EXPLAIN_TIME (1) EXPLAIN_TS (2) • The time when EXPLAIN STMTCACHE was executed • The same statement can have multiple entries in PLAN_TABLE and DSN_STATEMENT_CACHE_TABLE but wih different TIMESTAMP i.e. EXPLAIN_TIME and EXPLAIN_TS values, respectively. • As of DB2 10 TIMESTAMP is deprecated; use EXPLAIN_TIME instead (1) Available as of DB2 10 (2) For DSN_STATEMENT_CACHE_TABLE entries created by EXPLAIN STMTCACHE ALL, use CACHED_TS=BIND_TIME For DSN_STATEMENT_CACHE_TABLE entries created by EXPLAIN MODE=YES|EXPLAIN, use EXPLAIN_TS=BIND_TIME Correlating EXPLAIN Tables
  • 14. 14 #IDUG IFCID 316 – Externalises statement-level statistics – Prior to DB2 10, the statistics available for statements that are found in the dynamic statements cache at retrieval time • Retrieved via IFI READS request • Require active Monitor Trace Class 1 – In DB2 10 the statistics is also available for statements that were removed from the dynamic statements cache • These are retrieved via IFI READA request or by post-processing SMF/GTF data • Require active Monitor trace Class 29 • Side remark: IFCID 400 as an analogue to IFCID 316 is introduced for static SQL statements IFCID 317 – Complements IFCID 316 – Provides full statement text for a give statement ID For detailed usage information see DB2 documentation library, e.g. 'Managing Performance' manual in DB2 10 DB2 Trace Support
  • 15. 15 #IDUG IFCID 318 – This is a switch that controls what gets externalised in IFCID 316 – Performance Trace user defined Class, e.g. 30 • DB2 10 adds Monitor trace Class 29 – Accounting Class 3 required for suspension timers – Statistics reset at performance class stop – Side remark: IFCID 401 as an analogue to IFCID 318 is introduced for static SQL statements. Included in Monitor trace Class 29 Techniques to limit the number of reported statements – Prior to DB2 10, the result set can be limited to the statements that: • exceeded a given threshold, e.g. number of executions, number of getpages, … • belong to a top list by a given performance indicator, e.g. elapsed time, CPU, time, … • match a given statement ID (single statement retrieval) – As of DB2 10 the result set can be also limited to the statements that: • were executed for a given end-user ID, transaction/application ID, workstation name • refer to a specific table • were prepared after specific time • were re-executed after specific time – DB2 Trace Support
  • 16. 16 #IDUG DSN_STATEMENT_CACHE_TABLE IFCID Statement ID (generated by DB2) STMT_ID QW0316ID Statement token (provided by application) STMT_TOKEN QW0316UI Collection ID COLLID Package/DBRM that performed PREPARE PROGRAM_NAME QW0316X1 Precompiler line number for PREPARE statement LINES QW0316LX Transaction name QW0316X2 Primary authorization ID who did initial prepare PRIMAUTH QW0316X3 Current SQLID of user who did initial prepare CURSQLID QW0316X4 CURRENT SCHEMA special register content SCHEMA QW0316SC Data sharing member name (1) GROUP_MEMBER QW0316MBR Table qualifier QW0316QD Table name QW0316TD First 60 characters of statement text QW0316ST Full statement text STMT_TEXT QW0317TX Literal replacement ('&') indication (1) LITERAL_REPL QW0317LR (1) – available as of DB2 10 Statement Level Indicators: Correlation
  • 17. 17 #IDUG DSN_STATEMENT_CACHE_TABLE IFCID Timestamp of initial prepare CACHED_TS QW0316TM Timestamp of statistics last update QW0316UT Timestamp of last IFCID 318 activation STAT_TS QW0316TS Status: valid or reason for invalidation (LRU,RUNSTATS,REVOKE,DROP/ALTER) INV_LRU, INV_RUNSTATS INV_REVOKE, INV_DROPALT QW0316FL Value of QUALIFIER bind option BIND_QUALIFIER QW0316X5 Value of ISOLATION bind option BIND_ISO QW0316X6 Value of CURRENTDATA bind option BIND_CDATA QW0316X7 Value of DYNAMICRULES bind option BIND_DYNRL QW0316X8 Value of CURRENT DEGREE special register BIND_DEGRE QW0316X9 Value of CURRENT RULES special register BIND_SQLRL QW0316XA Number of REBINDs due to REOPT(AUTO) BIND_RA_TOT Value of REOPT option (1) BIND_RO_TYPE Value of CURRENT PRECISION special register QW0316XB Cursor WITH HOLD identification BIND_CHOLD QW0316XC (1) – available as of DB2 10 Statement Level Indicators: Status
  • 18. 18 #IDUG DSN_STATEMENT_CACHE_TABLE IFCID Locally cached copies currently used (1) USERS QW0316US Locally cached copies – total (1) COPIES QW0316CP Statement executions (1) STAT_EXEC or STAT_EXECB(2) QW0316NE Synchronous reads (1) STAT_SYNR or STAT_SYNRB(2) QW0316NB Synchronous writes (1) STAT_WRIT or STAT_WRITB(2) QW0316NW Getpages (1) STAT_GPAG or STAT_GPAGB(2) QW0316NG Rows examined (1) STAT_EROW or STAT_EROWB(2) QW0316NR Rows processed (1) STAT_PROW or STAT_PROWB(2) QW0316NP Sorts performed (1) STAT_SORT or STAT_SORTB(2) QW0316NS Index scans performed (1) STAT_INDX or STAT_INDXB(2) QW0316NI Tablespace scans performed (1) STAT_RSCN or STAT_RSCNB(2) QW0316NT RID List failures: no storage (1) STAT_RIDSTOR or STAT_RIDSTORB(2) QW0316RS RID List failures: limit exceeded (1) STAT_RIDLIMIT or STAT_RIDLIMITB(2) QW0316RT Parallel groups created (1) STAT_PGRP or STAT_PGRPB(2) QW0316NL (1) – available only if IFCID 318 is activated (2) – as of DB2 10 use columns with suffix 'B' (BIGINT) Statement Level Indicators: Statistics
  • 19. 19 #IDUG DSN_STATEMENT_CACHE_TABLE IFCID Elapsed time (1) STAT_ELAP QW0316AE CPU time (1) STAT_CPU QW0316CT Wait time for synchronous I/O (1) (2) STAT_SUS_SYNIO QW0316W1 Wait time for locks (1) (2) (3) STAT_SUS_LOCK QW0316W2 Wait time for synchronous execution unit switch (1) (2) STAT_SUS_SWIT QW0316W3 Wait time for global locks (1) (2) STAT_SUS_GLCK QW0316W4 Wait time for other agents reads (1) (2) STAT_SUS_OTHR QW0316W5 Wait time for other agents writes (1) (2) STAT_SUS_OTHW QW0316W6 Wait time for latches (1) (2) (4) STAT_SUS_LATCH QW0316W7 Wait time for page latches (1) (2) (4) STAT_SUS_PLATCH QW0316W8 Wait time for drain locks (1) (2) (4) STAT_SUS_DRAIN QW0316W9 Wait time for releasing of claims (1) (2) (4) STAT_SUS_CLAIM QW0316WA Wait time for log writes (1) (2) (4) STAT_SUS_LOG QW0316WB (1) – available only if IFCID 318 is activated (2) – available only Accounting Class 3 is activated (3) – priot to DB2 10 the timer includes latches as well (4) – available as of DB2 10 Statement Level Indicators: Timers
  • 20. 20 #IDUG DB2 10 adds an indicator whether a statement is dynamic or static to the following trace events: Event IFCID SQL statement end 58 SQL statement text at bind/prepare 63 and 350 Currently executing SQL statement 124 Deadlock details 172 Timeout details 196 Lock escalation details 337 The statement type indicator is also added to the applicable messages. Statement Type Indicators
  • 21. 21 #IDUG Monitoring Systems tuning – EDM storage – Thread storage – Controlling virtual storage consumption – IBM DB2 Analytics Accelerator considerations Applications tuning Agenda
  • 22. 22 #IDUG The dynamic statements are cached in the EDM Statement Pool which belongs to EDM storage. EDM Statement Pool – Skeleton dynamic statements (SKDS) – zparm EDMSTMTC – As of DB2 V8 above-the-bar EDM DBD Pool – Database Descriptors (DBDs) – zparm EDMDBDC – As of DB2 V8 above-the-bar EDM Skeleton Pool – Skeleton Cursor (SKCT) and Package Tables (SKPT) – zparm EDM_SKELETON_POOL – As of DB2 9 above-the-bar EDM RDS Pool – Cursor (CT) and Package Tables (PT) – zparm EDMPOOL – As of DB2 9 partially above-the-bar – As of DB2 10 entirely above-the-bar DBM1 2GBRDS Pool Skeleton Pool DBD Pool Statement Pool RDS Pool Skeleton Pool DBD Pool Statement Pool V9V9 V10V10 EDM Statement Pool
  • 23. 23 #IDUG EDM Statement Pool resides entirely above-the-bar – Therefore, not critical as a virtual storage constraint – Of course, do not over-commit real storage Use zparm EDMSTMTC to specify the EDM Statement Pool size – Can be updated online For applications that rely on dynamic SQL allocate a large pool – E.g. In SAP case, start with 300MB – Adjust upwards in increments of 20MB if the global cache hit ratio keeps consistently below 95% – Beware of the effects of multiple authorization IDs • Result in separate cache entries even for identical statements Keep zparm EDMBFIT at its default: NO – Otherwise you can expect large increase in class 24 latches EDM Statement Pool Considerations
  • 24. 24 #IDUG Prior to DB2 10, dynamic statements caching can consume lots of DBM1 virtual storage below the 2GB bar, especially with – Local caching, i.e. KEEPDYNAMIC(YES) • A large portion (up to 50%) of virtual storage that holds locally cached statements (particularly INSERTs) moved above-the-bar in V9 – Long running threads • Even worse with long units of recovery Selected knobs to control thread virtual storage utilization – KEEPDYNAMIC bind parameter – MAXKEEPD zparm – CACHEDYN_FREELOCAL zparm – CONTSTOR zparm – MINSTOR zparm Keep an eye on DB2 service – Informational APARs: II04309 and II10817 DB2 10 brings radical improvements in this space – Runtime structure moved to agent local storage above the bar Thread Virtual Storage
  • 25. 25 #IDUG KEEPDYNAMIC(YES) turns on so called local statements caching – Results in reduced number of explicit prepares – Preserves statement text across commits – Automatically closes withheld cursors in DRDA at SQLCODE=+100 • reduces message traffic and locks duration – It is incompatible with REOPT(ALWAYS), but compatible with REOPT(ONCE) and REOPT(AUTO) – DDF server threads that execute KEEPDYNAMIC(YES) packages remain active (CMTSTAT=INACTIVE is ignored) • Active DDF server threads are subject to idle thread timeouts • Although CMTSTAT=INACTIVE is ignored, it’s needed for transaction-level accounting data and changes WLM enclaves at transaction boundaries – Prior to V10 it puts lots of pressure on thread virtual storage Recommendation: – Set KEEPDYNAMIC to NO, i.e. do not use local statements caching unless you fully understand ramifications or the application (e.g. SAP) requires it KEEPDYNAMIC Considerations
  • 26. 26 #IDUG MAXKEEPD limits number of cached executables It enables prepare avoidance at cost of virtual storage It is checked at system level, but enforced at thread level – FIFO method regarding prepare operation Online zparm – range 0 - 65535, default 5000 – DB2 10 opens opportunity to be more relaxed with this parameter, subject to appropriate availability of real storage MAXKEEPD = 0 disables keeping statement executables across commits – Statements text is still preserved – Reasons for setting MAXKEEPD to 0 and KEEPDYNAMIC to YES: • Reduced number of explicit prepares • Cutting accounting records at commit • WLM flexibility • Reduced CPU utilization associated with package allocation MAXKEEPD Considerations
  • 27. 27 #IDUG CONTSTOR – Default is NO in V8 and V9, but changed to YES in V10 – Updateable online – If set to YES, DB2 releases unused thread storage at commit instead of deallocation • The check is done after certain number of commits – Recommendation: CONTSTOR = YES MINSTOR – Default keeps changing • V8: NO • V9: YES • V10: NO – Updateable online – If set to YES, DB2 regularly reduces thread’s virtual storage footprint – Recommendation: • V8, V9: MINSTOR=YES • V10: MINSTOR=NO. CONTSTOR and MINSTOR zparms
  • 28. 28 #IDUG Introduced in DB2 V8, APAR PK21861 – New serviceability functionality added by PM24696 Updateable online In case of below-the-bar virtual storage stress conditions, DB2 frees cached statement and releases associated virtual storage upon statement’s completion, i.e. does not wait for a commit to do that. If the statement is re-referenced after being freed, DB2 performs implicit prepare, so the process is transparent to the applications – Unless there are concurrent DROPs or ALTERs affecting associated objects, in which case -204 could be returned to the application executing the freed statement Applies only to statements bound with KEEPDYNAMIC(YES) Possible values – 0 : Feature is disabled. Default value in DB2 V8. – 1 : Feature is enabled. Default value in DB2 9 and 10 – 2, 3, etc are serviceability values CACHEDYN_FREELOCAL zparm
  • 29. 29 #IDUG IBM DB2 Analytics Accelerator Considerations ● The queries that qualify for routing to the accelerator are not stored in the Dynamic Statement Cache ➔ Every prepare is a full prepare ● Not a concern because of the relative cost of prepare vs. query execution ➔ IBM DB2 Analytics Accelerator Studio monitoring capabilities compensate for the lack of statement-level execution statistics provided for the cached statements ● Queries that do not qualify for routing to the accelerator are stored in the Dynamic Statement Cache ➔ There is no practically measurable overhead for short prepares, i.e. the queries that have already been stored in the cache ➔ The cache is searched prior to the extensive checking whether the query qualifies for routing to the accelerator ➔ There are two cases when the cached entries need to be explicitly invalidated in order to give the optimizer chance to consider the accelerator  DSN_PROFILE_ATRIBUTES table is updated to set new values for the accelerator relevant heuristics parameters (SMALLTABLE_THRESHOLD, CHECK_RESULTSET, RESULTSET_THRESHOLD)  A new table has been defined, loaded and enabled for acceleration ➔ In both cases, the most efficient way to invalidate the relevant cached entries is to run RUNSTATS REPORT NO UPDATE NONE for the corresponding tablespaces
  • 30. 30 #IDUG IBM DB2 Analytics Accelerator Considerations ● There are only few cases where the cost of short prepares is slightly higher than without IDAA ➔ Table not enabled (but defined or loaded) ➔ Table does not reside in the same accelerator as the rest of the tables referenced by the query ➔ A column has been added to the DB2 table after it has been defined and loaded to IDAA • For each of these you can have simple, self-explanatory tuning actions • The full prepares that are somewhat more expensive, but only if there is at least one IDAA started and the special register CURRENT ACCELERATION is set to ENABLE or ENABLE with FAILBACK ➔ Assuming that your system is connected to a started IDAA, make sure to set the special register to NONE (which is the default) if: ♦ There are no queries that should be considered for acceleration ♦ There are lots of full prepares for queries that do not qualify for acceleration. In this case set the special register explicitly to ENABLE or ENABLE with FAILBACK for the queries you want to accelerate and set it back to NONE for other queries.
  • 31. 31 #IDUG Monitoring Systems tuning Applications tuning – Parameter markers considerations – Reoptimization options Agenda
  • 32. 32 #IDUG Use dynamic SQL statements – SELECT, UPDATE, INSERT, DELETE – local and distributed Understand statements matching criteria – Statements must be identical character-for-character • including imbedded blanks – as of DB2 10 the trailing blanks are removed from the matching criteria • SELECT list considerations – Prior to DB2 10 caching was of limited value unless using parameter markers • Major enhancement in DB2 10 with CONCENTRATE STATEMENTS option – Authorization IDs must be identical – Selected bind options such as ISOLATION and CURRENTDATA must be identical – Selected special registers such as CURRENT DEGREE must be identical If using local caching do not explicitly re-prepare statements after commits – Still provide for possible sqlcode -514 or -518 No caching for REOPT(ALWAYS) Writing Cache Friendly Applications
  • 33. 33 #IDUG Use of literals typically results in dynamic statements cache inefficiency – A short (cost effective) prepare is possible only if the new statement matches a cached statement character-for-character – New copies of statements that could have shared already cached statement 'thrash' dynamic statements cache – Usage of literals cannot be always avoided, e.g. for some CLI applications, Ruby on Rails, PHP DB2 10 introduces option to reuse a cached, previously prepared statement irrespective of literal values – CONCENTRATE STATEMENTS WITH LITERALS • New option for ATTRIBUTES on PREPARE • New JCC driver's datasource/connection property enableLiteralReplacement='Yes' • New keyword LITERALREPLACEMENT in the ODBC initialization file • CONCENTRATE STATEMENTS OFF (default) causes pre-V10 behaviour – Before a prepared statement is cached each literal is replaced by a single ‘&’ • Additionally, DB2 removes the trailing blacks that follow the statement • ‘&’s are shown instead of literals in instrumentation (e.g. IFCID 317) – Subsequent prepares of the same statement with different literals can result in short prepares • The exact match has a precedence over matching with ‘&’ • The literals must be ‘reusable’ in the prepare context • Mixture of parameter markers ‘?’ and literals results in the pre-V10 behaviour – Monitoring support in DSN_STATEMENT_CACHE_TABLE (column LITERAL_REPL) and IFCID 316: values ‘R’, ‘D’ or ‘ ‘ Concentrating Cached Statements in DB2 10
  • 34. 34 #IDUG Dynamic statements cache efficiency is reduced by using different subsets of columns in otherwise identical INSERT, UPDATE and MERGE statements – Prior to V10 the applications had to prepare separate statements for each combination of columns to be inserted, updated or merged – typical case for data entry/update applications – The reason is a lack of mechanism to indicate that no value is provided for the target column DB2 10 introduces new extended indicator variables – The extended indicator variable is activated via: • PREPARE attributes WITH / WITHOUT EXTENDED INDICATORS • BIND parameter EXTENDEDINDICATOR = YES / NO – A value of -5 means that target column is to be set to its default value – A value of -7 means that target column is to be treated as if it had not been specified – Example: stmt1 = 'UPDATE T1 SET C1=?' PREPARE S1 FROM stmt1 stmt2 = 'UPDATE T1 SET C2=?' PREPARE S2 FROM stmt2 EXECUTE S1 USING :inputvar1 EXECUTE S2 USING :inputvar2 stmt = 'UPDATE T1 SET C1=?, C2=?' PREPARE S1 ATTRIBUTES WITH EXTENDED INDICATORS FROM stmt IND1 = -7 IND2 = -7 EXECUTE S1 USING :inputvar1, :IND2 EXECUTE S1 USING :IND1, :inputvar2 prior to V10 in V10 All-Columns INSERT, UPDATE, MERGE in DB2 10
  • 35. 35 #IDUG When parameter markers are used for dynamic SQL, the DB2 Optimizer cannot take advantage of columns values distribution. A simple example is: For a low card(C1) this most often results in tablespace scan which is very bad if the cursor is opened with a non-existing value of C1. The same negative effect exist whenever there is a skew in column values distribution. REOPT(ALWAYS) is often too strong medicine with significant downsides in performance, concurrency and monitoring. PREPARE ... SELECT ... FROM T WHERE C1 = ? Parameter marker Optimizer Challanges
  • 36. 36 #IDUG Bind option REOPT(ONCE) results in following: – Delaying optimization until the first execute • At that time the parameter marker values are known • DB2 optimizer can use the values and take full advantage of their frequency distribution – Fixing the access plan into the statements cache • Consequently take full advantage of caching – Statement-level hints (given via Access Path Repository) allow different REOPT settings for different statements within the same package In effect only for dynamic SQL and if global caching is activated Use the feature if the first set of values is more representative than the application agnostic set of default values which must be assumed by DB2 otherwise Traditional EXPLAIN is not suitable – See the Monitoring section in this presentation REOPT (ONCE)
  • 37. 37 #IDUG REOPT(AUTO) addresses REOPT(ONCE) exposure which occurs when: – The first set of parameter marker values is not representative regarding DB2 optimization Bind option REOPT(AUTO) instructs DB2 to automatically determine if a new access path is needed to further optimize performance. In effect only for dynamic SQL and if global caching is activated Use the feature if the parameter marker values vary across statement executions so much that occasional reprepare is needed, but still REOPT(ALWAYS) would be an overkill. Traditional EXPLAIN is not suitable – See the Monitoring section in this presentation DSN_STATEMENT_CACHE_TABLE includes two new columns to support REOPT(AUTO): – BIND_RO_TYPE – The current specification of REOPT for the statement: • N – REOPT(NONE) • 1 – REOPT(ONCE) • A – REOPT(AUTO) • 0 – The current plan is deemed optimal and there is no need for REOPT(AUTO) – BIND_RA_TOT – Total number of REBINDs executed due to REOPT(AUTO) REOPT (AUTO)
  • 38. 38 #IDUG DB2 for z/OS Product Documentation – DB2 10 for z/OS: Managing Performance, SC19-2978 – DB2 9 for z/OS: Performance Monitoring and Tuning Guide, SC18-9851 DB2 for z/OS and OS/390 : Squeezing the Most Out of Dynamic SQL - Redbook SG24-6418 DB2 for z/OS: Considerations on Small and Large Packages - Redpaper REDP-4424 Dynamic Statements Cache: Getting the Most Out of It by Namik Hrle - IDUG Solutions Journal Volume 8 Number 2 Memory Management for Dynamic SQL by Thomas Baumann - IDUG NA 2008 References
  • 39. #IDUG Please fill out your session evaluation before leaving! Namik Hrle IBM hrle@de.ibm.com Title: Efficient Monitoring & Tuning of Dynamic SQL