<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE FL_Course SYSTEM "https://www.flane.de/dtd/fl_course095.dtd"><?xml-stylesheet type="text/xsl" href="https://portal.flane.ch/css/xml-course.xsl"?><course productid="19868" language="fr" source="https://portal.flane.ch/swisscom/fr/xml-course/ibm-cv964g" lastchanged="2025-07-29T12:17:56+02:00" parent="https://portal.flane.ch/swisscom/fr/xml-courses"><title>Db2 12 for z/OS SQL Performance and Tuning</title><productcode>CV964G</productcode><vendorcode>IB</vendorcode><vendorname>IBM</vendorname><fullproductcode>IB-CV964G</fullproductcode><version>1</version><objective>&lt;p&gt;After completing this course, students will be able to:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understand and design better indexes&lt;/li&gt;&lt;li&gt;Determine how to work with the optimizer (avoid pitfalls, provide guidence)&lt;/li&gt;&lt;li&gt;Optimize multi-table access&lt;/li&gt;&lt;li&gt;Work with subqueries&lt;/li&gt;&lt;li&gt;Avoid locking problems&lt;/li&gt;&lt;li&gt;Use accounting traces and other tools to locate performance problems in existing SQL&lt;/li&gt;&lt;li&gt;and more&lt;/li&gt;&lt;/ul&gt;</objective><essentials>&lt;ul&gt;

	&lt;li&gt;Familiarity with SQL&lt;/li&gt;&lt;li&gt;Familiarity with Db2 12 for z/OS&lt;/li&gt;&lt;li&gt;Familiarity with Db2 12 for z/OS application programming&lt;/li&gt;&lt;/ul&gt;</essentials><audience>&lt;p&gt;This course is for Db2 12 for z/OS application developers, Db2 12 for z/OS DBAs, and anyone else with a responsibility for SQL performance and tuning in a Db2 12 for z/OS environment.&lt;/p&gt;</audience><contents>&lt;p&gt;Introduction to SQL performance and tuning
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Performance issues&lt;/li&gt;&lt;li&gt;Simple example&lt;/li&gt;&lt;li&gt;Visualizing the problem&lt;/li&gt;&lt;li&gt;Summary&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Performance analysis tools
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Components of response time&lt;/li&gt;&lt;li&gt;Time estimates with VQUBE3&lt;/li&gt;&lt;li&gt;SQL EXPLAIN&lt;/li&gt;&lt;li&gt;The accounting trace&lt;/li&gt;&lt;li&gt;The bubble chart&lt;/li&gt;&lt;li&gt;Performance thresholds&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Index basics
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Indexes&lt;/li&gt;&lt;li&gt;Index structure&lt;/li&gt;&lt;li&gt;Estimating index I/Os&lt;/li&gt;&lt;li&gt;Clustering index&lt;/li&gt;&lt;li&gt;Index page splits&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Access paths
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Classification&lt;/li&gt;&lt;li&gt;Matching versus Screening&lt;/li&gt;&lt;li&gt;Variations&lt;/li&gt;&lt;li&gt;Hash access&lt;/li&gt;&lt;li&gt;Prefetch&lt;/li&gt;&lt;li&gt;Caveat&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
More on indexes
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Include index&lt;/li&gt;&lt;li&gt;Index on expression&lt;/li&gt;&lt;li&gt;Tandom index&lt;/li&gt;&lt;li&gt;Partitioned and partitioning, NPSI and DPSI&lt;/li&gt;&lt;li&gt;Page range screening&lt;/li&gt;&lt;li&gt;Features and limitations&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Tuning methodology and index cost
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Methodology&lt;/li&gt;&lt;li&gt;Index cost: Disk space&lt;/li&gt;&lt;li&gt;Index cost: Maintenance&lt;/li&gt;&lt;li&gt;Utilities and indexes&lt;/li&gt;&lt;li&gt;Modifying and creating indexes&lt;/li&gt;&lt;li&gt;Avoiding sorts&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Index design
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Approach&lt;/li&gt;&lt;li&gt;Designing indexes&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Advanced access paths
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prefetch&lt;/li&gt;&lt;li&gt;List prefetch&lt;/li&gt;&lt;li&gt;Multiple index access&lt;/li&gt;&lt;li&gt;Runtime adaptive index&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Multiple table access
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Join methods&lt;/li&gt;&lt;li&gt;Join types&lt;/li&gt;&lt;li&gt;Designing indexes for joins&lt;/li&gt;&lt;li&gt;Predicting table order&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Subqueries
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Correlated subqueries&lt;/li&gt;&lt;li&gt;Non-correlated subqueries&lt;/li&gt;&lt;li&gt;ORDER BY and FETCH FIRST with subqueries&lt;/li&gt;&lt;li&gt;Global query optimization&lt;/li&gt;&lt;li&gt;Virtual tables&lt;/li&gt;&lt;li&gt;Explain for subqueries&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Set operations (optional)
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;UNION, EXCEPT, and INTERSECT&lt;/li&gt;&lt;li&gt;Rules&lt;/li&gt;&lt;li&gt;More about the set operators&lt;/li&gt;&lt;li&gt;UNION ALL performance improvements&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Table design (optional)
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Number of tables&lt;/li&gt;&lt;li&gt;Clustering sequence&lt;/li&gt;&lt;li&gt;Denormalization&lt;/li&gt;&lt;li&gt;Materialized query tables (MQTs)&lt;/li&gt;&lt;li&gt;Temporal tables&lt;/li&gt;&lt;li&gt;Archive enabled tables&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Working with the optimizer
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Indexable versus non-indexable predicates&lt;/li&gt;&lt;li&gt;Boolean versus non-Boolean predicates&lt;/li&gt;&lt;li&gt;Stage 1 versus stage 2&lt;/li&gt;&lt;li&gt;Filter factors&lt;/li&gt;&lt;li&gt;Helping the optimizer&lt;/li&gt;&lt;li&gt;Pagination&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Locking issues
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The ACID test&lt;/li&gt;&lt;li&gt;Reasons for serialization&lt;/li&gt;&lt;li&gt;Serialization mechanisms&lt;/li&gt;&lt;li&gt;Transaction locking&lt;/li&gt;&lt;li&gt;Lock promotion, escalation, and avoidance&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
More locking issues (optional)
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Skip locked data&lt;/li&gt;&lt;li&gt;Currently committed data&lt;/li&gt;&lt;li&gt;Optimistic locking&lt;/li&gt;&lt;li&gt;Hot spots&lt;/li&gt;&lt;li&gt;Application design&lt;/li&gt;&lt;li&gt;Analyzing lock waits&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Massive batch (optional)
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Batch performance issues&lt;/li&gt;&lt;li&gt;Buffer pool operations&lt;/li&gt;&lt;li&gt;Improving performance&lt;/li&gt;&lt;li&gt;Benefit analysis&lt;/li&gt;&lt;li&gt;Massive deletes&lt;/li&gt;&lt;/ul&gt;</contents><outline>&lt;p&gt;Introduction to SQL performance and tuning
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Performance issues&lt;/li&gt;&lt;li&gt;Simple example&lt;/li&gt;&lt;li&gt;Visualizing the problem&lt;/li&gt;&lt;li&gt;Summary&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Performance analysis tools
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Components of response time&lt;/li&gt;&lt;li&gt;Time estimates with VQUBE3&lt;/li&gt;&lt;li&gt;SQL EXPLAIN&lt;/li&gt;&lt;li&gt;The accounting trace&lt;/li&gt;&lt;li&gt;The bubble chart&lt;/li&gt;&lt;li&gt;Performance thresholds&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Index basics
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Indexes&lt;/li&gt;&lt;li&gt;Index structure&lt;/li&gt;&lt;li&gt;Estimating index I/Os&lt;/li&gt;&lt;li&gt;Clustering index&lt;/li&gt;&lt;li&gt;Index page splits&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Access paths
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Classification&lt;/li&gt;&lt;li&gt;Matching versus Screening&lt;/li&gt;&lt;li&gt;Variations&lt;/li&gt;&lt;li&gt;Hash access&lt;/li&gt;&lt;li&gt;Prefetch&lt;/li&gt;&lt;li&gt;Caveat&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
More on indexes
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Include index&lt;/li&gt;&lt;li&gt;Index on expression&lt;/li&gt;&lt;li&gt;Tandom index&lt;/li&gt;&lt;li&gt;Partitioned and partitioning, NPSI and DPSI&lt;/li&gt;&lt;li&gt;Page range screening&lt;/li&gt;&lt;li&gt;Features and limitations&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Tuning methodology and index cost
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Methodology&lt;/li&gt;&lt;li&gt;Index cost: Disk space&lt;/li&gt;&lt;li&gt;Index cost: Maintenance&lt;/li&gt;&lt;li&gt;Utilities and indexes&lt;/li&gt;&lt;li&gt;Modifying and creating indexes&lt;/li&gt;&lt;li&gt;Avoiding sorts&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Index design
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Approach&lt;/li&gt;&lt;li&gt;Designing indexes&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Advanced access paths
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prefetch&lt;/li&gt;&lt;li&gt;List prefetch&lt;/li&gt;&lt;li&gt;Multiple index access&lt;/li&gt;&lt;li&gt;Runtime adaptive index&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Multiple table access
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Join methods&lt;/li&gt;&lt;li&gt;Join types&lt;/li&gt;&lt;li&gt;Designing indexes for joins&lt;/li&gt;&lt;li&gt;Predicting table order&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Subqueries
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Correlated subqueries&lt;/li&gt;&lt;li&gt;Non-correlated subqueries&lt;/li&gt;&lt;li&gt;ORDER BY and FETCH FIRST with subqueries&lt;/li&gt;&lt;li&gt;Global query optimization&lt;/li&gt;&lt;li&gt;Virtual tables&lt;/li&gt;&lt;li&gt;Explain for subqueries&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Set operations (optional)
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;UNION, EXCEPT, and INTERSECT&lt;/li&gt;&lt;li&gt;Rules&lt;/li&gt;&lt;li&gt;More about the set operators&lt;/li&gt;&lt;li&gt;UNION ALL performance improvements&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Table design (optional)
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Number of tables&lt;/li&gt;&lt;li&gt;Clustering sequence&lt;/li&gt;&lt;li&gt;Denormalization&lt;/li&gt;&lt;li&gt;Materialized query tables (MQTs)&lt;/li&gt;&lt;li&gt;Temporal tables&lt;/li&gt;&lt;li&gt;Archive enabled tables&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Working with the optimizer
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Indexable versus non-indexable predicates&lt;/li&gt;&lt;li&gt;Boolean versus non-Boolean predicates&lt;/li&gt;&lt;li&gt;Stage 1 versus stage 2&lt;/li&gt;&lt;li&gt;Filter factors&lt;/li&gt;&lt;li&gt;Helping the optimizer&lt;/li&gt;&lt;li&gt;Pagination&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Locking issues
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The ACID test&lt;/li&gt;&lt;li&gt;Reasons for serialization&lt;/li&gt;&lt;li&gt;Serialization mechanisms&lt;/li&gt;&lt;li&gt;Transaction locking&lt;/li&gt;&lt;li&gt;Lock promotion, escalation, and avoidance&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
More locking issues (optional)
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Skip locked data&lt;/li&gt;&lt;li&gt;Currently committed data&lt;/li&gt;&lt;li&gt;Optimistic locking&lt;/li&gt;&lt;li&gt;Hot spots&lt;/li&gt;&lt;li&gt;Application design&lt;/li&gt;&lt;li&gt;Analyzing lock waits&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Massive batch (optional)
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Batch performance issues&lt;/li&gt;&lt;li&gt;Buffer pool operations&lt;/li&gt;&lt;li&gt;Improving performance&lt;/li&gt;&lt;li&gt;Benefit analysis&lt;/li&gt;&lt;li&gt;Massive deletes&lt;/li&gt;&lt;/ul&gt;</outline><objective_plain>After completing this course, students will be able to:



- Understand and design better indexes
- Determine how to work with the optimizer (avoid pitfalls, provide guidence)
- Optimize multi-table access
- Work with subqueries
- Avoid locking problems
- Use accounting traces and other tools to locate performance problems in existing SQL
- and more</objective_plain><essentials_plain>- Familiarity with SQL
- Familiarity with Db2 12 for z/OS
- Familiarity with Db2 12 for z/OS application programming</essentials_plain><audience_plain>This course is for Db2 12 for z/OS application developers, Db2 12 for z/OS DBAs, and anyone else with a responsibility for SQL performance and tuning in a Db2 12 for z/OS environment.</audience_plain><contents_plain>Introduction to SQL performance and tuning



- Performance issues
- Simple example
- Visualizing the problem
- Summary

Performance analysis tools



- Components of response time
- Time estimates with VQUBE3
- SQL EXPLAIN
- The accounting trace
- The bubble chart
- Performance thresholds

Index basics



- Indexes
- Index structure
- Estimating index I/Os
- Clustering index
- Index page splits

Access paths



- Classification
- Matching versus Screening
- Variations
- Hash access
- Prefetch
- Caveat

More on indexes



- Include index
- Index on expression
- Tandom index
- Partitioned and partitioning, NPSI and DPSI
- Page range screening
- Features and limitations

Tuning methodology and index cost



- Methodology
- Index cost: Disk space
- Index cost: Maintenance
- Utilities and indexes
- Modifying and creating indexes
- Avoiding sorts

Index design



- Approach
- Designing indexes

Advanced access paths



- Prefetch
- List prefetch
- Multiple index access
- Runtime adaptive index

Multiple table access



- Join methods
- Join types
- Designing indexes for joins
- Predicting table order

Subqueries



- Correlated subqueries
- Non-correlated subqueries
- ORDER BY and FETCH FIRST with subqueries
- Global query optimization
- Virtual tables
- Explain for subqueries

Set operations (optional)



- UNION, EXCEPT, and INTERSECT
- Rules
- More about the set operators
- UNION ALL performance improvements

Table design (optional)



- Number of tables
- Clustering sequence
- Denormalization
- Materialized query tables (MQTs)
- Temporal tables
- Archive enabled tables

Working with the optimizer



- Indexable versus non-indexable predicates
- Boolean versus non-Boolean predicates
- Stage 1 versus stage 2
- Filter factors
- Helping the optimizer
- Pagination

Locking issues



- The ACID test
- Reasons for serialization
- Serialization mechanisms
- Transaction locking
- Lock promotion, escalation, and avoidance

More locking issues (optional)



- Skip locked data
- Currently committed data
- Optimistic locking
- Hot spots
- Application design
- Analyzing lock waits

Massive batch (optional)



- Batch performance issues
- Buffer pool operations
- Improving performance
- Benefit analysis
- Massive deletes</contents_plain><outline_plain>Introduction to SQL performance and tuning



- Performance issues
- Simple example
- Visualizing the problem
- Summary

Performance analysis tools



- Components of response time
- Time estimates with VQUBE3
- SQL EXPLAIN
- The accounting trace
- The bubble chart
- Performance thresholds

Index basics



- Indexes
- Index structure
- Estimating index I/Os
- Clustering index
- Index page splits

Access paths



- Classification
- Matching versus Screening
- Variations
- Hash access
- Prefetch
- Caveat

More on indexes



- Include index
- Index on expression
- Tandom index
- Partitioned and partitioning, NPSI and DPSI
- Page range screening
- Features and limitations

Tuning methodology and index cost



- Methodology
- Index cost: Disk space
- Index cost: Maintenance
- Utilities and indexes
- Modifying and creating indexes
- Avoiding sorts

Index design



- Approach
- Designing indexes

Advanced access paths



- Prefetch
- List prefetch
- Multiple index access
- Runtime adaptive index

Multiple table access



- Join methods
- Join types
- Designing indexes for joins
- Predicting table order

Subqueries



- Correlated subqueries
- Non-correlated subqueries
- ORDER BY and FETCH FIRST with subqueries
- Global query optimization
- Virtual tables
- Explain for subqueries

Set operations (optional)



- UNION, EXCEPT, and INTERSECT
- Rules
- More about the set operators
- UNION ALL performance improvements

Table design (optional)



- Number of tables
- Clustering sequence
- Denormalization
- Materialized query tables (MQTs)
- Temporal tables
- Archive enabled tables

Working with the optimizer



- Indexable versus non-indexable predicates
- Boolean versus non-Boolean predicates
- Stage 1 versus stage 2
- Filter factors
- Helping the optimizer
- Pagination

Locking issues



- The ACID test
- Reasons for serialization
- Serialization mechanisms
- Transaction locking
- Lock promotion, escalation, and avoidance

More locking issues (optional)



- Skip locked data
- Currently committed data
- Optimistic locking
- Hot spots
- Application design
- Analyzing lock waits

Massive batch (optional)



- Batch performance issues
- Buffer pool operations
- Improving performance
- Benefit analysis
- Massive deletes</outline_plain><duration unit="d" days="3">3 jours</duration><pricelist><price country="CH" currency="CHF">2400.00</price><price country="FR" currency="EUR">2250.00</price><price country="DE" currency="EUR">2550.00</price></pricelist><miles/></course>