Db2 CICS Guide
Db2 CICS Guide
SC33-1939-01
SC33-1939-01
Note! Before using this information and the product it supports, be sure to read the general information under Notices on page ix.
Third edition (March 1999) This edition applies to Release 3 of CICS Transaction Server for OS/390, program number 5655-147, and to all subsequent versions, releases, and modications until otherwise indicated in new editions. Make sure you are using the correct edition for the level of the product. This book is based on the CICS DB2 Guide for CICS Transaction Server for OS/390 Release 2, SC33-1939-00. Changes from that edition are marked by vertical lines to the left of the changes. The CICS Transaction Server for OS/390 Release 2 edition remains applicable and current for users of CICS Transaction Server for OS/390 Release 2, and may be ordered using its order number, SC33-1939-00. Order publications through your IBM representative or the IBM branch office serving your locality. Publications are not stocked at the address given below. At the back of this publication is a page entitled Sending your comments to IBM. If you want to make comments, but the methods described are not available to you, please address them to: IBM United Kingdom Laboratories, Information Development, Mail Point 095, Hursley Park, Winchester, Hampshire, England, SO21 2JN. When you send information to IBM, you grant IBM a nonexclusive right to use or distribute the information in any way it believes appropriate without incurring any obligation to you. Copyright International Business Machines Corporation 1998, 1999. All rights reserved. US Government Users Restricted Rights Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
Contents
Notices . . . . . . . . . . . . . . . . . . . . . . . . . . . Programming interface information . . . . . . . . . . . . . . . . . Trademarks . . . . . . . . . . . . . . . . . . . . . . . . . . Preface . . . . . . . . . . . . . Who this book is for. . . . . . . . . What this book is about . . . . . . . What you need to know before reading this How to use this book . . . . . . . . Determining if a publication is current . Notes on terminology . . . . . . . . . . . . . . book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix x x xi xi xi xi xi xi xii xiii xiii xiii xiv xiv xv 1 1 3 4 4 5 5 7 7 7 8 8 8 8 11 11 15 15 15 15 16 16 16 16 17 18 19 20
Bibliography . . . . . . . . . . . . . . . . CICS Transaction Server for OS/390 . . . . . . . CICS books for CICS Transaction Server for OS/390 CICSPlex SM books for CICS Transaction Server for Other CICS books . . . . . . . . . . . . . Summary of Changes
. . . . . . . . . OS/390 . . .
. . . . . . . . . . . . . . . . . . . . . interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Chapter 1. Overview of the CICS Database 2 (DB2) Introduction to the CICS attachment facility . . . . Overview of the CICS DB2 resource control table . . Benets of using online CICS DB2 resource denition Function . . . . . . . . . . . . . . . . System availability . . . . . . . . . . . . Performance . . . . . . . . . . . . . .
Chapter 2. Installation and migration considerations . . DB2 migration . . . . . . . . . . . . . . . . . . Changes to the INITPARM system initialization parameter. CICS startup JCL requirements . . . . . . . . . . . RDO for DB2 resource denitions . . . . . . . . . . Effect on application programs . . . . . . . . . . . Migration using RDO for DB2 resource denition . . . . Changed defaults . . . . . . . . . . . . . . . CICS DB2 attachment operations with the CSD . . . . Chapter 3. Operations with CICS DB2 . . . . . . Starting the CICS DB2 attachment facility. . . . . . Automatic connection at CICS initialization . . . . Manual connection . . . . . . . . . . . . . Stopping the CICS DB2 attachment facility . . . . . Automatic disconnection at CICS termination. . . . Manual disconnection . . . . . . . . . . . . Avoiding the need for manual resolution of indoubt units Monitoring the attachment facility . . . . . . . . . Entering DB2 commands . . . . . . . . . . . . Starting SMF for DB2 accounting, statistics and tuning . Starting GTF for DB2 accounting, statistics and tuning . . . . . . . . of . . . .
. . . . . . . . . . . . . . work . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . (UOWs) . . . . . . . . . . . .
iii
Issuing commands to DB2 using Environment . . . . . . Syntax . . . . . . . . Abbreviation . . . . . . Authorization . . . . . . Parameter description . . . Usage note . . . . . . . Example . . . . . . . . DSNC DISCONNECT . . . . Environment . . . . . . Syntax . . . . . . . . Abbreviation . . . . . . Authorization . . . . . . Parameter description . . . Usage notes . . . . . . Example . . . . . . . . DSNC DISPLAY . . . . . . Environment . . . . . . Syntax . . . . . . . . Abbreviation . . . . . . Authorization . . . . . . Parameter description . . . Parameter description . . . Parameter description . . . Environment . . . . . . DISPLAY PLAN or TRAN. . DISPLAY STATISTICS output DSNC MODIFY . . . . . . Environment . . . . . . Abbreviation . . . . . . Authorization . . . . . . Parameter description . . . Usage notes . . . . . . Examples . . . . . . . DSNC STOP . . . . . . . Environment . . . . . . Syntax . . . . . . . . Abbreviation . . . . . . Authorization . . . . . . Parameter description . . . Usage notes . . . . . . Examples . . . . . . . DSNC STRT . . . . . . . Environment . . . . . . Syntax . . . . . . . . Abbreviation . . . . . . Authorization . . . . . . Parameter description . . . Usage notes . . . . . . Examples . . . . . . .
DSNC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21 21 22 22 22 22 22 23 23 23 23 23 23 24 24 24 24 24 25 25 25 25 25 26 26 26 27 29 29 29 29 29 30 30 31 31 31 31 31 32 32 32 33 33 33 34 34 34 34 34 37 37 38 38 39
Chapter 5. Dening the CICS DB2 connection CICS DB2 thread types . . . . . . . . . MVS subtasks . . . . . . . . . . . . Main activities in SQL processing . . . . . . Thread creation . . . . . . . . . . .
iv
SQL processing . . . . . . . . . Commit processing . . . . . . . . Thread termination . . . . . . . . Coordinating DB2CONN, DB2ENTRY, and Recommended combinations . . . . Processing SQL requests. . . . . . Locking . . . . . . . . . . . . Security . . . . . . . . . . . . Grouping transactions . . . . . . . Creating, using, and terminating threads . Protected entry threads . . . . . . High priority unprotected entry threads . Low priority unprotected entry threads . Pool threads . . . . . . . . . . Chapter 6. Security . . . . . . . . Overview. . . . . . . . . . . . . RACF connection authorization . . . . User authentication . . . . . . . . . CICS security . . . . . . . . . . . Transaction attach security . . . . . CICS command security . . . . . . CICS resource security . . . . . . Surrogate security . . . . . . . . AUTHTYPE security . . . . . . . CICS DB2 attachment facility command DB2 command authorization . . . . DB2 security . . . . . . . . . . . DB2 authorization IDs . . . . . . . Authorizing commands to DB2 . . . . Plan execution authorization . . . . Static SQL . . . . . . . . . . . Dynamic SQL . . . . . . . . . . Qualied or unqualied SQL . . . .
. . . . . . BIND . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40 40 41 42 42 42 43 44 44 44 45 46 47 47 49 49 50 52 52 52 53 53 55 56 56 57 58 58 60 61 63 64 64 65 65 65 65 66 67 68 69 69 69 71
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . authorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Chapter 7. Program preparation and testing . . . The test environment . . . . . . . . . . . . One CICS system . . . . . . . . . . . . Two CICS systems . . . . . . . . . . . . Preparation steps . . . . . . . . . . . . . What to bind after a program change . . . . . . Bind options . . . . . . . . . . . . . . . CICS SQLCA formatting routine . . . . . . . . Program testing and debugging . . . . . . . . Going into production . . . . . . . . . . . . Additional considerations for going into production
Chapter 8. Customization . . . . . . . . . . . . . . . . . . . . 73 Dynamic plan exits . . . . . . . . . . . . . . . . . . . . . . . 73 Chapter 9. Accounting . . . . . . . . . Overview. . . . . . . . . . . . . . . CICS-supplied information . . . . . . . . DB2-supplied information . . . . . . . . . Accounting for processor usage . . . . . . CICS-generated processor usage information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 75 75 76 77 77
Contents
DB2-generated processor usage information . . Adding CICS and DB2 transaction processor times Accounting considerations for DB2 . . . . . . . Types of accounting data . . . . . . . . . . Availability of accounting data . . . . . . . . Summary of accounting for DB2 resources . . . . Chapter 10. Application design considerations . Overview. . . . . . . . . . . . . . . . CICS DB2 design criteria . . . . . . . . . . Using qualied and unqualied SQL . . . . . Locking strategy . . . . . . . . . . . . Bind options . . . . . . . . . . . . . Using protected threads . . . . . . . . . Security . . . . . . . . . . . . . . . Dynamic plan switching . . . . . . . . . Packages . . . . . . . . . . . . . . Avoiding AEY9 abends . . . . . . . . . CICS and CURSOR WITH HOLD option . . . EXEC CICS RETURN IMMEDIATE command . Application architecture . . . . . . . . . . A sample application . . . . . . . . . . Switching CICS transaction codes . . . . . One large plan . . . . . . . . . . . . Many small plans . . . . . . . . . . . Transaction grouping . . . . . . . . . . A fallback solution . . . . . . . . . . . Table-controlled program ow . . . . . . . Using packages . . . . . . . . . . . . Programming . . . . . . . . . . . . . . SQL language . . . . . . . . . . . . . Views . . . . . . . . . . . . . . . . Updating index columns . . . . . . . . . Dependency of unique indexes . . . . . . Commit processing . . . . . . . . . . . Serializing transactions . . . . . . . . . Page contention . . . . . . . . . . . . Chapter 11. Problem determination Wait types . . . . . . . . . . Messages . . . . . . . . . . Trace . . . . . . . . . . . . CSUB trace. . . . . . . . . Dump . . . . . . . . . . . . Transaction abend codes . . . . . Execution Diagnostic Facility (EDF) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78 82 82 83 85 89 91 91 91 92 93 94 94 95 95 96 97 99 100 100 101 102 102 103 104 105 105 110 112 112 113 113 113 113 114 114 117 117 120 120 123 125 125 125 129 129 129 130 131 131 142 142 145
Chapter 12. Monitoring, tuning, and handling Monitoring . . . . . . . . . . . . . . Monitoring tools . . . . . . . . . . . Monitoring the CICS attachment facility . . Monitoring the CICS transactions . . . . . Monitoring DB2 when used with CICS . . . Monitoring CICS . . . . . . . . . . . CICS DB2 statistics . . . . . . . . . . Monitoring the overall MVS system . . . .
deadlocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
vi
Tuning. . . . . . . . . . . . . . Tuning a CICS application . . . . . Tuning the CICS attachment facility . . Handling deadlocks . . . . . . . . . Two deadlock types . . . . . . . . Deadlock detection . . . . . . . . Finding the resources involved . . . . Finding the SQL statements involved . Finding the access path used . . . . Determining why the deadlock occurred Making changes . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
145 146 147 147 148 149 149 149 150 150 150
Contents
vii
viii
Notices
This information was developed for products and services offered in the U.S.A. IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the users responsibility to evaluate and verify the operation of any non-IBM product, program, or service. IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not give you any license to these patents. You can send license inquiries, in writing, to: IBM Director of Licensing IBM Corporation North Castle Drive Armonk, NY 10504-1785 U.S.A. For license inquiries regarding double-byte (DBCS) information, contact the IBM Intellectual Property Department in your country or send inquiries, in writing, to: IBM World Trade Asia Corporation Licensing 2-31 Roppongi 3-chome, Minato-ku Tokyo 106, Japan The following paragraph does not apply in the United Kingdom or any other country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore this statement may not apply to you. This publication could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice. Licensees of this program who wish to have information about it for the purpose of enabling: (i) the exchange of information between independently created programs and other programs (including this one) and (ii) the mutual use of the information which has been exchanged, should contact IBM United Kingdom Laboratories, MP151, Hursley Park, Winchester, Hampshire, England, SO21 2JN. Such information may be available, subject to appropriate terms and conditions, including in some cases, payment of a fee.
ix
The licensed program described in this document and all licensed material available for it are provided by IBM under terms of the IBM Customer Agreement, IBM International Programming License Agreement, or any equivalent agreement between us.
Attention Do not use this Diagnosis, Modication or Tuning Information as a programming interface. Diagnosis, Modication or Tuning Information is identied where it occurs, by an introductory statement to a chapter or section. This book contains sample programs. Permission is hereby granted to copy and store the sample programs into a data processing machine and to use the stored copies for study and instruction only. No permission is granted to use the sample programs for any other purpose.
Trademarks
The following terms are trademarks of International Business Machines Corporation in the United States, or other countries, or both:
CICS CICS/MVS C/370 DB2 MVS/ESA NetView RACF RMF 3090 CICS/ESA CICSPlex SM DATABASE 2 IBM MVS Parallel Sysplex OS/390 Resource Measurement Facility VTAM
Other company, product, and service names may be trademarks or service marks of others.
Preface
Who this book is for
This book is for anyone who uses, or is considering using, the CICS Transaction Server for OS/390 Release 3 DB2 interface.
xi
Notes on terminology
When the term CICS is used without any qualication in this book, it refers to the CICS element of IBM CICS Transaction Server for OS/390. CICSPlex SM is used for CICSPlex System Manager. MVS is used for the operating system, which can be either an element of OS/390, or MVS/Enterprise System Architecture System Product (MVS/ESA SP).
xii
Bibliography
CICS Transaction Server for OS/390
CICS CICS CICS CICS CICS Transaction Transaction Transaction Transaction Transaction Server Server Server Server Server for for for for for OS/390: OS/390: OS/390: OS/390: OS/390: Planning for Installation Release Guide Migration Guide Program Directory Licensed Program Specication
GC33-1789 GC34-5352 GC34-5353 GC33-1706 GC33-1707
xiii
If you have any questions about the CICS Transaction Server for OS/390 library, see CICS Transaction Server for OS/390: Planning for Installation which discusses both hardcopy and softcopy books and the ways that the books can be ordered.
xiv
Summary of Changes
This edition of the CICS DB2 Guide is based on the CICS DB2 Guide for CICS Transaction Server for OS/390 Release 2. Major changes for this edition provide information on the changes to the INITPARM system initialization parameter now that CICS no longer supports running the CICS DB2 attachment facility by specifying the DSNCRCT macro in the PARM statement. The changes in this book are indicated by a vertical bar to the left of the text.
xv
xvi
same protected entry thread. Entry threads dened as unprotected are terminated if no CICS transaction uses them. Pool threads Pool threads are used for all transactions and commands not using an entry thread or a DB2 command thread. Pool threads are intended for low volume transactions, and overow transactions from entry threads and DB2 command threads. The CICS DB2 attachment facility provides CICS applications with access to DB2 data while operating in the CICS environment. CICS applications, therefore, can access both DB2 data and CICS data. CICS coordinates recovery of both DB2 and CICS data if transaction or system failure occurs. The relationship between DB2 and CICS is shown in Figure 1 DB2 requires several different address spaces as follows:
CICS Connections CICS address space DSN1MSTR address space DSN1DBM1 address space DSN1DIST address space IRLMPROC address space DSN1SPAS address space DB2 Subsystem
DSN1MSTR for system services that perform a variety of system-related functions. DSN1DBM1 for database services that manipulate most of the structures in user-created databases. DSN1DIST for distributed data facilities that provide support for remote requests. IRLMPROC for the internal resource lock manager (IRLM), which controls DB2 locking. DSN1SPAS for stored procedures, which provide an isolated execution environment for user-written SQL. When an application program issues its rst SQL request the CICS resource manager interface (RMI) processes the request and passes control to the attachment facilitys task related user exit (TRUE). A transaction thread is scheduled by the CICS attachment facility, and at this stage DB2 checks authorization, creates control blocks and allocates the application plan. When the SQL request completes DB2 passes data back to the CICS attachment facility, and the CICS task regains
control until the CICS transaction issues another SQL request. Finally, the CICS attachment facility returns control to the CICS application program. Figure 2 shows an overview of the CICS DB2 attachment facility.
CICS ADDRESS SPACE CICS CONTROL ATTACHMENT FACILITY CONTROL DB2 ADDRESS SPACES
'DSNC' L TRANS I
Thread 1 TCB1
COMMAND PROCESSOR
DB2 DATABASE SERVICES APPL TRANS L I CICS DB2 TASK RELATED USER EXIT (DFHD2EX1) Thread 2 TCB2 APPLICATION PLAN
APPL TRANS
L I
Thread 3 TCB3
APPLICATION PLAN
Using RDO the following objects can be dened and installed: DB2CONN Denes the global attributes of the CICS DB2 interface and denes the attributes of pool threads and command threads. DB2ENTRY Denes entry threads to be used by a specic transaction or group of transactions. DB2TRAN Denes additional transactions to be associated with a particular DB2ENTRY. The objects can also be dened in batch using DFHCSDUP. CICSplex SM uses EXEC CICS CREATE to install these objects. For more information about CICS DB2 denitions, see the CICS Resource Denition Guide.
Function
The function of the CICS DB2 attachment facility is enhanced by using online resource denition in the following ways: v Existing macro-dened RCT load modules can be easily migrated to the CICS system denition le (CSD) using an RCT migration utility. v The CICS DB2 attachment facility is fully integrated into CICS providing enhanced rst failure data capture, enhanced messages with NLS support, more tracing including exception tracing, and system dump support with formatting integrated into the CICS IPCS verbexit. v It enables management of the CICS DB2 interface by CICSplex SM, including single system image and single point of denition across a CICSplex. v The CICS DB2 denitions become a CICS-managed resource which provides a consistent end user interface: CEDA and DFHCSDUP for dening and installing entries EXEC CICS CREATE for installing entries CEMT/EXEC CICS INQUIRE, CEMT/EXEC CICS SET, and CEMT/EXEC CICS DISCARD for manipulating installed entries. | | | | | Enhancements made to the CICS DB2 attachment facility before CICS Transaction Server for OS/390 Release 3 included: Improved CICS DB2 statistics integrated with CICS Improved attachment facility shutdown coordinated with CICS shutdown Improved TCB management
| | |
System availability
Online CICS DB2 resource denition allows you to add, delete or change denitions without the need to shut down the interface between CICS and DB2. You are therefore provided with continuous availability.
Performance
Online CICS DB2 resource denition provides benets to performance as follows: v CICS DB2 control blocks are moved above the 16MB line providing virtual storage constraint relief (VSCR). v Online CICS DB2 resource denition provides the ability to specify generic transaction names, using wildcard symbols, which can reduce the number of denitions required in CICS.
DB2 migration
CICS supports the following releases of DB2: v DB2 for MVS/ESA, Version 4 Release 1 v DATABASE 2 Server for OS/390 (DB2 for OS/930) Version 5 Release 1. v DATABASE 2 Server for OS/390 (DB2 for OS/930) Version 6 Release 1. CICS provides a CICS DB2 attachment facility (the CICS DB2 adaptor) that works with all supported releases of DB2. The CICS DB2 attachment facility is shipped on the CICS Transaction Server for OS/390 product tape, and you must use this version of the adaptor to connect a CICS Transaction Server region to DB2. The CICS DB2 adaptor has been supplied by CICS since CICS/ESA 4.1. Always use the correct CICS DB2 adaptor for the release of CICS under which a region is runningthe CICS 4.1 adaptor for a CICS 4.1 region, and so on. The DB2 program product continues to supply the earlier version of the CICS attachment facility to support DB2 connections with releases of CICS earlier than CICS 4.1. The CICS DB2 adaptor and the DSNCRCT macro are now wholly owned by, and incorporated in, CICS. For information about this and other changes, see RDO for DB2 resource denitions on page 8. To access DB2 databases using multisystem data sharing across an MVS Parallel Sysplex requires DB2 4.1 or later.
| | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
resource denitions, and you can add new DB2ENTRY and DB2TRAN denitions while the CICS DB2 attachment facility is active. To use the CICS DB2 attachment facility, the minimum migration requirements are: 1. Reassemble your existing RCTs with the DSNCRCT macro from CICSTS13.CICS.SDFHMAC. 2. Migrate the reassembled RCTs to the CSD using DFHCSDUP. 3. Add the migrated GROUPs to a suitable list specied on the GRPLIST system initialization parameter 4. Change any INITPARM denitions in the SIT or SIT overrides to remove any RCT suffix specied. The syntax of the INITPARM is INITPARM=(DFHD2INI=yyyy) (where yyyy is the 1 to 4 character DB2 subsystem ID). The INITPARM parameter is only used to override a blank DB2 ID in the DB2CONN denition. If the DB2CONN denition contains a non blank DB2 ID parameter this value is always used, regardless of the INITPARM specication. 5. Upgrade the CSD Run a DFHCSDUP job to upgrade the CICS DB2 denitions in the IBM-supplied group, DFHDB2. If you are migrating from CICS/ESA Version 3 or earlier, ensure that any previous user-dened group of CICS DB2 attach denitions are not installed use the IBM-supplied group DFHDB2. 6. Change the PLTPI Change and reassemble the PLTPI table to specify program DFHD2CM0. This module replaces the DSN2COM0, DSN2COM1, DSNCCOM0, or DSNCCOM1 modules used in earlier releases to connect CICS to DB2 during startup. Alternatively, avoid specifying DFHD2CM0 in a PLTPI table altogether by specifying system initialization parameter DB2CONN=YES. This causes CICS to invoke the CICS DB2 attachment facility startup module automatically without requiring an entry in the PLTPI for the CICS DB2 adaptor module. 7. Change the PLTSD table to remove either DSN2COM0, DSN2COM1, DSNCCOM0, or DSNCCOM1, the modules used in earlier releases to disconnect CICS from DB2 during warm shutdown. The CICS DB2 attachment facility now uses the RMI shutdown function, meaning that it is called automatically to shutdown the interface when CICS is shutdown as follows: v The CICS DB2 interface is closed normally during a warm shutdown of CICS. v The CICS DB2 interface is force closed during an immediate shutdown of CICS. v Shutdown of the CICS DB2 interface is not initiated if CICS is cancelled or terminates abnormally. 8. Change programs that START or STOP the CICS DB2 connection Change application programs that start or stop the DB2 connection by linking to DSN2COM0, DSNCCOM0, DSN2COM1, or DSNCCOM1 (start) or DSN2COM1, DSNCCOM1, DSN2COM2, or DSNCCOM2, (stop). To start the CICS DB2 connection, change application programs to either: v Issue an EXEC CICS SET DB2CONN CONNECTED command (this is the recomended programming interface). v Link to DFHD2CM0 instead of DSN2COM0 or DSNCCOM0. To stop the CICS DB2 connection, change applications to either:
| | | | | | | | | | | | | | | | | | | | | | |
v Issue an EXEC CICS SET DB2CONN NOTCONNECTED command (this is the recommended programming interface). v Link to DFHD2CM2 or DFHD2CM3 instead of DSN2COM2 or DSNCCOM2. Check the use of EXTRACT EXIT PROGRAM(...) for DB2 interface Applications issuing the EXEC CICS EXTRACT EXIT PROGRAM(...) ENTRYNAME(DSNCSQL) command, where the program name is DSNCEXT1 or DSN2EXT1, continue to work correctly. CICS dynamically substitutes program name DFHD2EX1, the CICS DB2 task-related user exit. Note that the entryname is still DSNCSQL. New application programs should use a program name of DFHD2EX1. Similarly, application programs that issue the EXEC CICS INQUIRE EXITPROGRAM(DSN2EXT1) ENTRYNAME(DSNCSQL) command continue to work correctly. CICS automatically substitutes name DFHD2EX1. New application programs should use the exit program name DFHD2EX1. In earlier releases of the CICS DB2 attachment facility, more than one task-related user exit is enabled. In addition to the exit with entryname DSNCSQL, earlier releases also support exits with entrynames DSNCIFC and DSNCCMD. Now, all requests through the CICS DB2 attachment facility are handled by a single task-related user exit program, DFHD2EX1, with entryname DSNCSQL. EXTRACT or INQUIRE EXITPROGRAM commands using entry names of DSNCIFC or DSNCCMD fail with INVEXITREQ (on the EXTRACT command) and PGMIDERR (on the INQUIRE command).
10
Each generic TXID is dened on a separate TYPE=ENTRY macro The RDONAME parameter is specied to supply a valid CSD object name. For example, if you dene:
DSNCRCT TYPE=ENTRY,TXID=J+++,RDONAME=J DSNCRCT TYPE=ENTRY,TXID=D*,RDONAME=D DSNCRCT TYPE=ENTRY,TXID=(ANDY,BILL,CARL),RDONAME=A
You cannot dene multiple generic transids referring to the same entry in the DSNCRCT macro, and these must be dened explicitly in the CSD using the DEFINE command. v You can edit the DSNCRCT source macros to include a TYPE=GROUP, GROUP=groupname, to specify the group in which the utility should create the DB2 objects. All objects are created in the specied group until another TYPE=GROUP is encountered. If you omit the GROUPNAME parameter, DFHCSDUP uses a default group name of RCTxx where xx is the 1 or 2 character RCT suffix.
Changed defaults
The defaults for many of the new DB2 resource denition parameters are different from the defaults of their macro equivalents. Most of the defaults of the DSNCRCT macro supplied in CICSTS13.CICS.SDFHMAC are unchanged from the DSNCRCT macro supplied in previous releases. If the DSNCRCT macro generates a default value that is changed from a previous release, it ags it with an MNOTE 5 during table assembly. The default parameters generated in an assembled RCT are migrated unchanged to the CSD.
11
1. The DSNC STRT command, if specied 2. The DB2CONN resource denition, if DB2ID is specied 3. The INITPARM system initialization parameter, if specied (and DB2ID is blank in DB2CONN) 4. The default subsystem ID of DSN You can use the DSNC STOP <QUIESCE|FORCE> command to stop the CICS DB2 attachment facility. The QUIESCE option now waits for all tasks to complete. In releases of CICS earlier than CICS Transaction Server for OS/390 1.2., a quiesce waits only for current units of work to complete. During shutdown of the CICS DB2 attachment facility initiated by DSNC STOP, the terminal remains locked until the stop is complete, when message DFHDB2025 is issued. As an alternative to the DSNC command, you can start and stop the CICS DB2 attachment facility using the EXEC CICS SET DB2CONN CONNECTED|NOTCONNECTED commands. You can also stop the CICS DB2 attachment facility by starting the CICS-supplied transactions CDBQ and CDBF from an application program, using an EXEC CICS START command. CDBQ causes a quiesce close and CDBF causes a force close. CICS DB2 attachment facility command changes The pool section of the DB2CONN resource denition does not have a TXID parameter associated with it. To modify the number of threads allowed on the pool, use reserved name CEPL on the DSNC MODIFY TRANS command. For example, issue the following command (where n is the new number of threads).
DSNC MODIFY TRANS CEPL n
The DSNC DISP TRAN tttt command now displays all threads running for a particular transid, instead of all the transactions associated with an RCT entry. In earlier releases, CICS uses the tttt operand to locate an RCT entry and then displays all the threads for that entry. When you use the DSNC DISP STAT command, CICS displays statistics for DSNC commands on a line beginning '*COMMAND'. Pool thread statistics are displayed on a line beginning *POOL. When modifying an RCT entry using the DSNC MODIFY TRANS tttt command, specify tttt exactly as it was dened in the RCT. If you dened a generic TXID, you must refer to the generic name when modifying it with a DSNC command. For example, if you have transactions called TAB and TAC, but they are dened generically as TA*, you can modify these on a DSNC command only by their generic name:
DSNC MODIFY TRANS TA*
and not by their specic names TAB and TAC. SQL processing User application programs do not need to be reassembled or rebound. Dynamic plan exits Dynamic plan exits can run unchanged and they do not need to be reassembled. The parameters passed to the exits are unchanged. However,
12
you should be aware that dynamic plan switching can occur in new circumstances, and this could affect the operation of your dynamic plan exits. A dynamic plan exit is invoked to determine which plan to use at the start of the rst unit-of-work (UOW) of the transaction. This is referred to as dynamic plan selection. A dynamic plan exit can also be invoked at the start of a subsequent UOW within the same transaction (provided the thread was released at syncpoint) to determine what plan to use for the next UOW. The plan exit can then decide to use a different plan. For this reason, this is referred to as dynamic plan switching. In earlier releases of CICS, dynamic plan switching can occur only for the pool, or for RCT entries dened with THRDA (THREADLIMIT) specied as zero; that is, overowed to the pool. A consequence of using DSNC MODIFY to modify THRDA to zero is that it makes dynamic plan switching effective. An RCT with THRDA greater than 0 is not capable of dynamic plan switching in earlier releases, and the plan selected for the rst UOW is used for all subsequent UOWs of the transaction. In CICS Transaction Server for OS/390 Release 3, dynamic plan switching can occur for both DB2ENTRYs as well as the pool, irrespective of the THREADLIMIT parameter. If you have coded your own dynamic plan exit, check that the logic can handle subsequent invocations for the same task. Your user application program, or the dynamic plan exit, must be written to tolerate consequences of additional calls to the exit. If the dynamic plan exit would change the plan when you dont want it to, the application program can avoid this by ensuring the thread is not released at syncpoint. However, the recommended method is to release the thread and ensure that the dynamic plan exit provides the correct plan for the new circumstances in which it is called. Messages The CICS message domain processes all attachment message requests. As a result, all previous DSNC messages now have the form DFHDB2nnn. You can use the DB2CONN MSGQUEUE1, MSGQUEUE2, and MSGQUEUE3 parameters to specify where the messages should be sent. This may have an impact on automation products, for example with NetView. Protected threads If you use protected threads on DB2ENTRYs, note that a thread is no longer agged as protected for its lifetime. Instead, a thread is protected only when it is not being used. If a new transaction reuses the thread, the thread is in use, and no longer requires protection. Therefore, the current number of protected threads for that DB2ENTRY is decremented. This allows for more effective protection of threads for a DB2ENTRY.
13
14
Manual connection
Connection between CICS and DB2 can be established manually by any one of the following methods: v Using the DSNC STRT command. For information on the DSNC STRT command see DSNC STRT on page 33. v Using a CEMT SET DB2CONN CONNECTED command. For information on the SET DB2CONN CONNECTED command, see the CICS Supplied Transactions manual. v Running a user application that issues an EXEC CICS SET DB2CONN CONNECTED command. For more information about the EXEC CICS SET DB2CONN CONNECTED command, see the CICS System Programming Reference
15
Manual disconnection
The connection between CICS and DB2 can be stopped or disconnected by using any one of the following methods: v Using the DSNC STOP command. For information on the DSNC STOP command see DSNC STOP on page 31. v Using a CEMT SET DB2CONN NOTCONNECTED command. v Running the CICS-supplied CDBQ transaction that issues an EXEC CICS SET DB2CONN NOTCONNECTED command. The CDBF transaction runs program DFHD2CM2. The transaction can be run directly from the terminal or by using the EXEC CICS START command. No messages are output to the terminal. The CICS DB2 adapter however outputs messages to transient data as part of its shutdown procedure. v Running the CICS supplied CDBF transaction that issues an EXEC CICS SET DB2CONN NOTCONNECTED FORCE command. The CDBQ transaction runs program DFHD2CM3. The transaction can be run directly from the terminal or EXEC CICS STARTed. No messages are output to the terminal. The CICS DB2 adapter, however, outputs messages to transient data as part of its shutdown procedure. v Running a user application that issues an EXEC CICS SET DB2CONN NOTCONNECTED command.
Avoiding the need for manual resolution of indoubt units of work (UOWs)
Indoubt units of work (UOWs) can occur when CICS, DB2, or the whole system fails whilst a transaction is carrying out syncpoint processing, that is, during processing of an EXEC CICS SYNCPOINT or EXEC CICS RETURN command. CICS is the coordinator of the UOW, and if more than one recoverable resource is
16
involved uses the two-phase commit protocol when trying to commit the UOW. Between replying yes to the phase 1 prepare call, and before receiving the commit or backout call at phase 2 time, DB2 is indoubt as to the outcome of the UOW. If a failure occurs at this time, DB2 remains indoubt about the UOW; it has an indoubt UOW and must ask CICS to resynchronize. The indoubt UOWs are normally resolved automatically when the connection between CICS and DB2 is reestablished. CICS and DB2 exchange information regarding the indoubt UOWs, that is, CICS informs DB2 whether the UOW backed out or was committed. CICS maintains information about UOWs needed for resynchronization on its system log. Resynchronization information is maintained by CICS across warm, emergency, and cold starts. (Recovery of resynchronization information across cold starts was introduced in CICS Transaction Server for OS/390 Version 1 release 1.) Resynchronization information is lost if an initial start of CICS is performed as the system log is initialized and all information is lost, deleting all information about previous units of work. You should rarely need to initial start CICS. If you simply want to reinstall resources from the CSD, a cold start should be used, which allows any resynchronization information to be recovered. In particular, an initial start of CICS should be avoided if the previous warm shutdown of CICS issued message DFHRM0131 indicating that resynchronization is outstanding. If CICS is initial started when DB2 resync was required, when the CICS DB2 connection is re established, message DFHDB2001 is output for each UOW that failed to be resynchronized, the UOW must be resynchronized in DB2 using the DB2 RECOVER INDOUBT command. There is no equivalent to the DFH$INDB utility available in CICS/ESA Version 4 and below that allows scanning of the system log to ascertain the outcome of the UOW. The MVS system log, and hence all the UOW information on it, has been lost by initial starting of CICS.
| | |
17
currently are not being used by a transaction and normally are released if they have not been reused after two protected thread purge cycles. A DSNC DISCONNECT commands pre empts the purge cycles and causes them to be terminated immediately. For more information on the DSNC DISCONNECT command see DSNC DISCONNECT on page 23. DSNC DISP (display) This CICS DB2 attachment command can be used to display the status of active threads for a particular plan, for a particular transaction, or for all plans and transactions. For more information, see DSNC DISPLAY on page 24. The DSNC DISP command also displays CICS DB2 statistics to a CICS terminal. These statistics are those available in previous releases, but are only a subset of the new CICS DB2 statistics available via CICS COLLECT STATISTICS and PERFORM STATISTICS commands. For more information on DSNC DISP STAT command, see Parameter description on page 26. For more information on the full CICS DB2 statistics available see the CICS Performance Guide. DSNC MODI (modify) This CICS DB2 attachment command can be used to modify where unsolicited messages are sent and the number of threads allowed for a DB2ENTRY or for the pool or command threads. This function is superseded by the CEMT commands described which allow these attributes to be modied and all other attributes of a DB2CONN, DB2ENTRY or DB2TRAN. For more information, see DSNC MODIFY on page 29.
The command is routed to DB2 for processing. DB2 checks that the user is authorized to issue the command entered. Responses are routed back to the originating CICS user. The command recognition character (CRC) of - must be used to distinguish DB2 commands from CICS DB2 attachment facility commands. This command recognition character is not used to identify the DB2 subsystem to which the command is to be sent. The command is sent to the DB2 subsystem to which CICS is currently connected. Figure 3 on page 19 shows the CICS attachment facility commands These require CICS authorization to use the DSNC transaction and the DB2 commands. For more information about the DSNC -DB2COMMAND, see Issuing commands to DB2 using DSNC on page 21.
18
CICS
DB2
DSNC STRT
Figure 3. Examples of CICS attachment facility commands and some DB2 commands
19
20
Environment
This command can be issued only from a CICS terminal
21
Syntax
DSNC syntax
DSNC destination db2-command
Abbreviation
You can omit DSNC from the DB2 command if the relevant transaction denition is installed from the CICS DB2 sample group, DFH$DB2. For example, if you are installing the -DIS transaction denition.
DSNC -DIS THD(*)
The sample CICS DB2 group, DFH$DB2, contains the following transaction denitions for issuing DB2 commands:
-ALT -DIS -RES -STO -ARC -MOD -SET -TER -CAN -REC -STA
Authorization
Issuing DB2 commands using DSNC does not require any authorization from CICS over and above transaction attach security required to run the DSNC transaction. It does, however, require DB2 privileges. For a description of the privileges required for each DB2 command, see Authorizing commands to DB2 on page 60. For more information about CICS security, see CICS security on page 52.
Parameter description
destination Identies another terminal to receive display information. It must be a valid terminal that is dened to CICS and supported by basic mapping support (BMS). db2-command Species the exact DB2 command that you want to enter from a CICS terminal It must be preceded by a hyphen.
Usage note
Screen scrolling The SIT keywords SKRxxxx can be used to support the scrolling of DSNC DB2 commands from your terminal. For further information about the SIT keywords and parameters, see the CICS System Denition Guide.
22
Example
Issue the DB2 command -DISPLAY THREAD from a CICS terminal to display threads for a CICS with applid IYK4Z2G1.
DSNC -DISPLAY THREAD(IYK4Z2G1)
DSNV401I : DISPLAY THREAD REPORT FOLLOWS DSNV402I : ACTIVE THREADS NAME ST A REQ ID AUTHID PLAN ASID IYK4Z2G1 N 3 JTILLI1 00BA IYK4Z2G1 T 3 ENTRXC060001 CICSUSER TESTC06 00BA IYK4Z2G1 T 3 POOLXP050002 CICSUSER TESTP05 00BA IYK4Z2G1 T * 6 COMDDSNC0003 JTILLI1 00BA DISPLAY ACTIVE REPORT COMPLETE DSN9022I : DSNVDT '-DIS THREAD' NORMAL COMPLETION DFHDB2301 07/09/98 13:36:36 IYK4Z2G1 DSNC DB2 command complete.
DSNC DISCONNECT
The CICS attachment facility command DSNC DISCONNECT disconnects threads. The command provides manual control to release resources being shared by normal transactions so that special purpose processes, such as DB2 utilities, can have exclusive access to the resources.
Environment
This command can be issued only from a CICS terminal.
Syntax
DISC syntax
DSNC DISConnect plan-name
Abbreviation
DSNC DISC or DISC (using the DISC transaction from the CICS DB2 sample group DFH$DB2).
Authorization
Access to this command can be controlled using the following CICS authorization checks: v Transaction attach security for transaction DSNC
23
v Command security for resource DB2CONN. This command requires READ access. For more information about CICS security, see Chapter 2. Installation and migration considerations on page 7.
Parameter description
plan-name Species a valid application plan.
Usage notes
Preventing creation of threads The command DSNC DISCONNECT does not prevent threads from being created on behalf of transactions. The command only causes currently connected threads to be terminated as soon as they are not being used by a transaction. To interrupt a transaction and cancel a thread faster, you can use the DB2 CANCEL THREAD command with DB2 Version 4 or higher. You can stop the transactions associated with a particular plan ID in CICS with the MAXACTIVE setting for TRANCLASS. This prevents new instances of the transaction from causing a re-creation of a thread. Alternative for protected threads You may want to deallocate a plan for rebinding or for running a utility against the database. If you are using a protected thread use EXEC CICS SET DB2ENTRY(entryname) THREADLIMIT(0), or DSNC MODIFY rather than DSNC DISCONNECT, to send all the threads to the pool. The protected thread terminates on its own within two purge cycles. See the PURGECYCLE attribute of DB2CONN.
Example
| | | |
DFHDB2021 07/09/98 13:46:29 IYK4Z2G1 The disconnect command is complete.
DSNC DISPLAY
The CICS attachment facility command DSNC DISPLAY displays information on active CICS DB2 threads and the corresponding CICS transaction using them, or statistical information associated with DB2ENTRYs and the DB2CONN.
Environment
This command can be issued only from a CICS terminal.
24
Syntax
DISPLAY syntax
DSNC DISPlay PLAN(plan name) TRANsaction(transaction ID) STATistics destination
Abbreviation
DSNC DISP or DISP (using the DISP transaction from the CICS DB2 sample group DFH$DB2).
Authorization
Access to this command can be controlled using the following CICS authorization checks: v Transaction attach security for transaction DSNC v Command security for resource DB2CONN. This command requires READ access. For more information about CICS security, see Chapter 2. Installation and migration considerations on page 7.
Parameter description
plan-name Displays information about threads by plan name. Plan-name is a valid plan name for which information is displayed. If you do not specify plan-name (or if you specify an asterisk, *), information is displayed for all active threads. Example Display information on all active plan IDs listed in the resource control table. The display information is to be sent to another terminal designated as MTO2.
DSNC DISP PLAN * MTO2
Parameter description
transaction-ID A valid transaction ID for which thread information is displayed. If you do not specify a transaction ID, information is displayed for all active threads. Example Display information about all active transactions listed in the resource control table.
DSNC DISP TRAN
25
Parameter description
Displays the statistical counters associated with each entry in the resource control table. The counters concern the usage of the available connections of the CICS attachment facility to DB2.
Environment
If you issue this command from CICS while the CICS attachment facility is active but the DB2 sub system is not, a statistics display is produced with no obvious indication that the sub system is not operational. Message DFHDB2037 appears in the CICS message log to indicate that the attachment facility is waiting for DB2 to start. Example Display statistical counters associated with each entry in the resource control table.
DSNC DISP STAT
Note that a more detailed set of CICS DB2 statistics can be obtained using standard CICS statistics interfaces, for example, the commands EXEC CICS COLLECT STATISTICS and EXEC CICS PERFORM STATISTICS, or using the DFH0STAT sample program.
Alternative destination
destination The identier of another terminal to receive the requested display information. It must be a valid terminal that is dened to CICS and supported by basic mapping support (BMS). Because the optional destination is sometimes preceded by an optional plan name or transaction ID in the command, each parameter must be unique and separately identiable as either a name or a terminal identier. If only one parameter is entered, it is rst checked to see whether it is a plan name or a transaction ID, and it is then checked as a destination. To use a character string that is both a plan name or transaction ID and also a valid terminal identier, you must use both the name and destination parameters to display the required information at the required terminal. When an alternate destination is specied to receive the requested display information, the following message is sent to the requesting terminal:
DFHDB2032 date time applid alternate destination display command complete
26
DFHDB2013 07/09/98 accessing DB2 DB3A DB2ENTRY S PLAN *POOL A TESTC05 XC06 A TESTC06 XP05 A TESTP05 XP05 I TESTP05 DFHDB2020 07/09/98
15:26:47 IYK4Z2G1 Display report follows for threads PRI-AUTH SEC-AUTH CORRELATION TRAN TASK UOW-ID JTILLI1 POOLXC050001 XC05 01208 AEEEC0321ACDCE00 JTILLI1 ENTRXC060003 XC06 01215 AEEEC0432F8EFE01 JTILLI1 ENTRXP050002 XP05 01209 AEEEC03835230C00 JTILLI1 ENTRXP050004 15:26:47 IYK4Z2G1 The display command is complete.
A status of A in the S eld indicates that the thread is active within a unit of work. A status of I indicates a protected thread that is waiting for work. The PLAN associated with the thread is displayed (there is no plan for command threads). The PRI-AUTH eld shows the primary authorization ID used for the thread. The SEC-AUTH eld shows the secondary authorization ID (if any) for the thread. The CORRELATION elds shows the 12-byte thread correlation ID which is made up as eeeettttnnnn where eeee is either COMD, POOL or ENTR indicating whether it is a command, pool or DB2ENTRY thread; tttt is the transid, and nnnn is a unique number. If the thread is active within a unit of work, the CICS transaction name, its task number and nally the CICS local unit of work ID is displayed. The correlation ID used in this display is also output on DB2 commands such as DISPLAY LOCK. For example, by using this display in conjunction with a display locks command you can nd out which CICS task is holding a lock within DB2.
DFHDB2014 07/09/98 14:35:45 IYK4Z2G1 Statistics report follows for RCTJT accessing DB2 DB3A -----COMMITS---DB2ENTRY PLAN CALLS AUTHS W/P HIGH ABORTS 1-PHASE 2-PHASE *COMMAND 1 1 1 1 0 0 0 *POOL ******** 4 1 0 1 0 2 0 XC05 TESTP05 22 1 11 2 0 7 5 XP05 ******** 5 2 0 1 0 1 1 DFHDB2020 01/17/98 15:45:27 IYKA4Z2G1 The display command is complete.
DB2ENTRY Name of the DB2ENTRY, or *COMMAND for DSNC command calls, or *POOL for pool statistics.
27
PLAN The plan name associated with this entry. Eight asterisks in this eld indicate that this transaction is using dynamic plan allocation. The command processor transaction DSNC does not have a plan associated with it. If a plan name associated with an entry is dynamically changed, the last plan name is the one put into use. CALLS The total number of SQL statements issued by transactions associated with this entry. AUTHS The total number of sign-on invocations for transactions associated with this entry. A sign-on does not indicate whether a new thread is created or an existing thread is reused. If the thread is reused, a sign-on occurs only if the authorization ID or transaction ID has changed. W/P The number of times that all available threads for this entry were busy. This value depends on the value of THREADWAIT for the entry. If THREADWAIT was set to POOL in the RCT, W/P indicates the number of times the transaction overowed to the pool. An overow to the pool shows up in the transaction statistics only and is not reected in the pool statistics. If THREADWAIT was set to YES, this reects the number of times that the thread both had to wait, and could not attach a new subtask (the number of started tasks has reached THREADLIMIT). The only time W/P is updated for the pool is when a transaction had to wait for a pool thread and a new subtask could not be attached for the pool. The W/P statistic is useful for determining if there are enough threads dened for the entry. HIGH The maximum number of threads acquired by transactions associated with this entry at any time since the connection was started, that is, a high watermark of threads. Note: In releases before CICS Transaction Server 1.2, the HIGH value also included the transactions forced to wait for a thread or those diverted to the pool. Now the HIGH value only represents threads actually created on the entry. ABORTS The total number of units of recovery which were rolled back. It includes both abends and syncpoint rollbacks, including syncpoint rollbacks generated by -911 SQL codes. COMMITS One of the following two elds is incremented each time a DB2 transaction associated with this entry has a real or implied (such as EOT) syncpoint. Units of recovery that do not process SQL calls are not reected here. | | | | 1-PHASE The total number of single-phase commits for transactions associated with this entry. This total does not include any two-phase commits (see the explanation for 2-PHASE below). This total does include read-only commits as well as single- phase commits for units of recovery which have
28
| |
performed updates. A two-phase commit is needed only when the application has updated recoverable resources other than DB2. 2-PHASE The total number of two-phase commits for transactions associated with this entry. This number does not include single phase commit transactions.
DSNC MODIFY
The CICS attachment facility command DSNC MODIFY modies the message queue destinations of the DB2CONN, THREADLIMIT value for the pool, for DSNC commands, or for DB2ENTRYs. The same function can also be achieved using CEMT/EXEC CICS SET DB2CONN or DB2ENTRY commands.
Environment
This command can be issued only from a CICS terminal.
Abbreviation
DSNC MODI or MODI (using the MODI transaction from the CICS DB2 sample group DFH$DB2).
Authorization
Access to this command can be controlled using the following CICS authorization checks: v Transaction attach security for transaction DSNC. v Command security for resource DB2CONN. This command requires UPDATE access. v For DSNC MODIFY TRANSACTION commands modifying the attributes of a DB2ENTRY. There are also command security checks for resources DB2ENTRY and DB2TRAN and resource security for the DB2ENTRY. The command requires READ access to resource DB2TRAN, and UPDATE access to resource DB2ENTRY for command security. In addition, the resource security command requires UPDATE access to the particular DB2ENTRY involved. For more information about CICS security, see Chapter 2. Installation and migration considerations on page 7.
DSNC MODIFY DESTination TRANSACTION old new transaction-id integer
Parameter description
DESTination Species that the MSGQUEUE parameter of the DB2CONN table is to be changed, replacing the old destination ID with the new destination ID. old new Any destination ID currently set in the MSGQUEUE of the DB2CONN. A new destination identier.
29
TRANsaction
Species that the THREADLIMIT value associated with the given transaction or group is to be modied. transaction-ID The command uses a transaction ID to identify either the pool, command, or the DB2ENTRY THREADLIMIT value to be modied. v To change the THREADLIMIT value of the pool, a transaction ID of CEPL must be used. v To change the THREADLIMIT for command threads, a transaction ID of DSNC must be used. v To change the THREADLIMIT for a DB2ENTRY, use the transaction ID of any transaction that is dened to use the DB2ENTRY. integer Is a new maximum value.
Usage notes
The integer specied in the command DSNC MODIFY TRANSACTION cannot be larger than the value specied for the TCBLIMIT parameter of the DB2CONN. The lowest possible value is zero.
Examples
Example 1 To change the specication of the MSGQUEUE parameter in the DB2CONN from MTO1 to MTO2 as follows:
DSNC MODI DEST MTO1 MTO2
DFHDB2039 07/09/98 14:47:17 IYK4Z2G1 The error destinations are: MT02 **** ****.
Figure 9. Sample output from DSNC MODIFY TRANSACTION command (pool thread)
30
Figure 10. Sample output from DSNC MODIFY TRANSACTION command (for a command thread)
Example 4 To change the thread limit of the DB2ENTRY used by transaction XP05 to 8:
DSNC MODI TRAN XP05 8
Figure 11. Sample output from DSNC MODIFY TRANSACTION command (changing DB2ENTRY thread limit)
DSNC STOP
The CICS attachment facility command DSNC STOP stops the attachment facility. The same function can also be achieved by issuing a CEMT or EXEC CICS SET DB2CONN NOTCONNECTED command.
Environment
This command can be issued only from a CICS terminal.
Syntax
FORCE DSNC STOP QUIESCE
Abbreviation
DSNC STOP or STOP (using the STOP transaction from the CICS DB2 sample group DFH$DB2).
Authorization
Access to this command can be controlled using the following CICS authorization checks:
Chapter 4. CICS-supplied transactions
31
v Transaction attach security for transaction DSNC v Command security for resource DB2CONN. This command requires UPDATE access. For more information about CICS security, see Chapter 2. Installation and migration considerations on page 7.
Parameter description
QUIESCE Species that the CICS attachment facility is to be stopped after CICS transactions currently running complete. In releases before CICS Transaction Server for OS/390 Release 2, QUIESCE would only wait for active transactions to release their thread, which, typically, was at the end of a unit of work (UOW). Now QUIESCE waits for active transactions to complete, that is, new UOWs can start and acquire threads. FORCE Species that the CICS attachment facility is to be stopped immediately by forcing disconnection with DB2, regardless of any transactions that are running. Currently running transactions that have accessed DB2 are forcepurged. This includes transactions that may have committed updates to DB2 in a previous UOW, but have not yet accessed DB2 in their current UOW.
Usage notes
For a DSNC STOP QUIESCE, message DFHDB2012 is output to the terminal. The terminal then remains locked until shutdown is complete, when message DFHDB2025 is output. For a DSNC STOP FORCE, message DFHDB2022 is output to the terminal. The terminal then remains locked until shutdown is complete, when message DFHDB2025 is output.
Examples
Example 1 To quiesce stop the CICS DB2 attachment facility:
DSNC STOP
DFHDB2012 07/09/98 14:54:28 IYK4Z2G1 Stop quiesce of the CICS-DB2 attachment facility from DB2 subsystem DB3A is proceeding.
The message resulting from the DSNC STOP command shown in Figure 12 is replaced by the message shown in Figure 13 on page 33 when shutdown is complete.
32
DFHDB2025I 07/09/98 14:58:53 IYK4Z2G1 The CICS-DB2 attachment has disconnected from DB2 subsystem DB3A
Figure 13. Sample output from DSNC STOP when shutdown is complete
DFHDB2022 07/09/98 15:01:51 IYK4Z2G1 Stop force of the CICS-DB2 attachment facility from DB3A is proceeding.
The message resulting from the DSNC STOP FORCE command shown in Figure 14 is replaced by the message shown in Figure 15 when shutdown is complete.
DFHDB2025I 07/09/98 15:10:55 IYK4Z2G1 The CICS-DB2 attachment has disconnected from DB2 subsystem DB3A
Figure 15. Sample output from DSNC STOP FORCE when shutdown is complete
DSNC STRT
The DSNC STRT command starts the CICS attachment facility, which allows CICS application programs to access DB2 databases. The same function can also be achieved by issuing a CEMT or EXEC CICS SET DB2CONN CONNECTED command.
Environment
This command can be issued only from a CICS terminal.
Syntax
DSNC STRT syntax
DSNC STRT ssid
33
Abbreviation
DSNC STRT or STRT (using the STRT transaction from the CICS DB2 sample group DFH$DB2).
Authorization
Access to this command can be controlled using the following CICS authorization checks: v Transaction attach security for transaction DSNC v Command security for resource DB2CONN. This command requires UPDATE access. For more information about CICS security, see Chapter 2. Installation and migration considerations on page 7.
Parameter description
ssid Species a DB2 subsystem ID to override that specied in the DB2CONN.
Usage notes
If a DB2CONN is not installed when the DSNC STRT command is issued, error message DFHDB2031 is produced, indicating that no DB2CONN is installed. RCT resources must be installed from the CSD before attempting to start the CICS DB2 attachment facility. The hierarchy for determining the DB2 subsystem to use is as follows: 1. Use the subsystem ID if specied in a DSNC STRT command 2. Use the DB2ID in the installed DB2CONN if not blank | | 3. Use the subsystem ID if specied on INITPARM, and DB2ID in the DB2CONN is blank 4. Use a default subsystem ID of DSN.
Examples
Example 1 To start the CICS DB2 attachment facility using an installed DB2CONN:
DSNC STRT
DFHDB2023I 07/09/98 15:06:07 IYK4Z2G1 The CICS DB2 attachment has connected to DB2 subsystem DB3A
Example 2 To start the CICS DB2 attachment facility using an installed DB2CONN but overriding the DB2 subsystem ID with DB3A: | |
DSNC STRT DB3A
34
DFHDB2023I 07/09/97 15:06:07 IYK4Z2G1 The CICS DB2 attachment has connected to DB2 subsystem DB3A
If DB2 is not active when an attempt is made to start the CICS DB2 attachment facility, the following output is received if STANDBYMODE=NOCONNECT is specied in the DB2CONN:
DFHDB2018 07/09/98 15:14:10 IYK4Z2G1 DB3A DB2 subsystem is not active.
Figure 18. Sample output from DSNC STRT when DB2 is not active
Figure 19. Alternative output from DSNC STRT when DB2 is not active
35
36
37
Protected entry threads are not terminated for a period even if they are unused. Many CICS transactions can use the same protected entry thread and avoid the overhead involved in creating and terminating the thread for each transaction. Unprotected entry threads terminate if no CICS transaction is waiting to use them. The overhead of creating and terminating the thread must be taken into account for transactions using unprotected entry threads. Requests for an entry thread can be transferred to the pool, if an entry thread is not available. Entry threads are dened using a DB2ENTRY denition. Pool threads Pool threads are used for all transactions and commands not using an entry thread or a DB2 command thread. Pool threads are normally used for low volume transactions and overow transactions from entry threads and DB2 command threads. A pool thread is terminated immediately if no CICS transaction is waiting to use it. Pool threads are dened in the pool threads section of the DB2CONN.
MVS subtasks
For the three types of thread, the thread runs under an MVS subtask. These thread subtasks are daughter subtasks of the main CICS DB2 subtask DFHD2MSB established when CICS connects to DB2. DFHD2MSB is a subtask of the main CICS TCB, and hence the thread subtasks are grand daughters of the main CICS TCB. The number of thread subtasks allowed is controlled using the TCBLIMIT parameter of the DB2CONN. An MVS subtask is not terminated when the thread is terminated. A thread subtask can be terminated if: v A CICS transaction is force purged from CICS and the thread is still active in DB2. In this case the subtask is terminated as a means of ushing the request out of DB2. The current UOW in DB2 is backed out. v The TCBLIMIT value of the DB2CONN is lowered. When a thread is terminated, the CICS DB2 attachment recognises that the current number of TCBs exceeds the TCBLIMIT, and terminates the TCB as well. v CICS is indoubt as to the outcome of a UOW because it has lost contact with its coordinator. Terminating the subtask causes DB2 to release the thread, but maintain the UOW as indoubt and maintain its locks. The UOW is completed by a later resynchronization when CICS reestablishes contact with its coordinator. v The CICS DB2 attachment facility is shut down.
38
v Process the SQL statements. v Perform commit processing. v Terminate the thread or keep it. These main activities are performed for each transaction. The work involved in each activity depends on a number of options, which you dene. The most important options are: v DB2CONN and DB2ENTRY specications: Use of protected entry threads Use of unprotected entry or pool threads Authorization strategy v BIND options ACQUIRE RELEASE VALIDATE v Use of PACKAGES
Thread creation
The following activities can occur at thread creation time, depending on the BIND options (sign-on and authorization check are always performed at thread creation time): v Sign on. v Check the maximum number of threads. v For an application plan, load the skeleton cursor table (SKCT) and header, if not already in the environmental description manager (EDM) pool. v Create a copy of the SKCT header in the cursor table (CT). v Perform the plan authorization check. v If ACQUIRE(ALLOCATE) is specied: Acquire table space (TS) locks for all TSs referenced in the plan. Load all database descriptors (DBDs) referenced in the plan. If you use protected threads, you eliminate the work required for thread creation and termination for individual transactions. A protected thread is not terminated when a transaction ends, and the next transaction associated with the same DB2ENTRY reuses the thread. We recommend that transactions using protected threads should use a plan bound with ACQUIRE(ALLOCATE) and RELEASE(DEALLOCATE) to further reduce the amount of work done. Note: Although ACQUIRE(ALLOCATE) and RELEASE(DEALLOCATE) reduce the amount of processing for a protected thread, there are some locking considerations. For more information, see Locking on page 43. Packages do not have a separate ACQUIRE option. ACQUIRE(USE) is implicit when a program is executed from a package. Infrequently used transactions should not use a protected thread, because the thread terminates between two such transactions. The plans for these transactions should not typically use the BIND parameter ACQUIRE(ALLOCATE), unless most of the SQL statements in the plan are used in each transaction.
39
The control block for an application plan, the SKCT, is divided into sections. The header and directory of an SKCT contain control information; SQL sections contain SQL statements from the application. A copy of the SKCT, the CT, is made for each thread executing the plan. Only the header and directory are loaded when the thread is created, if they are not already in the EDM pool. Note that the SQL sections of the plan segments are never copied into the CT at thread creation time. They are copied in, section by section, when the corresponding SQL statements are executed. For a protected thread with RELEASE(DEALLOCATE), the CT increases in size until all segments have been copied into the CT. If the SQL statements for the transaction are bound to a package rather than a plan, DB2 uses a skeleton package table (SKPT) rather than an SKCT, and a package table (PT) rather than a CT. The SKPT is allocated when the rst SQL statement is executed; it is not allocated when the thread is created.
SQL processing
The following activities can occur for each SQL statement processed, depending on thread reuse and the BIND options. v For the rst SQL call in a transaction reusing a thread with a new authorization ID: Sign-on Authorization check v Load the SKCT SQL section, if it is not already in the EDM pool. v Create a copy of the SKCT SQL section in the CT, if it is not already there. v If ACQUIRE(USE) is specied: Acquire referenced TS locks, if not already taken. Load DBDs in the EDM pool, if they are not already there. v Process the SQL statement. You can minimize the work done at SQL processing time by using ACQUIRE(ALLOCATE). If the SQL statement is in a package, the SKPT directory and header are loaded. The PT is allocated at statement execution time, rather than at thread creation time, as in the case with the SKCT and the CT for plans bound using ACQUIRE(ALLOCATE).
Commit processing
The following activities can occur at commit time, depending on your BIND options: v Release the page locks v If RELEASE(COMMIT) is specied: Release the TS locks Free the CT pages. You can minimize the work done at commit time by using RELEASE(DEALLOCATE). Using RELEASE(DEALLOCATE) optimizes performance if there are many commits in the program and if the thread is to be reused, because
40
the work associated with releasing the TS locks and freeing the CT pages is done once, when the thread terminates, and not for each SYNCPOINT statement. Transactions release the thread they are using at different times. If the transaction is terminal-oriented, or non-terminal-oriented and NONTERMREL=YES is specied in the DB2CONN, the thread is released at SYNCPOINT as well as at end of task (EOT). This makes it efficient to use a protected thread for transactions issuing many SYNCPOINTS, if combined with the BIND options ACQUIRE(ALLOCATE) and RELEASE(DEALLOCATE). In this case the resources to do the following activities are saved for each syncpoint: v Terminate and start the thread. v Release and acquire the TS locks. v Release and copy segments of the plan into the CT. Threads are not released at SYNCPOINT time if: v Held cursors are open. v The following DB2 modiable special registers are not at their initial value: CURRENT PACKAGESET CURRENT SQLID CURRENT SERVER DB2 unmodiable special registers are: CURRENT DATE CURRENT TIME CURRENT TIMESTAMP CURRENT TIMEZONE CURRENT USER v The DB2 modiable special register, CURRENT DEGREE, is ever changed during the lifetime of the CICS task. If the transaction is not terminal-oriented and you specify NONTERMREL=NO, the thread is released at EOT only. You do not need to use a protected thread to get thread reuse after an EXEC CICS SYNCPOINT command. You may still want to use a protected thread if this is a frequently used transaction. The BIND options ACQUIRE(ALLOCATE) and RELEASE(DEALLOCATE) give the same advantages as for the terminal-oriented transactions with many syncpoints.
Thread termination
The following activities can occur at thread termination time, depending on the BIND options: v If RELEASE(DEALLOCATE) is specied: Release TS locks Free CT pages v Free work storage.
41
Recommended combinations
In general it is recommended that you initially set these options to the values shown in Table 1. You may nd that you get better performance from other combinations for your own transactions. For each transaction type a recommended thread type and BIND option are shown. There are also recommendations whether transactions should overow to the pool.
Table 1. CICS DB2 transaction types
Transaction Description High volume (all types) Terminal-oriented with many commits (plus non-terminal if NONTERMREL=YES) Low volume, high priority Low volume, limited concurrency Low volume, low priority Non-terminal-oriented with many commits (NONTERMREL=NO) Notes: 1. Yes, but dene enough entry threads so this happens infrequently. 2. Yes, but if it overows to the pool no protected thread is used. 3. ALLOCATE if most of the SQL in the plan is used. Otherwise use ACQUIRE(USE). 4. Threads are held until EOT. Use pool threads for a short transaction. Consider entry threads for longer running transactions. Thread Type Protected Entry Protected Entry Overow Note 1 Note 2 ACQUIRE ALLOCATE Note 3 RELEASE DEALLOCATE DEALLOCATE
Yes Never
USE USE
In Table 1 limited concurrency means only a limited number (n) of transactions are allowed to execute at the same time. A special case exists when n=1. In that case the transactions are serialized. You can still use a protected thread if the transaction rate is high enough to make it worthwhile. The transactions cannot be controlled, if overow to the pool is allowed. You should normally use the CICS mechanism for limiting the number of transactions running in a specic class, rather than forcing transactions to queue for a limited number of threads. As Table 1 shows, only a few combinations of DB2CONN, DB2ENTRY, and BIND options are generally recommended. However, in specic situations other combinations can be used.
42
specications.
Table 2. Thread-Related Activities
Activity Protected Threads ACQUIRE(ALLOCATE) RELEASE(DEALLOCATE) Unprotected Threads (USE) (COMMIT) (USE) (DEALLOCATE)
Activity for each Activity for each Activity for each Activity for each thread transaction transaction transaction
Create thread: SIGNON Authorization Check Load SKCT Header Load CT Header Acquire all TS locks Load all DBDs For each SQL statement: Load SKCT SQL section Create CT copy Acquire all TS locks Load all DBDs Commit: Release page locks Release TS locks Free CT pages Terminate Thread: Release TS locks Free CT pages Free work storage
X X X X X X X (1) (1)
X X X X X
X X X X X
(2) (3)
(2) X X X
(2) X X X
X X X X X X
X X X X
X X X X
Notes: X. Required activity 1. Only if new authorization ID 2. Only if SQL section is not already in EDM pool 3. Only if SQL section is not already in Cursor Table
Table 2 illustrates the performance advantage of using protected threads without changing the authorization ID.
Locking
DB2 uses a lock mechanism to control concurrency while maintaining data integrity. To maximize concurrency in the CICS environment, you should use page locking instead of table space locking. You can obtain this by dening: LOCKSIZE(PAGE), or LOCKSIZE(ANY) when creating the table space and the isolation level as cursor stability at BIND time. The specication of LOCKSIZE(ANY) allows DB2 to decide if lock escalation can take place for the table space. If the number of locks exceeds NUMLKTS, lock escalation takes place. The DB2 parameter NUMLKTS is the number of concurrent
Chapter 5. Dening the CICS DB2 connection
43
locks per table space. NUMLKTS should then be set to a value so high that lock escalation does not take place for normal CICS operation. If a table space lock is achieved and the plan was bound with RELEASE(DEALLOCATE), the table space is not released at COMMIT time as only page locks are released. This can mean that a thread and plan monopolizes use of the table space. A reason for using ANY instead of PAGE is to give DB2 the option to use lock escalation for programs that acquire many page locks before committing. This is typically the case with batch programs. You can override DB2 rules for choosing initial lock attributes by using the SQL statement LOCK TABLE in an application program. You should avoid the LOCK TABLE statement, unless it is strictly necessary. If the LOCK TABLE statement is used, the plan should be bound RELEASE(COMMIT). In fact, if the LOCK TABLE is used in an online program, it can exclude the use of RELEASE(DEALLOCATE) and protected threads.
Security
Authorization checks take place when a thread is created and when a thread is reused with a new user. Avoiding the overhead in the security check is part of the performance advantage of using protected threads. This means that from a performance viewpoint all transactions dened in a DB2ENTRY entry with PROTECTNUM>0 should use the same authorization ID. At least they should avoid specifying TERM, OPID, and USERID for the AUTHTYPE parameter, because these values often vary among instances of a transaction.
Grouping transactions
Several transactions can be specied to use the same DB2ENTRY. Ideally, they should all use the same plan. Each low-volume transaction can have its own DB2ENTRY. In this case thread reuse is not likely and you should specify PROTECTNUM=0. An alternative is to group a number of low-volume transactions in the same DB2ENTRY and specify PROTECTNUM=n. This gives better thread utilization and less overhead.
44
v Before an SQL request can be passed to DB2, a TCB and a thread must be available for the transaction. v Once attached, a TCB is normally available until the CICS attachment facility is stopped. v When a thread is created and another transaction with a new authorization ID is reusing a thread, DB2 makes an authorization check for the new authorization ID. v A terminal-oriented transaction usually releases the thread at SYNCPOINT and EOT. The thread is not released at SYNCPOINT if held cursors are open or any modiable special registers are not in their initial state. v A non-terminal-oriented transaction releases the thread at EOT only, unless NONTERMREL=YES is specied in the DB2CONN. v When a transaction releases a thread, the thread can be reused by another transaction specifying the same plan and dened in the same DB2ENTRY. Pool threads can be reused by any waiting (queued) transaction specifying the same plan and using a pool thread. v An unprotected thread is terminated immediately when it is released unless another transaction is waiting (queued) for the thread. v A protected thread is terminated if not used for two consecutive periods of 30 seconds. This averages about 45 seconds. This value can be modied by the PURGECYCLE parameter of the DB2CONN. v The THREADWAIT parameter denes whether the requests for a thread should be queued, abended, or overowed to the pool in case of entry thread shortage.
Protected entry threads are recommended for: v High-volume transactions of any type v Terminal-oriented transactions with many commits v Non-terminal-oriented transactions with many commits (if NONTERMREL=YES is specied in the DB2CONN) Protected entry threads are created, used, and terminated as follows: TCB attach A TCB is attached only if needed by a thread, and normally remains available until the CICS attachment facility is stopped. Thread creation A thread is created only if an existing thread is not available. If no thread is available, but an unused TCB exists for this DB2ENTRY, a new thread is created and related to the TCB, provided THREADLIMIT is not exceeded. If no thread is available and no unused TCB is available, a new TCB is attached, and a new thread is built provided the TCBLIMIT and THREADLIMIT are not exceeded. Thread termination If the current number of protected threads is less than the PROTECTNUM
Chapter 5. Dening the CICS DB2 connection
45
value when the thread is released and there is no new work queued, the thread is marked as protected. Otherwise it is terminated. A protected thread is terminated if it is unused for two consecutive 30 second periods or PURGECYCLE value. Thread reuse Other transactions using the same DB2ENTRY may reuse a thread, if it is available. This is likely because the threads remain active for about 45 seconds after being released, depending on the PURGECYCLE value. Overow to pool If THREADWAIT=POOL is specied, requests for threads are transferred to the pool when the value of THREADLIMIT is exceeded. A transaction is then under the control of the PRIORITY, THREADLIMIT, and THREADWAIT parameters for the pool. The transaction keeps the PLAN and the AUTHID/AUTHTYPE values you specied for the entry thread.
This is the recommended type of denition for: v High-priority transactions, but with a volume so low that a protected thread cannot be used v Limited concurrency transactions You could use a protected thread for limited concurrency transactions, if the transaction rate makes it possible to reuse the thread. High-priority unprotected entry threads are created, used, and terminated as follows: TCB attach No thread TCBs are attached when the CICS attachment facility is started. A TCB is attached only if needed by a thread, and normally remains available until the CICS attachment facility is stopped. Thread creation A thread is created only when needed by a transaction. If no thread is available, but an unused TCB exists for this DB2ENTRY, a new thread is created and related to the TCB, provided THREADLIMIT is not exceeded. If the limit for THREADLIMIT and TCBLIMIT was not reached and a TCB does not exist, both a new TCB and a new thread are created. Thread termination The thread is terminated immediately after it is released, unless it has a transaction queued for it. Thread reuse Other transactions specied to use the same DB2ENTRY can reuse a thread, if it is available. This happens only if a transaction is waiting for the thread when the thread becomes available.
46
Overow to pool If THREADWAIT=POOL is specied, requests for threads are transferred to the pool when the value of THREADLIMIT is exceeded. A transaction is then under the control of the PRIORITY, THREADLIMIT, and THREADWAIT parameters for the pool. The transaction keeps the PLAN and the AUTHID/AUTHTYPE values you specied for the entry thread. Note that you should not allow overow to the pool for limited concurrency transactions.
This is the recommended type of denition for transactions with low volume and low priority. All transactions are forced to use pool threads. Low priority unprotected entry threads are created, used, and terminated as follows: TCB attach No thread TCB is ever attached for this thread denition because THREADLIMIT=0. A pool thread TCB is used. All activity related to this entry denition is forced to a thread and a TCB in the pool. A transaction is then under the control of the PRIORITY, THREADLIMIT, and THREADWAIT parameters for the pool. The transaction keeps the PLAN and the AUTHID/AUTHTYPE values you specied for the entry thread. Thread creation A thread is created in the pool when needed by a transaction unless the THREADLIMIT value for the pool was reached. Thread termination The thread is terminated when it is released, unless it has a transaction queued for it. Thread reuse Other transactions using the same plan can reuse the thread, when it becomes available.
Pool threads
These threads are dened with the following DB2CONN parameter:
THREADLIMIT(n)
There are four cases when a pool thread can be used: 1. A transaction is not specied in any DB2ENTRY or DB2TRAN, but issues SQL requests. This transaction defaults to the pool and uses the plan specied for the pool. 2. A transaction is specied in a DB2ENTRY or DB2TRAN referencing a DB2ENTRY, but is forced to the pool because the DB2ENTRY species THREADLIMIT(0) and THREADWAIT(POOL). This transaction uses the plan specied in the DB2ENTRY.
47
3. A transaction is specied in a DB2ENTRY or DB2TRAN referencing a DB2ENTRY, but overows to the pool (THREADWAIT=POOL) when the THREADLIMIT value is exceeded. This transaction uses the plan specied in the DB2ENTRY. 4. A transaction is specied in a DB2ENTRY or a DB2TRAN referencing a DB2ENTRY, but the DB2ENTRY is disabled. The DISABLEDACT keyword is set to POOL, therefore a pool thread is used. This transaction uses the plan specied in the DB2ENTRY. Pool threads are always unprotected threads. Pool threads are created, used, and terminated as follows: TCB attach No thread TCBs are attached when the CICS attachment facility is started. A TCB is attached when needed by a thread, and normally remains available until the CICS attachment facility is stopped. Thread creation A thread is created only when needed by a transaction. Thread termination The thread is terminated immediately after it is released, unless it has a transaction queued for it. Thread reuse Other transactions using the same plan can reuse a thread when it becomes available. In the pool this happens only if there is a queue for threads and the rst transaction in the queue requests the same plan used by the thread being released.
48
Chapter 6. Security
Security for CICS DB2 is discussed in this chapter in the following sections: v Overview v RACF connection authorization on page 50 v User authentication on page 52 v CICS security on page 52 v DB2 security on page 58 Note: In this chapter, we refer to RACF as the external security manager (ESM) used by CICS. Except for the explicit RACF examples, the general discussion applies equally to any functionally equivalent non-IBM ESM.
Overview
Several different security mechanisms can be used to control access to resources in a CICS DB2 environment: Dataset protection You can use RACF to protect DB2 databases, logs, bootstrap data sets (BSDSs), and libraries outside the scope of DB2, from unauthorized access. You can also apply this protection to CICS data sets and libraries. You can use VSAM password protection as a partial replacement for the protection provided by RACF. There are no special considerations for using RACF to restrict access to libraries, databases, and data sets. Connection authorization You can use RACF to verify that a subsystem (CICS, in this case) is authorized to connect to DB2. User authentication CICS sign-on authenticates users by checking that they supply a valid user ID and password. Note that DB2 does not authenticate the user; this function is performed by CICS. CICS security Checks that the authenticated user ID is authorized to use a specic transaction. This function is also sometimes referred to as transaction-attach security, which is described in CICS RACF Security Guide. CICS security extends to checking that the user ID is authorized to issue CICS SPI commands that operate on DB2 resource denitions. See CICS security on page 52 for information about the various security checks that CICS performs. DB2 security Restricts access to DB2 resources to authorized users only. DB2 resources include databases, tables, views, application plans, utilities, and commands. Figure 20 on page 50 shows the security mechanisms involved in a CICS DB2 environment.
49
RACF
RESOURCE ACCESS CONTROL FACILITY (optional) CICS CICS CICS Data connection to DB2 authorization user authentication(sign-on) transaction authorization set protection for CICS, DB2
CICS ADDRESS SPACE Admin. O CICS SECURITY Sign-on Trans. auth User O
DB2 ADDRESS SPACE DB2 SECURITY Authority Privileges ON DB2 OBJECTS Plans Tables
VSAM SECURITY VSAM passwords to protect Table spaces, VSAM catalogs DB2 system data sets DL/I database VSAM data sets Physical Access Control
50
which is the initial primary authorization ID, is authorized to connect to DB2 (see Primary and secondary authorization IDs on page 58 for information about primary authorization IDs). The region user ID under which CICS executes is one of the following: v The user ID taken from the RACF started procedures table, ICHRIN03, if CICS is running as a started task. v The user parameter of the STDATA segment in a STARTED general resource class prole, if CICS is running as a started job. v The user ID specied on the USER parameter of the JOB card, if CICS is running as a job. Carry out the following steps to authorize CICS to connect to DB2: 1. Dene a prole for the DB2 subsystem, with the type of connection allowed, in the RACF class DSNR: For example, the following RACF command creates a prole for SASS connections to DB2 subsystem DB2A in class DSNR.
RDEFINE DSNR (DB2A.SASS) OWNER(DB2OWNER)
2. Permit CICS to access the specied DB2 subsystem. For example, the following RACF command permits CICS system CICSHA11 to connect to DB2 sub system DB2A:
PERMIT DB2A.SASS CLASS(DSNR) ID(CICSHA11) ACCESS(READ)
If RACF veries that this CICS region is allowed to connect to the DB2 subsystem, DB2 runs the connection authorization exit routine. The initial primary authorization ID is always passed to the connection authorization exit routine. If you want to use DB2 secondary authorization IDs, you must replace the default connection authorization exit routine (see Primary and secondary authorization IDs on page 58 for information about secondary authorization IDs). If you want to use RACF group names as DB2 secondary authorization IDs, the easiest method is to use the IBM-supplied sample routine. If SEC=YES is specied in the SIT and there is no RACF USER prole dened for the initial primary authorization ID, CICS transactions abend. Note that even if the initial primary authorization ID is dened to RACF as a RESOURCE prole (for example, as a terminal or transaction) the transaction still abends. Change the sample sign-on exit routine (DSN3SSGN) if all of the following conditions are true: v You did not specify AUTHTYPE(GROUP) in the DB2ENTRY or DB2CONN v The RACF list of groups processing is active v You have transactions whose initial primary authorization ID is not dened to RACF v The initial primary authorization ID is not dened to RACF as a user prole. In summary, a CICS region, using a specication other than AUTHTYPE(USERID) or AUTHTYPE(GROUP), cannot run the corresponding transactions when using the DB2 sample sign-on exit routine if the list of groups processing is active, unless the initial primary authorization ID is dened to RACF as a user.
Chapter 6. Security
51
To set up RACF for DB2 and for information about controlling access to a DB2 system, see the DB2 for OS/390: Administration Guide.
User authentication
User authentication is achieved by signing on to CICS to authenticate your user ID. If you do not sign on, CICS uses the default user ID unless a user ID has been permanently associated with a terminal using preset security. The authenticated user ID is used when any of the following AUTHTYPEs are specied in a DB2ENTRY or the DB2CONN: USERID OPID GROUP
CICS security
CICS transactions that issue DB2 commands or SQL commands can involve security checks in two address spacesthe CICS region and the DB2 sub system. The security checks performed by CICS are as follows: Transaction attach security CICS calls RACF at transaction attach time to check that the user ID associated with the transaction is authorized to run the transaction. CICS command security If the transaction contains SPI commands that operate on DB2CONN, DB2ENTRY, or DB2TRAN resource denitions, CICS calls RACF to check that the user ID is authorized to issue SPI commands against these resource types. CICS resource security If the transaction contains commands that reference a DB2ENTRY, or a DB2TRAN, CICS calls RACF to check that the user ID is authorized to use that DB2ENTRY. Surrogate security If the transaction contains SPI commands that reference the DB2 authorization IDs, AUTHID or COMMAUTHID, CICS calls RACF to check that the user ID associated with the transaction is authorized as a surrogate of the DB2 authorization ID. AUTHTYPE security If the transaction contains SPI commands that reference the DB2 authorization IDs AUTHTYPE or COMMAUTHTYPE, CICS calls RACF to check that the user ID associated with the transaction is authorized through an appropriate FACILITY class general resource prole. For more information about the CICS security topics discussed here, such as command and resource security in general, see the CICS RACF Security Guide.
52
Within a transaction, you can query whether a user ID has access to these DB2 resource types by using the EXEC CICS QUERY RESTYPE(SPCOMMAND) command, with the RESID parameter specifying DB2CONN, DB2ENTRY, or DB2TRAN.
53
You activate CICS resource security globally in a CICS region by specifying the system initialization parameter for a specic resource: for DB2, you specify XDB2=prole_class_name. You control resource security at the individual transaction level by specifying RESSEC(YES) on the transaction resource denition. CICS performs resource security checking against SPI commands that reference specic DB2ENTRYs. This means that, if you specify CMDSEC=YES and RESSEC=YES on transactions that issue SPI commands against DB2ENTRYs, CICS performs two security checks against the user ID: 1. That the user ID is authorized to issue SPI commands against DB2CONN, DB2ENTRY, and DB2TRAN resource types. 2. That the user ID is authorized to access a specic DB2ENTRY. You permit access to DB2ENTRYs by giving users the appropriate access, as follows: INQUIRE command Requires READ authority SET command Requires UPDATE authority CREATE command Requires ALTER authority DISCARD command Requires ALTER authority
Note: Protecting DB2ENTRY resource denitions also protects access to associated DB2TRAN denitions, a DB2TRAN being considered an extension to the DB2ENTRY to which it refers.
54
The following example shows how to authorize a group of users to discard a protected DB2ENTRY using an EXEC CICS DISCARD command:
PERMIT db2ent2 CLASS(XCICSDB2) ID(group2) ACCESS(ALTER)
Surrogate security
CICS performs surrogate user security checking using the surrogate user facility of RACF. A surrogate user is one who has the authority to do work on behalf of another user. A surrogate user is authorized to act for that user without knowing that other users password. CICS protects DB2 authorization IDs by checking that the user ID performing the change is authorized as a surrogate of the authorization ID specied on an AUTHID or COMAUTHID parameter. In the case of an EXEC CICS SET command that changes an authorization ID, the user ID making the change must be a surrogate of the new authorization ID. This requires that surrogate user checking is active in the CICS region. You control surrogate user checking globally in a CICS region by specifying XUSER=YES as a system initialization parameter. If surrogate user checking is in force, CICS calls RACF to verify that user IDs are authorized as surrogates for the DB2 authorization IDs specied on AUTHID or COMAUTHID parameters. The commands subject to surrogate user checks are EXEC CICS SET, CREATE, and INSTALL that operate on DB2CONN and DB2ENTRY resource denitions.
Chapter 6. Security
55
To dene a user ID as a surrogate of a DB2 authorization ID, give the user ID READ authority to the authorization IDs prole in the RACF SURROGAT class. Create a prole for the authorization ID with a name of the form authid.DFHINSTL, with the authorization ID dened as the owner. In the following example, DB2AUTH1 is the authorization ID specied on the AUTHID or COMAUTHID parameter of a DB2CONN resource denition, or the AUTHID parameter specied on a DB2ENTRY resource denition:
RDEFINE SURROGAT DB2AUTH1.DFHINSTL UACC(NONE) OWNER(DB2AUTH1)
Use the following command to permit DB2USER9 to act as a surrogate for DB2AUTH1:
PERMIT DB2AUTH1.DFHINSTL CLASS(SURROGAT) ID(DB2USER9) ACCESS(READ)
AUTHTYPE security
CICS also uses RACF to control access to DB2 authorization IDs specied on the AUTHTYPE and COMAUTHTYPE parameters specied on a DB2CONN and AUTHTYPE specied on a DB2ENTRY. Although this form of security check is not a surrogate security check as in the case of AUTHID and COMAUTHID, it is globally controlled in the CICS region through the XUSER system initialization parameter. Any user ID using SET, CREATE, or INSTALL commands that operate on a DB2CONN, DB2ENTRY, or DB2TRAN could be subject to an authype security check. In all cases, user IDs require READ authority to an appropriate prole in the RACF FACILITY general resource class, where the prole names are of the form DFHDB2.AUTHTYPE.authname, where authname is the name of the DB2CONN or DB2ENTRY resource denition owning the prole. The following example shows how to dene the prole and give the required READ authority to enable user ID DB2USER2 to install or modify AUTHTYPE or COMAUTHTYPE on a DB2CONN resource denition named DB2CONN1:
RDEFINE FACILITY DFHDB2.AUTHTYPE.DB2CONN1 UACC(NONE) PERMIT DFHDB2.AUTHTYPE.DB2CONN1 CLASS(FACILITY) ID(DB2USER2) ACCESS(READ)
In the following example, authority is given to user ID DB2USER3 to modify or install the AUTHTYPE on a DB2ENTRY named DB2ENT5:
RDEFINE FACILITY DFHDB2.AUTHTYPE.DB2ENT5 UACC(NONE) PERMIT DFHDB2.AUTHTYPE.DB2ENT5 CLASS(FACILITY) ID(DB2USER3) ACCESS(READ)
56
Alternative transaction denitions for these transaction identiers are supplied in sample group DFH$DB2. You can give different CICS users authorization to subsets of these transaction codes. This means that individual users can be permitted to execute all, some, or none of the DB2 commands. CICS transaction security checking controls this. Note: If you have access to the DSNC transaction, CICS allows you to issue all of the DB2 commands. You can distinguish DB2 commands from CICS attachment facility commands by the hyphen (-) character, which is entered with DB2 commands. This character is not a DB2 subsystem recognition character, but a command recognition character. It is always a -, independent of the character actually dening the DB2 subsystem, since CICS can only connect to one DB2 subsystem at a time. There is no need to use different DB2 subsystem recognition characters from CICS, and thus we use only the default - character. CICS checks that you are authorized to use the DSNC transaction (or one of the other transactions that invokes DFHD2CM1). DB2 security then checks that you are authorized to enter the particular DB2 command specied as data in the DSNC transaction.
Chapter 6. Security
57
DB2 security
You have to be authorized to access resources within DB2. The authorizations you need differ for different tasks. You may need to be authorized for some, or all, of the following functions to carry out your assigned tasks: v Enter DB2 commands from CICS terminals. v Execute a plan using a CICS transaction. v Execute dynamic SQL in a plan used by a CICS transaction. Security checking in DB2 is based on your authorization ID.
TERM Your terminal ID TX SIGN The transaction ID The SIGNID from DB2CONN
GROUP The RACF group ID for the signed-on user ID Specifying AUTHTYPE(GROUP) is similar to the use of AUTHTYPE(USERID), but passes additional information to the DB2 sign-on authorization exit routine. AUTHTYPE(GROUP) has the advantage that users can be allocated to, or deallocated from, group names as required. You can then grant DB2 authorizations to the group name, and you do not then need to change your DB2 authorizations when people join or leave groups. Authorization IDs are established at two different stages in CICS: v The CICS DB2 master subtask receives its authorization ID at connection time. Connection occurs when the CICS attachment facility is started. v Transactions receive their authorization IDs at DB2 sign-on time.
58
More generally, your CICS user ID can belong to a group of user IDs (dened to RACF). You may be able to perform actions in DB2 because your group user ID is authorized for the action, even if your individual user ID is not. For CICS, secondary authorization IDs are implemented by the GROUP operand of the AUTHTYPE parameter in the DB2ENTRY or DB2CONN. Specifying GROUP is similar to specifying USERID, but additional information is passed to the DB2 sign-on authorization exit routine. The CICS attachment facility can: v Interpret the GROUP parameter v Pass the RACF userid and the RACF group ID character strings to DB2 to be used for privilege and authority checking. Note: You must replace the default DB2 authorization exit routines if you want to use secondary authorization IDs. The default authorization exit routines pass only a primary authorization ID to DB2.
Chapter 6. Security
59
v If the CICS region is using MRO, ensure each connected CICS region is also using RACF security. v If you are using MRO, specify ATTACHSEC=IDENTIFY on the CONNECTION denition for the TOR to ensure that sign-on information is propagated from the TOR to the AORs. If the conditions are met, the CICS attachment facility obtains the terminal users user ID and passes that to DB2 as the primary authorization ID. It also passes the RACF group name, or list of group names, as secondary authorization IDs. If these conditions are not met, the CICS attachment facility issues an authorization failed message. If GROUP is not specied, the secondary authorization ID is set to blanks. Table 3 shows the primary and secondary authorization IDs that the CICS attachment facility passes to DB2. CICS has already checked that the terminal user is authorized to run the transaction by this stage.
Table 3. Effect of the AUTHTYPE and AUTHID parameters
AUTHTYPE GROUP USERID OPID SIGN TERM TX AUTHID=character_string Primary authorization ID CICS user ID CICS user ID CICS operator ID DB2CONN SIGNID parm CICS terminal ID CICS transaction ID character_string Secondary authorization ID RACF groups blanks blanks blanks blanks blanks blanks
Note: character_string can be up to eight characters in length from the allowed character set comprising A-Z 0-9 @ and # (lowercase letters a to z are converted to uppercase). For example, you could dene AUTHID=tester2. In this case, the CICS attachment facility passes the characters TESTER2 to DB2 as the primary authorization ID. AUTHID and AUTHTYPE are mutually exclusive.
60
authorization ID in DB2. Using this method, you can give different DB2 privileges explicitly to CICS user IDs. For example, you can use GRANT DISPLAY to give specic CICS user IDs permission to use only the -DIS command.
CICS ADDRESS SPACE Command O CICS TERMINAL INPUT SECURITY CHECKING CICS ATTACH CODE DSNC thread
Authorization checking
Figure 21 shows the security mechanisms for DB2 command authorization. v CICS security: Is the user authorized to execute the DSNC transaction? v DB2 authorization: Is the user authorized to enter this DB2 command? In summary, authorization for the DSNC transaction is controlled through the use of: v The SEC, SECPRFX, and XTRAN system initialization parameters to control CICS transaction attach security. For more information, see the CICS RACF Security Guide. v The COMAUTHID or COMAUTHTYPE parameter on the DB2CONN. v The DB2 system operator (SYSOPR) authority, which a user must have in order to use DB2 commands.
Chapter 6. Security
61
DB2
Enter transaction APPLICATION PROGRAM EXEC RECEIVE NON SQL call SQL call thread EXEC SEND Entry or pool
Performance recommendation
If you have a large terminal network with many users, it is recommended that you avoid using the following authorization IDs: USERID OPID TERM GROUP Using these authorization IDs can result in a number of problems: v Many GRANT statements are required v Many entries are in SYSPLANAUTH and SYSPACKAUT v Maintenance can be complicated v You can incur performance overhead. If you use one of these authorization IDs, any CICS transaction using a DB2 thread is likely to have a different authorization ID from the last transaction that used the thread. This causes sign-on processing to occur. If you can arrange for the transactions using a thread to have the same authorization ID and transaction ID sign-on authorization processing is bypassed. For best performance, use an AUTHTYPE of SIGN, TX, or AUTHID(character_string) because these are constant, at least within a given transaction ID. You should use CICS security to restrict the use of the transaction, and hence execution of the plan, only to authorized users. Note: Even if the authorization ID stays constant, certain SQL commands can cause a sign-on. Sign-on occurs when a transaction terminates if any of the DB2 special registers (CURRENT SQLID, CURRENT SERVER, and CURRENT PACKAGESET) do not match their initial value, or if special register, CURRENT DEGREE, has ever been changed, or if there is an open
62
cursor with hold. If you specify ACCOUNTREC(UOW) in the DB2ENTRY or DB2CONN, sign-on processing always takes place. An alternative is to use GRANT to give EXECUTE authority on the plan to PUBLIC, because this also causes sign-on processing to be bypassed. This is not quite as efficient as using a constant authorization ID and transaction id, because some processing still takes place in the CICS attachment facility. DB2 ignores the changed authorization ID.
Accounting
The authorization ID is used in each DB2 accounting record. The value of the authorization ID is the chosen identier in the AUTHID or AUTHTYPE parameter. Depending on the ACCOUNTREC specication, it may not be possible to account at the individual user level. From an accounting viewpoint the most detailed information is obtained if using USERID, OPID, GROUP or TERM. These options are, however, not the recommended options from a performance viewpoint, as explained in the previous section. For more information about accounting in a CICS DB2 environment, see Chapter 9. Accounting on page 75.
Static SQL
When using static SQL, the binder of the plan must have the privileges needed to access the data, and the authorization ID passed from CICS to DB2 need only have the privileges to execute the plan. Synonyms can be useful when moving from a test to a production environment. You can use them to identify tables and views when using unqualied SQL. If the SQL statements in your programs are not qualied, DB2 uses the authorization ID of the plans binder as the qualifying part of the statement at bind time unless you created a synonym for the binder; in that case, the synonym is used. The synonym then species the fully qualied table name or view name. Notes: 1. 2. 3. 4. You cannot create a synonym on behalf of another user. The synonym is resolved at bind time. If a synonym is dropped, all plans based at the synonym are invalidated. If a plan is bound with VALIDATE(RUN) and the synonym did not exist at bind time, the bind process is completed at execution time. The original binder is still the binder when the bind process is completed at execution time. It is not the
Chapter 6. Security
63
authorization ID specied in the AUTHID or AUTHTYPE parameter of the DB2ENTRY or DB2CONN. The synonym must be created under the authorization ID of the original binder. 5. During the bind process at execution time, DB2: v Checks authorization v Selects path v Generates execution code and other necessary functions to build the plan. This involves overhead at execution time. It is recommended that you do not use both synonyms and VALIDATE(RUN) together.
Dynamic SQL
When using dynamic SQL, the authorization ID passed from CICS to DB2 must possess the privileges required to access the DB2 resources involved. If, for example, we specify AUTHTYPE(userid), the CICS user ID must be granted DB2 privileges to the DB2 resources involved in the dynamic SQL. If this user ID is also a TSO user ID, it has access to the DB2 resources directly from SPUFI, QMF, and other utilities. We recommend you use either the SIGN or a character string as the authorization ID for dynamic SQL. This limits the number of GRANT statements you need to make. In most cases, you may nd it convenient to have just one authorization ID under which all dynamic SQL in CICS is executed.
64
65
Two CICS subsystems can run with one or more DB2 systems. Where the CICS systems are attached to different DB2 systems: v User data and the DB2 catalog are not shared. This is an advantage if you want to separate test data from production data. v Wrong design or program errors in tested applications do not affect the performance in the production system. v Authorization within the test system can be less strict because production data is not available. When two CICS systems are connected to the same DB2 system, authorization must be strictly controlled, both in terms of the functions and the data that are available to programmers.
Preparation steps
The steps shown in Figure 23 summarize how to prepare your program for execution after your application program design and coding is complete.
USER JCL AND SUBMIT TO BATCH OR DB2I
(1)
DB2 PRECOMPILER
DBRM
(2)
(3)
(4)
(5)
BIND
PLAN
Figure 23 shows that there are several steps in the process of preparing a CICS application program. When you prepare your own CICS application programs:
66
v You can run steps (1) and (2) in either sequence. The sequence shown is that used by the DB2I program preparation panels. v If the source program is written in COBOL, you must specify a string delimiter that is the same for the DB2 precompiler, COBOL compiler, and CICS translator. The default delimiters are not compatible. v If the source program is written in PL/I, the input to step (1) is the output from the PL/I macro phase (if used). v The extra steps that are required for CICS application programs that access DB2 resources are DB2 precompile (1) and application program bind (5). The DB2 precompiler builds a DBRM that contains information about each of the programs SQL statements. It also validates SQL statements in the program. In the bind process, the DBRM produces an application plan that allows the program to access DB2 data at execution time. A group of transactions specied in the same DB2ENTRY must use the same application plan, that is, their DBRMs must be bound together. v Both the appropriate CICS language interface module and the DB2 language interface module must be included in the link edit of the program. The CICS language interface must be included rst in the load module (4). v DB2 is required only for the bind process (5). You can perform the program preparation shown in Figure 23 on page 66 using the DB2 Interactive Interface (DB2I) or by submitting your own JCL for batch execution. v DB2 Interactive Interface (DB2I): DB2I provides panels to precompile, compile or assemble, and link-edit an application program and to bind the plan. For details about application program preparation, see the IBM DATABASE 2 Application Programming and SQL Guide. v User JCL submitted to batch execution: Members DSNTEJ5C and DSNTEJ5P in the DB2 library, SDSNSAMP, contain samples of the JCL required to prepare COBOL and PL/I programs for CICS. If you perform this process while CICS is running, you may need to issue a CEMT NEWCOPY command to make the new version of the program known to CICS.
67
Module A
Module B
Module C
Module D
Assuming that at least one SQL statement changed in program C, you must perform the following steps to prepare the program and to make the transaction executable again: | 1. 2. 3. 4. Precompile the program on DB2. Translate the program using the CICS translator. Compile the host language source statements. Link-edit.
5. Bind with DBRM names for all the programs specied, to get a new application plan. For the programs that were not changed, use their old DBRMs. Note that you cannot use the REBIND subcommand, because input to REBIND is the plan and not the DBRMs. If module C is a commonly used module, you must BIND all application plans where this programs DBRM is included. If you use packages you only need to BIND the package for this DBRM. Using packages simplies the rebinding process. In fact, you could bind each separate DBRM as a package and include them in a package list. The package list can be included in a PLAN. You can use the BIND PACKAGE command to rebind the modied application instead of the BIND PLAN. This provides increased transaction availability and better performance, because the CICS attachment facility deals with PLANS and not with PACKAGES. See section Packages on page 96 and the IBM DATABASE 2 Application Programming and SQL Guide for details of packages implementation.
Bind options
Almost all bind options are application dependent and should be taken into account during the application design. Procedures should be established for bind with different options, either manual or automatic. However, there is one bind option to consider here. It is the RETAIN option. RETAIN means that BIND and EXECUTE authorities from the old plan are not changed. When the RETAIN option is not used, all authorities from earlier GRANTs are REVOKED. The user executing the BIND command becomes the creator of the plan, and all authorities must be reestablished by new GRANT commands.
68
This is why it is recommended that you use the RETAIN option when binding your plans in the CICS environment.
69
These tasks are highly dependent on the standards. For example, the tasks to be performed are different if: v There are separate DB2 systems for test and production v Only one DB2 is used for both test and production. The following discussion assumes that you use separate DB2 and CICS subsystems for test and production. Going into production implies performing the following activities: Use DDL to prepare production databases: All DDL operations must run on the production DB2 system, using DDL statements from the test system as a base. Some modications are probably needed, for example, increasing the primary and secondary allocations, as well as dening other volume serial numbers and dening a new VCAT in the CREATE STOGROUP statements. Migrate DCLGEN: For COBOL and PL/I programs, you may have to run DCLGEN operations on the production DB2 system, using DCLGEN input from the test DB2 system. Depending on the option taken for compilations (if no compilations are run on the production system), an alternative could be to copy the DCLGEN output structures from the test libraries into the production libraries. This keeps all information separate between test and production systems. Precompile: To produce DBRMs: v Precompile CICS modules containing EXEC SQL statements on the production system, or v Copy DBRMs from the test system to the production system libraries. Compile and link-edit: To produce load modules: v Compile and link-edit the CICS modules on the production system, if DBRMs were produced by a precompilation, or v Copy the load modules from the test system to the production system libraries, if the DBRMs were copied. BIND: You must always perform the BIND process on the application programs on the production system. GRANT EXECUTE: You must grant users EXECUTE authority for the DB2 application plans on the production system. Tests: Although no further tests should be necessary at this point, stress tests are useful and recommended to minimize the occurrence of resource contention, deadlocks, and timeouts and to check that the transaction response time is as expected. CICS tables: To have new application programs ready to run, update the following RDO denitions on the CICS production system. v RDO transaction denitions for new transaction codes v RDO program denitions for new application programs and maps
70
v SIT for specic DB2 requirements, if it is the rst DB2-oriented application going into production v RDO DB2ENTRY and DB2TRAN denitions for the applications. RDO DB2CONN denition if it is the rst DB2-oriented application going into production In addition, if RACF is installed, you need to dene new users and DB2 objects.
71
By selecting the production run library using the proper JCL, you can run either program. Then the correct version of the package is run, determined by the consistency token embedded in the program load module. The previous example uses the VERSION keyword at precompile time. For a full explanation and use of the VERSION keyword, refer to DB2 Packages: Implementation and Use. v Using EXPLAIN. Due to various factors, such as the sizes of tables and indexes, comparing the EXPLAIN output between test and production systems can be useless. Nevertheless, it is recommended that you run EXPLAIN when you rst bind the plan on the production system, to check the DB2 optimizer decisions.
72
Chapter 8. Customization
The introduction of the online CICS DB2 resource control table has customization implications as described in: v Dynamic plan exits
The Assembler version of the parameter list is shipped as member DSNCPRMA in SDFHMAC library. The COBOL version is DSNCPRMC in SDFHCOB library. The PL/I version is DSNCPRMP in SDFHPLI library. Dynamic plan exits can run unchanged; they do not have to be reassembled. The parameters passed to the exits are unchanged. A dynamic plan exit is driven to determine which plan to use at the start of the rst unit of work (UOW) of the transaction. This is referred to as dynamic plan selection. A dynamic plan exit can also be driven at the start of a subsequent UOW (assuming the thread was released at syncpoint) to determine what plan to use for the next UOW. The plan exit can decide to use a different plan. For this reason this is referred to as dynamic plan switching. | | | | | | | | | | In releases of CICS earlier than CICS Transaction Server Version 1 Release 2, dynamic plan switching could only occur for the pool, or for RCT entries that specied THRDA=0, that is, overowed to the pool. A consequence of using DSNC MODIFY to modify THRDA to zero was that dynamic plan switching became effective! An RCTE with THRDA > 0 would not be capable of dynamic plan switching; the plan selected for the rst UOW would be used for all subsequent UOWs of the transaction. In CICS Transaction Server for OS/390 Release 3 dynamic plan switching can occur for both DB2 entries as well as the pool, irrespective of the THREADLIMIT parameter. If you have coded your own dynamic plan exit, check that the logic
Copyright IBM Corp. 1998, 1999
73
| | | | | | |
copes with subsequent invocations for the same task. Either the user application or the dynamic plan exit must be written to tolerate consequences of additional calls to the exit. If the dynamic plan exit would change the plan when not wanted, the user application can avoid this by ensuring the thread is not released at syncpoint. Preferably, if the thread is released, the dynamic plan exit must provide the proper plan for the new cases when it is called, that is, a DB2ENTRY with THREADLIMIT > 0.
74
Chapter 9. Accounting
This chapter discusses accounting data delivered by CICS and DB2 in the following sections: v Overview v CICS-supplied information v DB2-supplied information on page 76 v Accounting for processor usage on page 77 v Accounting considerations for DB2 on page 82 v Summary of accounting for DB2 resources on page 89
Overview
Accounting in a CICS environment can be used to: v Charge back the total amount of resources consumed for a given set of transactions to a well-dened set of end users. v Analyze the transactions being executed in the system. Normally the units of consumption are the processor, I/O, main storage, and so on, in some weighted proportion. A typical CICS transaction consumes resources in the: Operating system CICS system Application code DB2 address spaces Each of these components can produce data, which can be used as input to the accounting process. It is the users responsibility to combine the output from the different sources. A normal requirement of an accounting procedure is that the results calculated are repeatable, which means that the cost of a transaction accessing a set of data should be the same whenever the transaction is executed. In most cases, this means that the input data to the accounting process should also be repeatable. For simplication, the term end user is used in this chapter as the target for charging resources. The end user can be real end users, groups of end users, transactions, or any other expression for the unit to which the resources must be appointed.
CICS-supplied information
Several facilities are included in CICS to perform the tasks of accounting and performance. These facilities can be used to measure the use of different resources within a CICS system. The most frequently used tools are: v Statistics data. CICS statistics are the simplest tool for permanently monitoring a CICS system. They contain information about the CICS system as a whole, such as its performance and use of resources. This makes CICS statistics suitable for performance tuning and capacity planning. Statistics are collected during CICS online processing and are processed offline later. The statistics domain collects
Copyright IBM Corp. 1998, 1999
75
this data and then writes records to the System Management Facility (SMF) dataset provided by MVS. The records are of the SMF type 110. These records can be processed offline by the DFHSTUP program. v Monitor data. CICS monitoring collects data about all user and CICS-supplied transactions during online processing for later offline analysis. The records produced by CICS monitoring are also the SMF type 110 and are written to the SMF data sets. Data provided by CICS monitoring is useful for performance tuning and for charging your users for the resources they use. Monitoring provides two classes of data: Performance class for detailed transaction level information Exception class for exceptional conditions For a detailed description of the CICS monitoring facilities, see the CICS Performance Guide, and the CICS Customization Guide. Refer to this documentation for details on activating, collecting, and processing this information. | | | | | | | | | | | | | For both statistics data and monitor data, an offline processing facility can be used. The TIVOLI Performance Reporter for OS/390 is one of the tools that collects and analyzes data from CICS and other IBM systems and products. Examples provided by CICS in the CICS Customization Guide show how to manipulate the SMF records. The TIVOLI Performance Reporter can build reports that help you with: v Systems overview v Service levels v Availability v v v v Performance and tuning Capacity planning Change and problem management Accounting
DB2-supplied information
The instrumentation facility component of DB2 offers you the possibility to use six types of traces. For each trace type, you can activate a number of trace classes. You can use SMF as the trace output destination. Another alternative is to externalize the trace output under control of GTF. The types of traces are statistics, accounting, audit, performance, monitor, and global. Statistics Describe the total work executed in DB2. This information is not related to any specic end user. The main purposes of the DB2 statistics trace are to: v Supply data for DB2 capacity planning. v Assist with monitoring and tuning at the DB2 subsystem level. v Assist in accounting for DB2 activity. The statistics records are written at user-dened intervals. You can reset the statistical collection interval and the origination time without stopping and starting the trace by using the MODIFY TRACE command. All DB2 activity for the statistical collection interval is reported in the record. This makes it difficult to directly relate the activity to specic end users. The DB2 statistics trace can be activated for several classes. If the statistics records are written to SMF, the SMF types are 100 and 102.
76
Accounting Describes the work performed on behalf of a particular user (authorization ID from the DB2CONN or DB2ENTRY). The main purposes of the accounting records are to charge the DB2 cost to the authorization ID and perform monitoring and tuning at the program level. DB2 produces an accounting record at thread termination or when a transaction is reusing a thread with a new authorization ID. That means that if a thread is dened as protected (PROTECTNUM>0) and all transactions with the same transaction code for this DB2ENTRY use the same authorization ID, only one accounting record is produced, describing all activity done in the thread. Additionally, accounting records are written if you set ACCOUNTREC in your DB2ENTRY or DB2CONN denitions to UOW, TASK, or TXID. Setting ACCOUNTREC to these options is considered a sign-on, even if you use the same authorization ID. You can activate the DB2 accounting trace for several classes. If the accounting records are written to SMF, the SMF type is 101 and 102. Audit Collects information about DB2 security controls and is used to ensure that data access is allowed only for authorized purposes. If the audit records are written to SMF, the SMF type is 102.
Performance Records information for a number of different event classes. The information is intended for: v Program-related monitoring and tuning v Resource-related monitoring and tuning v User-related monitoring and tuning v System-related monitoring and tuning v Accounting-related prole creation You can activate the DB2 performance trace for several classes. If the performance records are written to SMF, the SMF type is 102. Monitor Records data for online monitoring with user written programs Global Aids serviceability. If the global trace records are written to SMF, the SMF type is 102.
Chapter 9. Accounting
77
| |
by the corresponding TCB. For more information about the CICS Dispatcher statistics, see the CICS Performance Guide You can obtain the total processor time used by the CICS address space from RMF workload (WKLD) reports. This time is usually greater than the sum of all CICS task TCBs. The difference between the processor time reported by RMF and the sum of CICS TCBs in the CICS dispatcher statistics report is the processor time consumed by all the other subtask TCBs. The subtasks are used for: v DB2 threads v File related tasks, such as allocation, open, close, and deallocation of CICS application data sets dened in the le control table (FCT) or RDO le denitions v If RACF is present, requests to RACF that require physical I/O v If DBCTL is used, processor time consumed in the DBCTL threads These are global performance reports and can help you determine how much of your processor time is being used by CICS. In CICS regions, DB2 threads always use MVS subtasks separate from the CICS main task TCB. Consequently, you need more granularity to get the proper results. You can obtain transaction performance records from reports generated by TIVOLI Performance Reporter for OS/390. TIVOLI reads the SMF datasets searching for SMF type 110 records, in the case of CICS, and provides a matrix, tabular or any graphics for each transaction run in the CICS system. For more information about the TIVOLI Performance Reporter for OS/390, see the CICS Performance Guide
78
CLASS 3 collects the I/O elapsed time and lock and latch suspension time spent IN DB2 and records this in the accounting record. CLASS 7 and CLASS 8 in DB2 Version 3 collect package level accounting in DB2 and package level accounting wait in DB2. For information on package level accounting, refer to the DB2 for OS/390: Administration Guide. The statistics trace reports processor time in the statistics records. The processor times reported are: v Time under a DB2 address space TCB running asynchronous of the CICS address space. Examples of this are the DB2 log and writes from the buffer pools. v Time under SRBs scheduled under the DB2 address spaces. An example is the asynchronous read engine for sequential prefetch. The DB2 address spaces reported in the statistics record are: v Database manager address space v System services address space v IRLM. In a CICS environment, the processor time from the DB2 accounting records is typically much greater than the processor time reported in the DB2 statistical records, because most of the processor time used is in the thread TCB itself and in the DB2 address spaces using cross memory services.
Chapter 9. Accounting
79
CICS Address Space DB2 Thread TCBn CICS Main TCB Other 1 TCBs
3 4
6 7
9 10
CLASS 1 reported processor time = 3 + 6 + 9 CLASS 2 reported processor time = 2 + 5 + 8 CICS reported processor time = 1 + 4 + 7 + 10
Figure 25. Processor times recorded in type 101 records for CICS
For thread reuse, this means that many users are included in the same record, which can cause difficulties for both accounting and problem determination. The ACCOUNTREC(TASK) or ACCOUNTREC(UOW) settings in a DB2ENTRY or DB2CONN provide more granularity, suppress some strange records, and allow more accurate processor time to be charged to a transaction. This is because a record is produced for each user and involves the passing of a token between CICS and DB2, which is present in both CICS and DB2 traces. ACCOUNTREC(TASK) ensures that there is a minimum of one accounting record for each task. There could be more, depending on thread reuse. ACCOUNTREC(TASK) is recommended rather than ACCOUNTREC(UOW). The processor time reported in the DB2 accounting record is not included in the CICS performance records. For terminal-oriented transactions that issue multiple syncpoints (commit or rollback), the DB2 thread associated with the transaction is released after each syncpoint. (POOL threads are generally terminated, while DB2ENTRY threads can be reused.) If the transaction used a protected thread, this thread can subsequently be reused by either the same transaction, or another transaction that is capable of using the thread. If the transaction used an unprotected thread, it is likely that this thread is terminated before the rst SQL call is issued after the syncpoint, because an unprotected thread is terminated immediately when it is unused. A new thread must then be created for the transaction. A single transaction can therefore be associated with multiple DB2 threads during the life of its execution.
80
Because an accounting record gets written at thread termination or at sign-on for a different user, a single transaction (issuing multiple syncpoints and terminal-oriented) can have multiple accounting records associated with it. The processor time is accurately obtainable by authorization ID within the transaction by aggregating all the accounting records for this authorization ID and transaction. Note, however, that the elapsed times associated with the accounting record would be of little value in this case, because the sum of the elapsed times does not include the time from one commit point to the rst SQL call in the next LUW. The elapsed time for a thread is associated with the thread and not with the transaction. Non-terminal oriented transactions may or may not release the thread at syncpoint, depending on the NONTERMREL parameter in the DB2CONN. If NONTERMREL(YES) is set, the thread is released at syncpoint, and the considerations described apply. If NONTERMREL(NO) is set a non-terminal-oriented transaction does not release the thread at syncpoint. That means that only one DB2 accounting record is produced for this kind of transaction. However, if other transactions are specied for the same DB2 entry, the DB2 accounting record for this thread can include data for these transactions as well, if the thread is reused.
Accounting CLASS 2
For accounting CLASS 2, the timer is checked on every entry and exit from DB2 to record the IN DB2 time in the SMF type 101 record. In this case, it is the difference that is stored in the record. The elds in the type 101 record used for accounting CLASS 2 processor time are QWACAJST for CICS attach TCB time and QWACASRB for CICS ASCB SRB time. For a description of the contents of the DB2 statistics records, see the DB2 for OS/390: Administration Guide. The elapsed time (start and end times between the above dened points) is also reported in the type 101 record (QWACASC). The processor time reported for CLASS 2 is shown in Figure 25 on page 80, and is the sum of the times 2, 5, and 8. Note that in the case of CICS (in contrast to IMS and TSO), this is not signicantly different from the CLASS 1 trace information. Terminal-driven transactions (and non-terminal-driven transactions if NONTERMREL=YES) issuing multiple syncpoints also result in multiple accounting records being written for accounting CLASS 2. However, like accounting CLASS 1, the processor times accurately reect the processor times IN DB2. Unlike accounting CLASS 1, the CLASS 2 elapsed times accurately reect the elapsed times spent IN DB2. Accounting CLASS 2 information is very useful for monitoring the performance of SQL execution. However, the processor overhead associated with having class accounting is quite considerable. DB2 Version 3 addresses this problem, and the processor overhead is reduced signicantly due to the changing of the IFCID functions invoked. To reduce the overhead, it was usually recommended that the CLASS 2 trace be limited to trace data for plans and locations of specic authorization IDs The processor overhead is 0-5%, with 2% being typical.
81
v Segment 1: Code executed prior to plan allocation, as well as most of the create thread time v Segments 4 and 7: Time spent executing the application code in the transaction, excluding DB2 calls v Segment 10: Most of the thread terminate time v Segment X: Any concurrent work done under other TCBs of the CICS address space, such as asynchronous VSAM.
This calculates the CLASS 1 TCB processor time. The sum of the processor time from the CICS CPU eld and the calculated value of T1 is an expression for the processor time spent in CICS and DB2. Notes: v The CLASS 2 processor time is part of the CLASS 1 processor time and should not be added to the sum. v If the CLASS 2 processor time is subtracted from the CLASS 1 processor time, this gives an approximation of CPU utilization of the CICS attachment facility. This is a useful tuning aid. v The processor time used in the DB2 address spaces and recorded in the DB2 statistics records is not related to any specic thread. It can be distributed proportionally to the CPU time recorded in the DB2 accounting records. v Processor time used in the CICS address space under the subtask TCBs cannot easily be distributed to the CICS performance records, because it includes the processor times for the DB2 subtasks, which are already contained in the calculated T1 value. It means that processor time used in subtasks other than the thread subtasks is not included in the addition. v Most of the processor time used in the thread TCB to create the thread is not included in any DB2 accounting records associated with this thread, because this processor time is spent before the thread is created. v The capture ratio for CICS and DB2 should be taken into account. For an explanation of capture ratio, see the CICS Performance Guide. However, as described later in this chapter, you are not always able to get both a CICS performance record and a DB2 accounting record for a single transaction.
82
Second, have this data available at a level that makes it useful for the required accounting level. Availability of accounting data on page 85 discusses under which conditions this data is available (the second activity).
Processor usage
The processor usage information given in the DB2 accounting record shows in most cases the greater part of the total processor time used for the SQL calls. The DB2 statistics records report processor time used in the DB2 address spaces that could not be related directly to the individual threads. You should consider distributing the processor time reported in the DB2 statistics records proportionally between all users of the DB2 subsystem (transactions, batch programs, TSO users). The amount of processor time reported in the DB2 accounting records is (for the same work) relatively repeatable over time. See Accounting for processor usage on page 77 for more detail on reporting processor usage in a CICS DB2 environment.
I/O
In a DB2 system, the I/O can be categorized in these types: Synchronous read I/O Sequential prefetch (asynchronous reads) Asynchronous writes EDM pool reads (DBDs and plan segments) Log I/O (mainly writes). Of these ve I/O types, only the synchronous read I/O is recorded in the DB2 accounting record. The number of sequential prefetch read requests is also reported, but the number of read requests is not equal to the number of I/O. None of the I/O types should be considered as repeatable over time. They all depend on the buffer sizes and the workload activity. DB2 is not aware of any caches being used. That means that DB2 reports an I/O occurrence, even if the cache buffer satises the request.
Chapter 9. Accounting
83
GETPAGE
GETPAGE represents a number in the DB2 accounting record that is fairly constant over time for the same transaction. It shows the number of times DB2 requested a page from the buffer manager. Each time DB2 has to read or write data in a page, the page must be available, and at least one GETPAGE is counted for the page. This is true for both index and data pages. How often the GETPAGE counter is incremented for a given page used several times depends on the access path selected. However, for the same transaction accessing the same data, the number of GETPAGEs remains fairly constant over time, but the GETPAGE algorithm can change between different releases of DB2. If the buffer pool contains the page requested, no I/O occurs. If the page is not present in the buffer, the buffer manager requests the page from the media manager, and I/O occurs. The GETPAGE number is thus an indicator of the activity in DB2 necessary for executing the SQL requests.
Write intents
The number of set write intents is present in the QBACSWS eld of the DB2 accounting record, but the number is not related to the actual number of write I/Os from the buffer pools. The number represents the number of times a page has been marked for update. Even in a read-only transaction this number can be present, because the intended writes to the temporary work les used in a DB2 sort are also counted. The typical case is that the number of set write intents is much higher than the number of write I/Os. The ratio between these two numbers depends on the size of the buffer pool and the workload. It is not a good measurement for write I/O activity, but does indicate the complexity of the transactions.
Transaction occurrence
A straightforward way of accounting is to track the number and type of transactions executed. Your accounting is then based on these values.
84
Storage
The DB2 accounting record does not contain any information about real or virtual storage related to the execution of the transactions. One of the purposes of the DB2 subsystem is to optimize the storage use. This optimization is done at the DB2 level, not at the transaction level. A transaction uses storage from several places when requesting DB2 services. The most important places are the thread, the EDM pool, and the buffer pools. Because no information is given in the DB2 accounting record about the storage consumption and because the storage use is optimized at the subsystem level, it is difficult to account for storage in a DB2 environment.
Chapter 9. Accounting
85
so, the DB2 resources from the DB2 accounting records are related to the CICS performance records and these records can be related to the end user. Other reasons for trying to combine the two-record types can exist. If the purpose of your accounting is not to charge the end user, but to analyze the resources used by the individual CICS transactions, you need to combine these records. If you use either ACCOUNTREC(UOW) or ACCOUNTREC(TASK) in the DB2ENTRY or DB2CONN, CICS passes its LU6.2 token to DB2 to be included in the DB2 trace records. The token is written to QWHCTOKN in the correlation header and simplies the task of correlating CICS and DB2 accounting records. If you do not use ACCOUNTREC(UOW) or ACCOUNTREC(TASK), there is no easy way to do this matching. Two problems exist: 1. There is not a one-to-one relationship between the CICS performance records and the DB2 accounting records. A DB2 accounting record can contain information about one CICS transaction, multiple CICS transactions, or part of a CICS transaction. 2. No elds in the DB2 accounting record can be used to identify exactly the corresponding CICS performance records. This is because there is no one-to-one relationship between the two record types. Figure 26 on page 87 shows what you can do when you are not using ACCOUNTREC(UOW) or ACCOUNTREC(TASK) to correlate CICS and DB2 accounting records. Fields in the DB2 accounting record that can be used to correlate to the CICS performance records are: v v v v Correlation ID, containing the CICS 4-character transaction code The timestamp elds The authorization ID eld The CICS LU6.2 token
Note that there is no ideal way of combining the two record types. There may be cases where it is impossible to make the matching correct because the transactions are run concurrently. Figure 26 on page 87 shows four combinations of using transaction codes and the number of transactions reported in one DB2 accounting record.
86
The CICS application can be designed so that the work done under a specic CICS transaction ID is the same between executions. Cases A and B describe this situation. In cases C and D, many different transaction paths use the same CICS transaction ID. The work done and the resources consumed differ between executions. A typical example for cases C and D is where the terminal user has a menu displayed at the terminal and can choose different options for the next transaction. If the previous transaction was terminated by setting up the CICS transaction ID with the EXEC CICS RETURN TRANSID(zzzz) command, then the next transaction runs under the transaction ID zzzz, no matter what the terminal user chooses. Transactions can also be divided into two groups depending on when the DB2 accounting record is written. In cases A and C, the DB2 accounting record contains information for just one transaction. A DB2 accounting record is always written at thread termination or at the sign-on of a new authorization ID, reusing the same thread. ACCOUNTREC (TASK) ensures that there is a minimum of one accounting record for each task. There could be more, depending on thread reuse. ACCOUNTREC(TASK) is recommended rather than ACCOUNTREC(UOW). Remember that to obtain the situation where each DB2 accounting record contains information for just one transaction, you must avoid thread reuse, unless you used ACCOUNTREC(UOW) or ACCOUNTREC(TASK). In cases B and D, the thread contains information from many transactions.
87
The end user can be identied in the CICS performance record. This record contains the CICS activities related to this transaction. The DB2 accounting record can be identied by the CICS transaction code, start and end time for the thread, and authorization ID depending on the value of the AUTHID/AUTHTYPE parameter in the DB2CONN or DB2ENTRY. It is expected that all transactions consume comparable amounts of resources, because all transactions are identical. Case B In this case it is not possible to relate the DB2 accounting record directly to the CICS performance record, because many transactions use the same thread. If only one CICS transaction type is using the plan for this thread, then the resources in DB2 can be split equally between each transaction. This is reasonable, because only one transaction type is using this CICS transaction code. The transactions are (by denition) almost identical. The number of commits and backouts in the DB2 accounting record indicates the number of units of work covered in this record. However, information about a terminal-oriented transaction issuing multiple commits can be contained in more than one DB2 accounting record, because it releases the thread at syncpoint. The same applies to non-terminal-oriented transactions if NONTERMREL(YES) is set in the DB2CONN, meaning that the thread is released at syncpoint. If two or more different transactions use the same DB2ENTRY, the method of distributing the resources equally may not be used, because the different transactions can use different resources. In that case another technique can be used. The user can periodically measure the accurate resources used by each transaction type. This can be done by not allowing thread reuse. The output from these measurements can then be used as model transactions. The DB2 accounting records are then not used directly in the accounting process, but can be used to validate the correctness of the model transactions. Measured on a daily basis for example, the weight of the model transactions multiplied with the corresponding number of transactions from the CICS performance records should equal the accumulated numbers from the DB2 accounting records. Note that a transaction reusing a thread is not using any processor time for starting the thread. Case C This situation is similar to case A, except that the number of transactions for a specic user is not a good measurement of the resources consumed. All individual CICS performance records and the corresponding DB2 accounting records should be accumulated for each user, because many transactions use the same CICS transaction code. The principle for correlating the two record types is the same as in case A. Case D In this case one DB2 accounting record covers many different CICS transactions. Model transactions can be dened, but it is difficult to decide
88
which one to use for a specic CICS transaction, because the same CICS transaction code is used by transactions running through different program paths. In some situations other elds in the CICS performance records can be used to distinguish one transaction from another. For example, the user could supply information in a user eld in the CICS performance records. This information could dene the transaction being executed. The model transactions can then be used.
Chapter 9. Accounting
89
If the detailed information from the DB2 accounting records is available, the user has many possibilities for dening the cost formula based on the DB2 accounting records. v Where repeatability combined with a reasonable expression for the complexity of the transactions has high priority, then the processor usage, the GETPAGE count, and the set write intents count are good candidates. v If the purpose of the accounting process is to analyze the behavior of the CICS transactions, then any information in the DB2 accounting records can be used. In summary, it is the responsibility of the installation to design the applications and to tune the DB2CONN and DB2ENTRY with respect to the trade-off between performance and accounting requirements.
90
Overview
Using DB2 as the data base management system (DBMS) is advantageous in most steps of the CICS development process and in the production environment. However, the users involved in designing and developing CICS DB2 applications must be aware of several differences between those applications and applications developed with data stored in VSAM and DL/I. Some of the main differences to consider are: v Locking mechanism v Security v Recovery and restart v BIND process v Operational procedures v Performance v Programming techniques To address these differences in the CICS application development process, the rst-time user needs some guidelines. One of the major differences between batch and online program design is that online systems should be designed for a high degree of concurrency. At the same time, no compromise should be made to data integrity. In addition, most online systems have design criteria about performance.
91
v v v v
Locking strategy Dependency of specic BIND options Dependency of specic DB2CONN or DB2ENTRY parameters Security principles
v Transaction code usage v When to switch plans v Programming standards In addition, the user should consider that the design being implemented can inuence: v Performance v Concurrency v Operation v Security v Accounting v Development environment The applications are likely to work properly when set into production for the rst time. However, certain occurrences can lead to situations where some of the consequences described above are negative. These occurrences include: v Increased transaction rate v Continued development of existing applications v More people involved in developing CICS DB2 applications v Existing tables used in new applications v Integration of applications. It is therefore important to develop a consistent set of standards on using DB2 in the CICS environment. The following sections discuss the key decisions regarding CICS DB2 application development.
92
Some of the limitations shown in Table 7 can be bypassed if you develop your own preprocessor to modify the source code before invoking the DB2 precompiler. This allows you, for example, to change the creator in the SQL statements.
Locking strategy
The main purpose of the lock mechanism in DB2 is to allow concurrency while maintaining data integrity. In a CICS environment, concurrency is likely to be high. To give maximum concurrency, you should use page locking instead of table space locking. You can do this by dening LOCKSIZE(PAGE) or LOCKSIZE(ANY) when creating the table space and by dening the isolation level as cursor stability at BIND time. Specifying LOCKSIZE(ANY) allows DB2 to decide if lock escalation can take place for the table space. If the number of locks exceeds NUMLKTS, lock escalation takes place. The DB2 parameter NUMLKTS is the number of concurrent locks for a table space. NUMLKTS should then be set to a value so high that lock escalation cannot take place for normal CICS operation. | | | | | Using ANY instead of PAGE gives DB2 the option to use lock escalation for programs that require many page locks before committing. This is typically the case in batch programs. DB2 also provides the ability to lock at the row level rather than the page or tablespace level, thus providing better granularity and reducing lock contention. In general, it is recommended that you design CICS programs so that: v Locks are kept as short as possible. v The number of concurrent locks is minimized. v The access order of the tables is the same for all transactions. v The access order of the rows inside a table is the same for all transactions. The LOCK TABLE statement should not be used, unless specically needed. If you do use the LOCK TABLE statement, your plan should use the bind option RELEASE(COMMIT).
93
Bind options
When you bind a plan, a number of options are available. You should develop procedures to handle different BIND options for different plans. Also the procedures should be able to handle changes in BIND options for the same plan over time. The following sections describe some specic recommendations for BIND options with CICS:
Isolation level
It is recommended that you use Cursor Stability (CS) unless there is a specic need for using Repeatable Read (RR). This is recommended to allow a high level of concurrency and to reduce the risk of deadlocks. Note that the isolation level is specied for the complete plan. This means that if RR is necessary for a specic module in CICS, then all the DBRMs included in the plan must also use RR. Also, if for performance reasons you decide to group a number of infrequently used transactions together to use the same DB2ENTRY and let them use a common plan, then this new plan must also use RR, if just one of the transactions requires RR.
94
Dening the CICS DB2 connection on page 37 for more information about the performance advantages of using protected threads. | | | | | | | | | | From an accounting viewpoint, the situation is different. An accounting record is produced for each thread termination and for each new user sign-on. This means that only one accounting record is produced if the thread stays alive and the user ID does not change. This record contains summarized values for all transactions using the same thread, but it is not possible to assign any value to a specic transaction. This can be overcome by specifying ACCOUNTREC(UOW) to make sure an accounting record is cut per unit of work, or by specifying ACCOUNTREC(TASK) to make sure there is an accounting record cut per CICS task. See Chapter 9. Accounting on page 75 for more information about accounting in a CICS DB2 environment.
Security
When users dene the DB2 standards, the security aspects of both the CICS DB2 test system and the CICS DB2 production system can be important. When reusing a thread, the CICS DB2 attachment checks the users authorization and whether the user ID changed from the previous transaction using the thread. From a performance viewpoint, the user ID should not change from one transaction to another. The major considerations concerning security in a CICS DB2 system are described in Chapter 6. Security on page 49.
Exit program
The exit program can be written in assembler language, COBOL, or PL/I. The program is a CICS program, which means it must: v Adhere to normal CICS conventions. v Be dened to CICS (unless program autoinstall is being used. v Use CICS command level statements. v Return to CICS using an EXEC CICS RETURN command.
Chapter 10. Application design considerations
95
The CICS attachment facility program passes a parameter list to the exit program using a COMMAREA. The exit program can change the default plan name (DBRM name) supplied in the parameter list, when the rst SQL statement is processed by the CICS attachment facility The name species the plan name for this execution of the transaction.
Implementation
Dynamic plan switching (DPS) allows you to use more than one plan in a transaction. However, switching plans within a CICS transaction instance should be a rare occurrence. The dynamic plan exit was designed to select a plan dynamically at the start of the transaction (dynamic plan selection) not to change plans frequently within transactions. To do dynamic plan switching the thread must be released at syncpoint and reacquired to drive the dynamic plan exit. In releases of CICS before CICS Transaction Server Version 1 Release 2, dynamic plan switching occurred only for pool threads. After that time switching occurs also for DB2ENTRY threads. To invoke the dynamic plan exit to do plan switching after the end of a UOW your transaction must release the thread at syncpoint. A transaction releases a thread at syncpoint only if: v It is a terminal driven task, or a nonterminal driven task and NONTERMREL=YES is set in the DB2CONN v No held cursors are open v Any DB2 special registers modied have been set back the their initial state. v DB2 special register CURRENT DEGREE has ever been modied by this transaction.
Packages
In DB2 2.3 and later, you can probably more easily obtain the function provided by dynamic plan switching by using packages. Dynamic plan switching was intended to ease two problems that occur, for a program running under a CICS transaction, when all SQL calls are bound together into a single plan. First, changing one DBRM in a plan requires all the DBRMs in the plan to be bound again. Second, binding a large plan can be very slow, and the entire transaction is unavailable for processing during the operation. Just quiescing an application can be very difficult for a highly used one, but to leave the plan out of commission for an extended time while it is being rebound is usually unacceptable. With packages, you can break the program units into much smaller parts, which you can rebind individually without affecting the entire plan or even the current users of the particular package you are rebinding. Since updating the plan is easier with packages, you can build much larger applications without the need to switch transactions, programs, or plans to
96
accommodate DB2 performance or availability. This also means that you do not have to maintain as many RDO defnitions. You can also avoid situations where you might otherwise use dynamic SQL for program exibility. Programs are easily expanded by specifying packages that do not exist yet or by specifying package collections. The qualier option on packages and plans to reference different table sets can give you more exibility to avoid plan switching. In summary, packages: v Minimize plan outage time, processor time, and catalog table locks during bind for programs that are logically linked together with START, LINK, or RETURN TRANSID and have DBRMs bound together to reduce DB2ENTRY denitions. v Reduce CICS STARTS or exits. v Avoid cloning CICS and DB2ENTRY denitions. v Provide the ability to bind a plan with null packages for later inclusion in the plan. v Allow you to specify collection at execution time using SET CURRENT PACKAGESET=variable, which is a powerful feature when used with QUALIFIER v Provide the QUALIFIER parameter, which adds exibility to: Allow you to reference different table sets using unqualied SQL Reduce the need for synonyms and aliases Lessen the need for dynamic SQL There are other benets that using packages can provide in a CICS environment: v It allows you to use fewer plans. v It allows you to bind low-use transactions into a single plan. v It increases thread reuse potential. You can also optimize your application by using package lists that order their entries to reduce search time or by keeping package list entries to a minimum. DB2 3.1 also provides accounting at the package level. For more information about packages, refer to the discussions of planning to bind and preparing an application program to run in the IBM DATABASE 2 Application Programming and SQL Guide and DB2 Packages: Implementation and Use.
If you specify a program name of DSNCEXT1 or DSN2EXT1 CICS dynamically changes it to the required name DFHD2EX1. If you get the INVEXITREQ condition, the CICS attachment facility is not enabled.
97
When the CICS attachment facility is enabled it is not necessarily connected to DB2. It can be waiting for DB2 to initialize. When this occurs, and an application issues an EXEC SQL command when CONNECTERROR=ABEND is specied in the DB2CONN, an AEY9 abend would result. CONNECTERROR=SQLCODE would result in a -923 SQL code being returned to the application. You can use the INQUIRE EXITPROGRAM command with the CONNECTST keyword in place of the EXTRACT EXIT command to determine whether the CICS is connected to DB2. The CONNECTST keyword of the INQUIRE EXITPROGRAM command returns values: v CONNECTED, when the CICS attachment facility is ready to accept SQL requests v NOTCONNECTED, when the CICS attachment facility is not ready to accept SQL requests. If the command fails with PGMIDERR, this is the same as NOTCONNECTED. Figure 27 shows an example of assembler code using the INQUIRE EXITPROGRAM command.
CSTAT DS F ENTNAME DS CL8 EXITPROG DS CL8 ... MVC ENTNAME,=CL8'DSNCSQL' MVC EXITPROG,=CL8'DFHD2EX1' EXEC CICS INQUIRE EXITPROGRAM(EXITPROG) ENTRYNAME(ENTNAME) CONNECTST(CSTAT) NOHANDLE CLC EIBRESP,DFHRESP(NORMAL) BNE NOTREADY CLC CSTAT,DFHVALUE(CONNECTED) BNE NOTREADY
If you specify a program name of DSN2EXT1, CICS dynamically changes it to the required name, DFHD2EX1. Further consideration on the use of the EXTRACT EXIT or INQUIRE EXITPROGRAM commands by applications has to be made when running in an environment where dynamic workload balancing using the MVS workload manager is taking place. If an application avoids making DB2 calls because it knows the CICS DB2 connection is not active, but issues an error message instead and returns normally, it could delude the workload manager into routing more work to the CICS region. This is called the storm drain effect. Because the application did not abend, the workload manager believes that good response times are being achieved by this CICS region for DB2 work, and routes more work down the storm drain. This effect can be avoided by doing either of the following: v Ensuring the application abends.
98
v Running with STANDBYMODE=RECONNECT and CONNECTERROR=SQLCODE in the DB2CONN. Applications should not use the Extract or Inquire Exitprogram commands to test whether DB2 work is possible. Instead, a test should be made for -923 SQLcode to be returned if CICS is not connected to DB2. At the time of returning the -923 sqlcode, the CICS DB2 attachment facility informs the MVS workload manager that the request has failed, and the storm drain effect is avoided. You are, therefore, advised to do the following: v Specify STANDBYMODE=RECONNECT in the DB2CONN. This ensures that the CICS DB2 attachment facility waits (in standby mode) for DB2 to initialize and connect automatically, should DB2 be down when connection is rst attempted. Also, if DB2 subsequently fails, the CICS DB2 attachment facility reverts again to standby mode and wait for DB2. It then automatically connects when DB2 returns. v Use CONNECTERROR=SQLCODE provided applications handle the -923 code correctly. v Avoid using EXTRACT EXIT or INQUIRE EXITPROGRAM commands if CONNECTERROR=SQLCODE can be used. v Use CONNECTERROR=ABEND if an AEY9 abend is required. Use the INQUIRE EXITPROGRAM command instead of the EXTRACT EXIT command. v It is worth noting that AEY9 abends can still occur even when STANDBYMODE=RECONNECT and CONNECTERROR=SQLCODE are specied if: The CICS DB2 attachment facility is never started. An AEY9 results if an application issues an EXEC SQL command. You should always specify DB2CONN=YES in the SIT, or program DFHD2CM0 in PLTPI. Therefore the CICS DB2 attachment is at minimum in standby mode. The CICS DB2 attachment is shut down using a DSNC STOP or CEMT/EXEC CICS SET DB2CONN NOTCONNECTED command. It is advisable to avoid shutting down the attachment. The CICS DB2 SPI commands allow dynamic modication of the environment without shutting down the attachment.
99
In v v v
summary: The next FETCH following a syncpoint must come from the same task. You cannot hold a cursor across end of task. Therefore, cursors are not held across the EOT portions of pseudoconversational transactions.
If you try to hold a cursor across EOT, the cursor is closed and you get an SQLCODE -501 when you execute the next FETCH. The precompiler cannot detect this and you do not get a warning message notifying you of this situation. In general, threads can become candidates for reuse at each syncpoint. When you use DECLARE CURSOR...WITH HOLD in the CICS applications, consider the following recommendations: v Close held cursors as soon as they are no longer needed. Once all held cursors are closed, syncpoint can free the thread for thread reuse. v Always close held cursors before EOT. If you do not close your held cursors, the CICS attachment facility forces sign-on to restore the thread to the initial state, and this incurs additional processor time.
Application architecture
When CICS applications use DB2 data, the application architecture must take account of design aspects related to the CICS attachment facility. One of the most important aspects to consider is the relationship between transaction IDs, DB2 plans and packages, and program modules. If any of the program modules uses SQL calls, a corresponding DB2 plan or package must be available. The plan to be used for a transaction ID is dened in the DB2CONN or a DB2ENTRY. The plan can be named explicitly, or a plan exit routine can be named that selects the plan name. The plan must include the DBRMs from all modules that could possibly run under this transaction ID.
100
To control the characteristics of the plan and the CICS attachment facility threads, the relationship between transaction IDs, DB2 plans, and the program modules must be dened in the design step. Some characteristics of the threads, environmental description manager (EDM) pool, and plans that depend on the design are the: v Plan sizes v Number of different plans concurrently in use v Number of threads concurrently in use v Possibility of reusing a thread v v v v v Size of the EDM pool I/O activity in the EDM pool Overall page rate in the system Authorization granularity Use of DB2 packages.
These characteristics in turn inuence the factors listed in CICS DB2 design criteria on page 91.
A sample application
A simple example can be used to explain the consequences of different application design techniques. Figure 28 shows how CICS MAPs and transaction IDs are correlated, and how the transactions should work, without DB2 considerations. In this example:
TRX0 MAP0 TRXA MAPA
RECEIVE P0 XCTL PA
RECEIVE
XCTL
XCTL P1 P2 P3 PB PC PD
SEND
SEND
MAP1
MAP2
MAP3
MAPB
MAPC
MAPD
101
v The transaction ID, TRX0, is specied in the EXEC CICS RETURN TRANSID(TRX0) command, when a program (not shown) returns control after displaying MAP0. v The next transaction then uses the transaction ID, TRX0, independent of what the terminal user decided to do. v Program P0 is the initial program for transaction TRX0. v We assume that all programs shown are issuing SQL calls. v Depending on the option chosen by the terminal user, program P0 performs a CICS transfer control (XCTL) to one of the programs: P1, P2, or P3. v After issuing some SQL calls, these programs display one of the maps: MAP1, MAP2, or MAP3. v The example shown on the right side of the gure works in the same way. v In some situations, program P3 transfers control to program PB. Later sections discuss the following design techniques for combining CICS transactions with DB2 plans: v One large plan v Many small plans v Transaction grouping v A fallback solution v Table-controlled program ow v Using packages. But rst the general problem with plan switching is discussed.
102
Advantages
v There are no restrictions regarding which program modules can be executed under any transaction ID. For example, it is possible that program P3 can transfer control to program PB. This does not require any changes for the plan or the denition in CICS. v Each DBRM exists in only one plan (PLAN0). v One large plan is simple to maintain. Any DBRM modication requires only that this plan be BOUND again. v Thread reuse is easy to obtain. All transactions could use the same DB2ENTRY.
Disadvantages
v The complete plan must be rebound for any DB2 program modication. v BIND can be time-consuming for large plans. v The BIND process cannot take place while the plan is in use. The plan is likely to be in use in a production system most of the time due to normal activity. In a test environment, the transaction rate is normally low, but programmers can use debugging tools that make the response times longer with conversational programs. This can effectively keep the thread and plan busy. v DB2-invoked REBIND (due to plan invalidation) allows no DB2 transactions to execute this plan. v There is no real information value in messages and statistics pointing out the plan name, because there is only one plan. v EDMPOOL must be large enough to cope with DBDs, SKCTs, and CTs and must allow some fragmentation. Remember that starting with DB2 Release 2, the plan segmentation feature allows DB2 to load into CTs only parts of the application plans being executed. Nevertheless, the header and directory parts of an application plan are loaded in their entirety into the SKCT (if not already loaded), then copied from the SKCT to CTs. This happens at thread creation time. Because the application plan directory size is directly dependent on the number of segments in the plan, using a large plan inuences the EDMPOOL size and the number of I/O operations needed to control it. See the discussions of DB2 transaction ow and EDM pool in the IBM DATABASE 2 System Monitoring and Tuning Guide.
103
However, program P3 can transfer control (using the XCTL command) to program PB. A plan switching technique must then be used. These techniques are described in Switching CICS transaction codes on page 102. A special variation of using small plans exists. In some applications, it can be convenient to have the terminal user specify the transaction ID for the next transaction. It is typically in read-only applications, where the user can choose between many different information panels by entering a systematically built 1- to 4-character transaction ID. The advantage for the user is the ability to jump from any panel to any other panel without passing a hierarchy of submenus. If a DB2 plan is associated with each transaction ID, the application ends up with many small plans.
Advantages
v Plan maintenance is relatively simple, because little overlap exists between plans. v High information value in messages, statistics, and so on, pointing out the plan name. Note: Packages offer these advantages, too.
Disadvantages
v Plan switching occurs often, unless the application ow follows a narrow path. v It is difficult to use protected threads, because the transactions are spread over many sets of transaction IDs, plans, and threads. v Resource consumption can be high, due to plan switching and low thread reuse. Note: Packages avoid these disadvantages.
Transaction grouping
Transaction grouping can produce a number of midsize independent plans, where a plan switch can occur if necessary. It is often possible to dene such groups of programs, where the programs inside a group are closely related. That means that they are often executed in the same transaction, or in different transactions being executed consecutively. One separate plan should then be used for each group. In the example in Figure 28 on page 101 two plans could be built: v PLAN1 for (TRX0) using the DBRMs from programs P0, P1, P2, and P3. v PLANA for (TRXA) using the DBRMs from programs PA, PB, PC, and PD. However, program P3 can transfer control to program PB. A plan switching technique could then be used. These techniques are described in section Switching CICS transaction codes on page 102. It is recommended that plan switching is an exception and not the normal case, mainly due to additional processor overhead. In this case, the result of the transaction grouping technique matches the result for the technique of using many small plans. This is because of the simplicity of the example used. Normally the transaction grouping technique should produce a larger plan.
104
Advantages
v The plan size and the number of different plans can be controlled by the user. v Thread reuse is likely, depending on the transaction rate within the group.
Disadvantages
v v v v Plan overlap can occur. The optimum grouping can change over time. Plan switching may be necessary. Plan switching is handled in the application code.
A fallback solution
You can use this technique if the applications were developed with little attention to the DB2 plan aspects. After the application is completely developed, the plans are dened to match the transaction. In general this technique is not recommended, but it is useful for conversion projects, where the application design is unchanged but the application now uses DB2. When dening the DB2 plans and the DB2ENTRY specications, you can perform the following steps: 1. For each program module with SQL calls, analyze under which CICS transaction codes they might run. It is likely that a given program module is used under more than one CICS transaction code. The output from this step is a list of DBRMs for each transaction. 2. For each CICS transaction code decide which plan it should use. (Only one plan may be specied in the DB2ENTRY for a given CICS transaction code. More than one transaction may use the same plan). For this step you have many alternatives. The possible number of plans to use is between one and the number of different transaction IDs. Applied to the example in Figure 28 on page 101, the fallback solution implies: v One plan, PLAN0, using the DBRMs from P0, P1, P2, P3, and PB, used by the transaction ID TRX0 v One plan, PLANA, using the DBRMs from PA, PB, PC, and PD, used by the transaction ID TRXA v Two DB2ENTRY denitions, one for each plan The advantages and disadvantages of the fallback technique completely depend on the actual application design and the result of the above-mentioned steps.
Table-controlled program ow
One of the main problems with the techniques discussed so far is that the programs must contain logic to decide when to switch plans (that is, transaction ID). If you want to change the plan structure (for example for performance and operational reasons), you then need to change the application programs accordingly. A different technique is to have the program ow controlled by a table instead of having code to do this in several programs. The main idea is that it is simpler to
105
maintain the relationship between the plans, programs, and transaction IDs in a table than to maintain code in each application program to do the logic. Developing the application programs is also simpler if a standard interface is provided.
Control table
The control table is used to control the program ow in the transactions. The design principle presented below is an example of a standard method that can be used to implement different types of application design. It allows the use of for example one large plan or many small plans without changing the programs. Note: It is recommended that you use packages rather than this technique to control program ow. Figure 29 on page 108 shows an example of the contents in the control table. The example is based on the design situations described in Figure 28 on page 101. Function name The function name eld of the table supplements the program eld. It works in exactly the same way. It is used in the cases where the terminal user enters a function name in a command eld, eventually supplied with a key. The PFCP program can accept either a function name or a program name. PFCP then uses the function column to search for a valid transaction. In this way, the logic to interpret the users choices is also removed from the programs and placed in the table, where it is easy to maintain. Program The name of the program described in this row. Transaction The transaction ID name under which the program in the program column can be executed. Plan name The plan name eld is not used. It is shown for illustration purposes only. It shows the plan name used by the corresponding transaction. New TRANS ID An * in this column of the table means that the corresponding row can be used when searching for a new transaction ID to start a given program. The control table reects the following main relationships: v Relationships between plans and programs/DBRMs, which are described in the DB2 catalog table SYSIBM.SYSDBRM v Relationships between transaction codes and plans, which are described using the DB2ENTRY and DB2TRAN CICS denitions When implementing the denitions in CICS, you should consider the following: v Previously, many different macro RCTs could be used by a CICS system over a period of time. Therefore, different RCT names could be used at different times. v The same RCT name can be used by different CICS systems.
106
v With RDO-dened CICS DB2 denitions, the need for multiple RCTs is removed, because DB2ENTRYs and DB2TRANS can be installed or discarded as required using the same DB2CONN. Multiple logical RCTs could be maintained in an RDO environment by placing a DB2CONN denition and its associated DB2ENTRYs and DB2TRANs in a list, and installing the required list. Two additional columns would be added to the control table: 1. DB2CONN name 2. CICS APPLID At execution time, the PFCP can determine the applid and DB2CONN name using an EXEC CICS INQUIRE SYSTEM command. It then searches for rows belonging to the current applid and DB2CONN. The disadvantage, however of multiple logical RCTs is that a DB2CONN cannot be discarded and replaced without shutting down the CICS DB2 attachment facility. A solution is to have one DB2CONN denition and to change RCTs by discarding and installing different sets of DB2ENTRYs and DB2TRANS to work with it. These can be discarded and installed without shutting down the attachment facility. In this case, the control table could contain a DB2ENTRY name instead of the DB2CONN. At execution time, the PFCP can use the CICS DB2 SPI commands to inquire whether this DB2ENTRY was installed. In this way using the name of one DB2ENTRY to identify the set of denitions installed, identies the logical RCT. The control table can be implemented in different ways. The most useful solutions are probably either a DB2 table or a main storage table. A DB2 table is the simplest to develop and maintain. One or two SELECT calls are needed for each invocation of PFCP. These SELECTs should return only one row and indexes can be used. The data and index pages are referenced often and probably stay in the buffer pool. The response time impact is thus minimal. A main storage table is faster to access, at least until a certain number of rows in the table is reached. It is more complicated to maintain.
107
Control Table Function name Sales Order Pay Price Order Parts Price Program P0 P1 P2 P3 PA PB PC PD PB Transaction TRX0 TRX0 TRX0 TRX0 TRXA TRXA TRXA TRXA TEMP Plan name PLAN0 PLAN0 PLAN0 PLAN0 PLANA PLANA PLANA PLANA PLANx New TRANS ID *
Program Flow Control Program (PFCP) PGM = PFCP Terminal Map TRX0 RECEIVE MAP Process End by SEND same Map or XCTL to PFCP with new program or Function COMMAREA COMMAREA XCTL EXEC START PGM = RELAY COMMAREA XCTL Process End by SEND Map or XCTL to PFCP with program name
Program ow
The principle in the program ow is shown in Figure 29. The ow for the application design used in Figure 28 on page 101 is explained below: 1. The terminal user sends a transaction to CICS. The transaction ID is TRX0. 2. The transaction denition points to program P0. 3. Program P0 receives the map, does some processing, and decides that program P3 is needed. 4. Instead of transferring control to program P3 (the DBRM for P3 could be part of another plan), P0 transfers control to the program ow control program (PFCP in this example). P0 also passes a COMMAREA. 5. PFCP does a table lookup in the control table to see if program P3 is included in the plan currently in use (PLAN0). This is done by checking if P3 is
108
specied in the same row as the current transaction ID (TRX0). In the example, this is the case (line 4 in the table). 6. PFCP then transfers control to program P3. It also passes the COMMAREA it received from P0 to P3. 7. P3 processes the necessary SQL calls and nishes either by sending a map to the terminal or by transferring control to PFCP (not shown) to execute another program. 8. Assuming that this other program is PB, PFCP again checks whether PB is allowed to run under the current transaction ID, which still is TRX0. The table shows that PB must not be executed under TRX0. PFCP then examines the table to nd a transaction ID under which program PB can be executed. In the example, both TRXA and TEMP are valid transaction IDs. However, TRXA is pointing to program PA in the transaction denition. The New_TRANS_ID column of the table shows that only the rows with an * can be used when searching for a new transaction ID to start a given program. In this case, it is the TEMP transaction. There are two possibilities for program names in the RDO transaction denition entry for the TEMP transaction ID: v The RDO transaction denition can point directly to the new program (PB). In this case, there must be a transaction ID for each program that could be started in this way. Also, to use the COMMAREA, the program being started must contain logic to nd out whether it is being started by START or by gaining control from an XCTL. v The RDO transaction denition can point to a common program, here called the RELAY program. In this case, one or more transaction IDs can be used. All of them point to the RELAY program in the RDO transaction denition. The purpose of the RELAY is to transfer control to the appropriate program. All these programs are then never begun with START and do not need to handle this situation. The solution with the RELAY program is shown in Figure 29 on page 108. 9. PFCP starts the transaction TEMP, passing the COMMAREA. 10. The RELAY program is started. It must use an EXEC CICS RETRIEVE command to retrieve the COMMAREA. 11. From the COMMAREA, RELAY picks up the program name PB. 12. RELAY transfers control to PB, passing the COMMAREA. 13. The plan switch is completed.
Advantages
v This method allows you to implement different types of application design, such as using one large plan or many small plans. v The decision of when to switch plans is taken away from the development process, and is not part of the coding. v Only the control table needs to be updated when new programs are set into production. The existing programs do not need to be changed, even if they can call the new functions. v The relationship between the transaction IDs, the DB2 plans, and the programs can be changed without changing the programs. However, the control table must then be changed. v Information from the DB2 catalog (SYSPLAN and SYSDBRM) can be used to build the control table.
109
v Alternatively, the control table can be used to generate information about the DBRM structure of the plans. v The control table contains information that can assist in dening the DB2ENTRYs and DB2TRANs in CICS, (if the plan name column is available). v Other functions can be included in a control table structure, for example information about which transaction ID to use in the TRANSID option of the EXEC CICS RETURN command.
Disadvantages
The two major disadvantages of this technique are the costs of designing and developing the solution and the execution time overhead. The cost of getting from program to program is approximately doubled. However, this should normally not correspond to more than a few percent increase in the processor time for the transaction. To decide whether or not to use such a solution, you should balance these disadvantages against the advantages.
Using packages
As explained in Implementation on page 96, the use of dynamic plan switching requires an implicit or explicit CICS SYNCPOINT to allow switching between plans. The use of packages removes not only the need for dynamic plan switching but also the need for SYNCPOINTs. In addition, the ability to handle a large number of packages in a plan containing a single package list entry for a collection provides an environment where protected threads can be used and thread reuse optimized. For example, a transaction that uses dynamic plan switching currently could be converted to use packages as follows: v Bind all of the DBRMs contained in the plan associated with the transaction into a single collection. v Bind a new plan with a PKLIST containing a single wildcard entry for this collection. v Modify the DB2ENTRY entry for this transaction to use the new plan. Protected threads could now be used for this transaction to optimize thread reuse. High-usage packages could be bound with RELEASE(DEALLOCATE), with low-usage packages bound with RELEASE(COMMIT). This would result in the high-usage packages being retained in the plans package directory until plan deallocation, while the low-usage packages would be removed from the directory, and the space in the EDM pool released. The disadvantage of this approach is that the use of RELEASE(DEALLOCATE) requires intervention to force deallocation of highly-used packages allocated to long-running threads to allow a package to be rebound. Consider that to rebind a package is less expensive than to rebind a plan, in terms of the time spent doing it. DB2 Version 2 release 3 had no accounting for individual packages. So, if you rely on accounting data for your operation you should consider setting up procedures when the information is collected by plan name. This restriction was removed in DB2 Version 3 release 1, where you can have accounting at the package level.
110
3. In the DB2ENTRY, replace the dynamic plan switching exit program name with the name of this new plan. For example, replace:
PLANEXITNAME=DSNCUEXT
with
PLAN=PLANAPP1
v One plan per transaction The steps in using this approach are: 1. Bind the DBRMs for groups of transactions or all transactions into packages. The collections to be used could be based on the transactions being converted, such as TRAN1, or on the application, as above. The latter approach is preferable because creating and maintaining collections on a transaction basis requires greater administrative effort, particularly if there are many common routines. 2. Bind a new plan for each transaction with a package list referring to a single wildcard package list entry that would depend on the approach taken. Use TRAN1.* if the collections were based on transactions or COLLAPP1.* if a single collection was set up for all transactions:
BIND PLAN (TRAN1) .... PKLIST (TRAN1.*) ...
or
BIND PLAN (TRAN1) .... PKLIST (COLLAPP1.*) ...
3. Modify the DB2ENTRY denitions to replace the DPS exit with the plan names associated with the transactions.
111
This approach is preferable when using DB2 Version 2 release 3 if accounting data by plan name is required. Using one plan for all transactions provides accounting data by transaction ID, but not by the plan names previously associated with DPS. A similar approach can be taken for converting all CICS applications whether DPS is used or not.
Programming
This section describes the following programming considerations: v SQL language v Views v Updating index columns v Commit processing v Serializing transactions v Page contention
SQL language
The complete SQL language is available to the CICS programmer with only minor restrictions. For a detailed description on using the SQL language in a CICS program, see the IBM DATABASE 2 Application Programming and SQL Guide. In a CICS program, it is possible to use: v Data manipulating language (DML) v Data description language (DDL) v GRANT and REVOKE statements CICS also supports both dynamic and static SQL statements. However, for performance and concurrency reasons, it is recommended that in general you do not issue DDL and GRANT and REVOKE statements in CICS. You should also limit dynamic SQL use. The reason for these recommendations is that the DB2 catalog pages can be locked, with a lower concurrency level as a consequence. Also the resource
112
consumption for these types of SQL statements is typically higher than resource consumption for static DML SQL statements.
Views
It is generally recommended that you use views where appropriate. Some views, however, cannot be updated. In a real-time, online system, you often need to update rows you have retrieved using views. If the view update restriction forces you to update the base table directly (or by using another view), you should consider only views that can be updated. In most cases this makes the program easier to read and modify.
Commit processing
CICS ignores any EXEC SQL COMMIT statement in your application programs. The DB2 commit must be synchronized with CICS, which means that your program must issue an EXEC CICS SYNCPOINT command. CICS then performs the commit processing with DB2. An implicit SYNCPOINT is always invoked by the EXEC CICS RETURN at EOT. You should be aware of the actions taken at SYNCPOINT: v The UOW is completed. This means that all updates are committed in both CICS and in DB2. v The thread is released for terminal-oriented transactions (unless a held cursor is open). If the thread is released and there is no use for it, it is terminated unless it is a protected thread. v The thread is not released for non-terminal-oriented transactions, unless NONTERMREL=YES is specied in the DB2CONN. It rst happens when the transaction is nished. v All opened cursors are closed. v All page locks are released.
Chapter 10. Application design considerations
113
v If RELEASE(COMMIT) was specied in the BIND process: Table space locks are released The cursor table segments of the plan in the EDM pool are released. v Table space locks obtained by dynamic SQL are released independently of the BIND parameters.
Serializing transactions
You may need to serialize the execution of one or more transactions. This typically occurs when the application logic was not designed to deal with concurrency and in cases where the risk of deadlocks is too high. You should allow serialization only for low-volume transactions because of potential queueing time. The following methods each have different serialization start and end times: v CICS transaction classes. The CICS facility of letting only one transaction execute at a time in a CLASS is useful to serialize the complete transaction. v DB2 thread serialization. In cases where the serialization may be limited to an interval from the rst SQL call to syncpoint (for terminal-oriented transactions, and nonterminal-oriented transactions if NONTERMREL=YES is dened), you can use your DB2ENTRY specications to ensure that only one thread of a specic type is created at one time. This technique allows concurrency for the rst part of the transaction, and is useful if the rst SQL call is not in the beginning of the transaction. Do not use this technique if your transaction updated other resources before it issues its rst SQL statement. v CICS enqueue and dequeue. If you know that the serialization period necessary is only a small part of the programs, then the CICS enqueue and dequeue technique can be useful. The advantage is that only the critical part of the transaction is serialized. This part can be as small as just one SQL statement. It allows a higher transaction rate than the other methods, because the serialization is kept to a minimum. The disadvantage compared to the other techniques is that the serialization is done in the application code and requires the programs to be changed. v LOCK TABLE statement. It is recommended that you do not use the LOCK TABLE statement. The LOCK TABLE statement can be used to serialize CICS transactions and other programs, if EXCLUSIVE mode is specied. Note that it is the whole table space that is locked, not the table referenced in the statement. The serialization starts when the LOCK statement is executed. The end time for the serialization is when the table space lock is released. This can be at syncpoint or at thread deallocation time. Use this technique with care, because of the risk of locking the table space until thread deallocation time. However, this technique is the only one that works across the complete DB2 system. The other techniques are limited to controlling serialization of only CICS transactions.
Page contention
When designing applications and databases, consider the impact of having many transactions accessing the same part of a table space. The term hot spot is often used to describe a small part of the table space, where the access density is signicantly higher than the access density for the rest of the table space.
114
If the pages are used for SELECT processing only, there is no concurrency problem. The pages are likely to stay in the buffer pool, so little I/O activity takes place. However, if the pages are updated frequently, you may nd that you have concurrency problems, because the pages are locked from rst update until syncpoint. Other transactions using the same pages have to wait. Deadlocks and timeouts often occur in connection with hot spots. Two examples of hot spots are sequential number allocation and insert in sequence.
Insert in sequence
In situations where many transactions are inserting rows in the same table space, you should consider the sequence of the inserted rows. If you base a clustering index on a eld with a time stamp, or a sequential number, DB2 tries to insert all rows adjacent to each other. The pages where the rows are inserted can then be considered a hot spot. Note that in the clustering index, all inserts are also in the same page, within a given period. If there is more than one index and the nonclustering index is used for data retrieval, the risk of deadlock between index and data is increased. In general terms, the INSERT obtains the X-locks (exclusive locks) in the following order: 1. Clustering index leaf page 2. Data page
Chapter 10. Application design considerations
115
3. Nonclustering index leaf page When the SELECT statement uses the nonclustered index, the S-locks (shared locks) are obtained in this order: 1. Nonclustering index leaf page 2. Data page This is the opposite order to the order of the INSERT locks. Often the SELECT rate is higher for the new rows. This means that the data pages are common for the INSERT and the SELECT statements. Where the index page is also the same, a deadlock can occur. A solution to the deadlock risk is to spread the rows by choosing another index as clustering. The general methods of how to handle deadlock situations are described in Handling deadlocks on page 147.
116
Wait types
The CICS DB2 task related user exit, DFHD2EX1, uses the WAIT_MVS function of CICS dispatcher domain to put the running CICS task into a CICS dispatcher wait. DFHD2EX1 issues WAIT_MVS calls for different purposes and these are distinguished by different resource name and resource type values. The resource name and resource type values are visible in the dispatcher section of a CICS system dump and are also externalised on the CEMT INQUIRE TASK panel as Hty and Hva values respectively. For example, when a CICS system dump is taken a CICS task is waiting for the CICS DB2 subtask to complete its work in DB2, this wait is represented by a resource type of DB2 and a resource name of LOT_ECB. The examples shown in Figure 30, Figure 31 on page 118, and Figure 32 on page 118 show how this would appear in the dispatcher section of CICS system dump, and using the CEMT inquire task panels.
DS_TOKEN KE_TASK 00020003 000C0005 000E0005 00120007 00160005 00180003 001A0003 001C0003 008A0005 008E0001 0102006F 01040031 01060009 029D7C80 029CAC80 02B99080 02B99780 02B99B00 029CA580 029CA200 03F03900 02B92080 02B13080 02BA9080 02BA9780 02B13B00 TY S SY SY SY SY SY SY SY SY SY SY NS NS NS P PS TT RESOURCE TYPE N OK - TIEXPIRY N OK N OK - JCJOURDS N OK - KCCOMPAT N OK - JCTERMN N OK - ICMIDNTE N OK - TCP_NORM N OK - ICEXPIRY N OK - JCJOURDS N OK IN SMSYSTEM Y OK - DB2 RESOURCE ST NAME DS_NUDGE SUSP SUSP DFHJ01A SUSP SINGLE OLDW SUBTASK OLDW DFHAPTIM SUSP DFHZDSP OLDW DFHAPTIX SUSP DFHJ02A SUSP SUSP LOT_ECB MVS MVS TIME OF SUSPEND 18:50:29 18:11:22 18:39:39 17:02:12 17:01:56 08:00:00 18:51:27 18:50:29 17:02:04 18:47:49 18:51:22 18:50:29
SUS SUS SUS SUS SUS SUS SUS SUS SUS SUS SUS RUN SUS Y OK -
117
INQUIRE TASK STATUS: RESULTS - OVERTYPE TO MODIFY Tas(0000151) Tra(DSNC) Sus Tas Pri( 255 ) ? Tas(0000161) Tra(XC05) Fac(1303) Sus Ter Pri( 001 ) Tas(0000162) Tra(CEMT) Fac(1302) Run Ter Pri( 255 )
Figure 31. CICS CEMT INQUIRE command for a CICS DB2 wait transaction
INQUIRE TASK SYNTAX OF SET COMMAND Tas(0000161) Tra(XC05) Fac(1303) Sus Ter Pri( 001 ) Hty(DB2 ) Hva(LOT_ECB ) Hti(000018) Sta(TO) Use(SYSADM ) Rec(X'A8B5FE112D54CA85') CEMT Set TAsk() | < All > < PRiority() > < PUrge | FOrcepurge >
Figure 32. CICS CEMT INQUIRE command after question mark (?)
The full list of waits issued from the CICS DB2 task related user exit DFHD2EX1, their meanings, and whether the task can be purged or forcepurged out of this wait is given in Table 8.
Table 8. WAITs issued from the CICS DB2 TRUE
Resource type or Hty Resource name or value Hva value DB2 CDB2RDYQ LOT_ECB Meaning CICS task is waiting for DB2, that is, waiting for the CICS DB2 subtask to complete the request. Purge and forcepurge Yes
name of DB2ENTRY CICS task is waiting for a thread to become available. No or *POOL The resource name details for which DB2ENTRY or the pool has a shortage of threads. CICS task is waiting for a CICS DB2 subtask to become available. This indicates that TCBLIMIT has been reached and all TCBs are in use running threads. No
CDB2TCB
DB2 indicates that the task is waiting for DB2 or, more specically, the task is waiting for its associated subtask to complete the DB2 request and post it back. The task can be purged or forcepurged when in this state, in which case the CICS task abends and backout occurs. In addition, the CICS DB2 subtask is detached causing DB2 to back out as well. CDB2RDYQ indicates that the THREADLIMIT value of a DB2ENTRY or the pool has been exceeded and that THREADWAIT is set to YES indicating that the task should wait. Purge of the task in this state is not allowed. An attempt to forcepurge the task results in message DFHAP0604 being issued to the console. Forcepurge is deferred until a thread has been acquired and the task is no longer queued waiting for a thread. Instead, a SET DB2ENTRY() THREADLIMIT(n) command can be used to increase the number of threads available for the DB2ENTRY, or a SET DB2CONN THREADLIMIT(n) if it is the pool. CICS posts tasks to try again to acquire a thread if the threadlimit is increased.
118
CDB2TCB indicates that the task is allowed a thread but that all CICS DB2 subtasks are in use and the TCBLIMIT specied in the DB2CONN has been reached so no new TCBs can be attached. Purge of the task is not allowed. An attempt to forcepurge the task results in message DFHAP0604 being issued to the console and forcepurge is deferred until a TCB has been acquired and the task is no longer queued waiting for a TCB. Instead a SET DB2CONN TCBLIMIT command can be used to increase the number of TCBs allowed. CICS posts tasks to try again to acquire a DB2 subtask if the TCBLIMIT is increased. Table 9 gives details of WAITS issued using WAIT_OLDC dispatcher calls where the ECB is hand posted:
Table 9. WAITS issued using WAIT_OLDC dispatcher calls
Resource type or Hty Resource name or value Hva value DB2_INIT Meaning Purge and forcepurge
CICS DB2 initialization program DFHD2IN1 issues the Yes wait to wait for the CICS initialization task running program DFHD2IN2 to complete. name of DB2CONN A SET DB2CONN NOTCONNECTED command has been issued with the WAIT or FORCE option. DFHD2TM waits for the count of tasks using DB2 to reach zero. Yes
DB2CDISC
DB2EDISA
name of DB2ENTRY A SET DB2ENTRY DISABLED command has been issued with the WAIT or FORCE option. DFHD2TM waits for the count of tasks using the DB2ENTRY to reach zero.
Yes
Table 10 shows details of EXEC CICS WAIT EXTERNAL requests issued by the CICS DB2 attachment facility.
Table 10. EXEC CICS WAIT EXTERNAL requests issued by the attachment facility
Resource type or Hty Resource name or value Hva value USERWAIT CDB2TIME Meaning Purge and forcepurge
The CICS DB2 service task program DFHD2EX2 is in Yes its timer wait cycle either waiting for the protected thread purge cycle to pop or to be posted for another event. The CICS DB2 service program DFHD2EX2 is waiting Yes for DB2 to post it when it becomes active.
USERWAIT
DB2START
Table 11 gives details of EXEC CICS WAIT EVENT requests issued by the CICS DB2 attachment facility:
Table 11. EXEC CICS WAIT EVENT requests
Module DFHD2STR DFHD2STR DFHD2STP DFHD2STP Resource name ATCHMSUB DTCHMSUB MSBRETRN CEX2TERM Meaning The CICS DB2 startup program DFHD2STR has attached the master subtask program DFHD2MSB and is waiting for it to identify to DB2 The CICS DB2 startup program is waiting for the master subtask program DFHD2MSB to terminate. The CICS DB2 shutdown program is waiting for the master subtask program DFHD2MSB to terminate. The CICS DB2 shutdown program is waiting for the CICS DB2 service task CEX2 running program DFHD2EX2 to terminate all subtasks and terminate itself.
119
Messages
Messages issued by the CICS attachment facility use the DFHDB prex which is also used for CICS DBCTL messages. Message numbers are in the range 2000 through 2999 and are reserved for CICS DB2. Thus CICS DB2 attachment messages are of the form DFHDB2xxx. Where possible, message numbers have been maintained from previous releases of the attachment. For example, message DFHDB2023 documents the same condition as old messages DSN2023 or DSNC023. However, the contents of the message have changed. For example, all messages contain the date, time, and applid. The destination for transient data messages output by the CICS DB2 attachment facility is controlled using the MSGQUEUE1, MSGQUEUE2 and MSGQUEUE3 parameters of the DB2CONN denition. The same message can be routed to three transient data queues. By default, messages are sent to a single queue called CDB2 which is dened as indirect to queue CSSL. All messages are documented in the CICS Messages and Codes, manual and are available using the CMAC CICS-supplied transaction.
Trace
In releases of CICS before CICS Transaction Server Release 2, the user could specify the trace points to be used by the CICS attachment facility using parameters in the RCT. Trace points can no longer be user specied. The CICS attachment facility uses AP domain trace points in the range 3100 to 33FF. The contents of all trace points issued by the CICS attachment facility is documented in the CICS Users Handbook. Standard tracing performed by the CICS attachment facility is controlled by the FC (File Control) and RI (RMI) trace ags. RMI trace controls trace output from the CICS DB2 task related user exit, DFHD2EX1, and GTF trace from the CICS DB2 subtask program DFHD2EX3. All other standard tracing from the attachment is controlled using File Control tracing. A large proportion of the possible trace issued from the CICS attachment facility is exception tracing which is output irrespective of RI or FC tracing being active, but is issued independently. The levels of FC and RI trace required can be set using the CICS-supplied transaction, CETR, or using SIT parameters STNTRFC= and STNTRRI=. Figure 33 on page 121 shows in two parts an example of the trace output from the RMI and the CICS DB2 task related user exit, DFHD2EX1, when level 1 and level 2 RI tracing is active. The trace shows one SQL statement being executed. CICS DB2 trace output is written to the CICS internal trace table and auxiliary trace and GTF trace destinations if active.
120
AP 2520 ERM ENTRY APPLICATION-CALL-TO-TRUE(DSNCSQL ) TASK-00042 KE_NUM-0042 TCB-QR 1-0000 01 2-0000 C4E2D5C3 E2D8D340 3-0000 B11E4C99 A62E1E02 /008BDE88 RET-91002F86 TIME-16:31:52.6697351879 INTERVAL-**.********** *. *DSNCSQL *..<rw... =000001= * * *
AP 2522 ERM EVENT PASSING-CONTROL-TO-QR-TRUE(DSNCSQL ) TASK-00042 KE_NUM-0042 TCB-QR /008BDE88 RET-91002F86 TIME-16:31:52.6697480629 INTERVAL-00.0000128750 =000002= 1-0000 01 *. * 2-0000 C4E2D5C3 E2D8D340 *DSNCSQL * 3-0000 B11E4C99 A62E1E02 *..<rw... * 4-0000 108C636C 0005F004 10B02204 00000000 008A7000 008A7000 10A0005C 10A0C230 *...%..0....................*..B.* 0020 10B021C0 10B02210 10B02206 10A000D0 10B02200 108C61C0 10B021C8 10B021B0 *...{...........}....../{...H....* 0040 10B021AC 10B021EC 108C630B 10B021FD 108C630C 10B021B4 10B021B2 00020000 *................................* 5-0000 D8D9 *QR * AP 3180 D2EX1 ENTRY - APPLICATION REQUEST - EXEC SQL FETCH TASK-00042 KE_NUM-0042 TCB-QR /008BDE88 RET-8009C81E TIME-16:31:52.6697601879 INTERVAL-00.0000121250 =000003= 1-0000 020004 *... * 2-0000 00DE6EC4 C6C8C4F2 D3D6E340 40404040 E7D7F0F5 1028F680 109BEBE8 1091D030 *..>DFHD2LOT XP05..6....Y.j}.* 0020 00000000 0005EFF0 00000000 109BEC78 10A0C340 00000000 00000000 FF732120 *.......0..........C ............* 0040 00000000 00000000 00000000 00000000 00000000 E3C5E2E3 D7F0F540 000C010C *....................TESTP05 ....* 0060 A000C000 00000000 00000000 00000000 C9E8D2F2 E9F2C7F1 B11E4C99 A62E1E02 *..{.............IYK2Z2G1..<rw...* 0080 D1E3C9D3 D3C9F140 40404040 40404040 00000000 00000000 C7C2C9C2 D4C9E8C1 *JTILLI1 ........GBIBMIYA* 00A0 C9E8C1F2 E3F5C6F8 1E4C99A6 2E1EC6D9 C2400003 000110A0 C2C80000 00000000 *IYA2T5F8.<rw..FRB ......BH......* 00C0 00000000 00000000 27050001 04000000 00000000 00000000 00000000 0000 *.............................. *
Figure 33. Sample trace output from the RMI and the CICS DB2 TRUE (Part 1 of 6)
TASK-00042 KE_NUM-0042 TCB-QR /008BDE88 RET-8009C81E TIME-16:31:52.6697704379 INTERVAL-00.0000102500 =000004= 1-0000 010C010C A000C000 00000000 *......{..... * 2-0000 E3C5E2E3 D7F0F540 *TESTP05 * 3-0000 00DE6EC4 C6C8C4F2 D3D6E340 40404040 E7D7F0F5 1028F680 109BEBE8 1091D030 *..>DFHD2LOT XP05..6....Y.j}.* 0020 00000000 0005EFF0 00000000 109BEC78 10A0C340 00000000 00000000 FF732120 *.......0..........C ............* 0040 00000000 00000000 00000000 00000000 00000000 E3C5E2E3 D7F0F540 010C010C *....................TESTP05 ....* 0060 A000C000 00000000 00000000 00000000 C9E8D2F2 E9F2C7F1 B11E4C99 A62E1E02 *..{.............IYK2Z2G1..<rw...* 0080 D1E3C9D3 D3C9F140 40404040 40404040 00000000 00000000 C7C2C9C2 D4C9E8C1 *JTILLI1 ........GBIBMIYA* 00A0 C9E8C1F2 E3F5C6F8 1E4C99A6 2E1EC6D9 C2400003 000110A0 C2C80000 00000000 *IYA2T5F8.<rw..FRB ......BH......* 00C0 00000000 00000000 27050001 04000000 00000000 00000000 00000000 0000 *.............................. * 4-0000 00C86EC4 C6C8C4F2 C5D5E340 40404040 E7D7F0F5 40404040 B11E493D 9E60A701 *.H>DFHD2ENT XP05 .....-x.* 0020 E3C5E2E3 D7F0F540 00000000 00000000 00000000 00000000 D1E3C9D3 D3C9F140 *TESTP05 ................JTILLI1 * 0040 00808080 40000000 60FD80EE 4DA95641 B11E493D 9E60A701 00000004 00000003 *.... ...-...(z.......-x.........* 0060 00000001 00000001 00000000 00000000 00000001 00000001 00000000 00000000 *................................* 0080 00000000 00000002 00000001 00000000 00000000 00000000 00000000 00000000 *................................* 00A0 00000000 00000000 00000000 1091D030 00000000 00000000 10B02210 00000000 *.............j}.................* 00C0 00000000 00000000 *........ * 5-0000 02906EC4 C6C8C4F2 C3E2C240 40404040 B11E4C9E CBBEA701 109575C0 109BEBE8 *..>DFHD2CSB ..<...x..n.{...Y* 0020 10B02210 008A2E88 808A2E00 00000000 109BEC60 00000000 00000000 00000000 *.......h...........-............* 0040 00000000 00000000 00000000 00000000 00000000 00000000 00000000 E3C5E2E3 *............................TEST* 0060 D7F0F540 D1E3C9D3 D3C9F140 40404040 40404040 C5D5E3D9 E7D7F0F5 F0F0F0F1 *P05 JTILLI1 ENTRXP050001* 0080 00000000 B11E4C9E DB7E9703 C7C2C9C2 D4C9E8C1 C9E8C1F2 E3F5C6F8 1E4C99A6 *......<..=p.GBIBMIYAIYA2T5F8.<rw* 00A0 2E1E0020 443C0001 00000000 00000000 00000000 00000000 40404040 40404040 *........................ * 00C0 40404040 40404040 FF732120 C6D9C240 00030001 10A0C2C8 00000000 00000000 * ....FRB ......BH........* 00E0 00000000 00002705 00010400 00000000 00000000 00000000 00000000 00000000 *................................* 0100 000087E0 00019C40 9015C344 80009120 1091D0FC 1091D174 10A0C2C8 1015CEA8 *..g\... ..C...j..j}..jJ...BH...y* 0120 109575D8 1091D0FC 10B02210 109575C0 109BEBE8 1091D030 9015BBE8 1015CBE8 *.n.Q.j}......n.{...Y.j}....Y...Y* 0140 9015C11E 9015BF84 00000000 C1D7C940 00000004 003400EF 1091D18C 4C6E0034 *..A....d....API .........jJ.<>..* 0160 00103220 4BC4C2F2 00000000 0028C4F0 F0F0F174 008A2E88 1015CEA2 B11E4C9E *.....DB2......D0001....h...s..<.* 0180 DBA2EE03 00040000 042C0004 10B02244 00000000 40404040 40404040 40404040 *.s.................. * 01A0 40404040 40404040 40404040 40404040 40404040 40404040 40404040 40404040 * * 01C0 40404040 40404040 00000004 1091D240 6E6EE399 81838540 E2A38199 A3406E6E * .....jK >>Trace Start >>* 01E0 00000001 C9C4C5D5 00000000 00000000 00000002 E2C9C7D5 00000000 00000000 *....IDEN............SIGN........* 0200 00000003 C3E3C8C4 00000000 00000000 00000004 C1D7C940 00000000 00000000 *....CTHD............API ........* 0220 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 *................................* 0240 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 *................................* 0260 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 *................................* 0280 4C4CE399 81838540 C5958440 40404C4C *<<Trace End << *
Figure 33. Sample trace output from the RMI and the CICS DB2 TRUE (Part 2 of 6)
121
TASK-00042 KE_NUM-0042 TCB-QR /008BDE88 RET-8009C81E TIME-16:31:52.6707882504 INTERVAL-00.0010178125 =000005= 1-0000 010C010C A000C000 00000000 00000000 00000000 *......{............. * 2-0000 E3C5E2E3 D7F0F540 *TESTP05 * 3-0000 00DE6EC4 C6C8C4F2 D3D6E340 40404040 E7D7F0F5 1028F680 109BEBE8 1091D030 *..>DFHD2LOT XP05..6....Y.j}.* 0020 00000000 0005EFF0 00000000 109BEC78 10A0C340 00000000 00000000 FF732120 *.......0..........C ............* 0040 00000000 00000000 00000000 00000000 00000000 E3C5E2E3 D7F0F540 010C010C *....................TESTP05 ....* 0060 A000C000 00000000 00000000 00000000 C9E8D2F2 E9F2C7F1 B11E4C99 A62E1E02 *..{.............IYK2Z2G1..<rw...* 0080 D1E3C9D3 D3C9F140 40404040 40404040 00000000 00000000 C7C2C9C2 D4C9E8C1 *JTILLI1 ........GBIBMIYA* 00A0 C9E8C1F2 E3F5C6F8 1E4C99A6 2E1EC6D9 C2400003 000110A0 C3400000 00000000 *IYA2T5F8.<rw..FRB ......C ......* 00C0 00000000 00000000 27050001 04000000 00000000 00000000 00000000 0000 *.............................. * 4-0000 00C86EC4 C6C8C4F2 C5D5E340 40404040 E7D7F0F5 40404040 B11E493D 9E60A701 *.H>DFHD2ENT XP05 .....-x.* 0020 E3C5E2E3 D7F0F540 00000000 00000000 00000000 00000000 D1E3C9D3 D3C9F140 *TESTP05 ................JTILLI1 * 0040 00808080 40000000 60FD80EE 4DA95641 B11E493D 9E60A701 00000004 00000003 *.... ...-...(z.......-x.........* 0060 00000001 00000001 00000000 00000000 00000001 00000001 00000000 00000000 *................................* 0080 00000000 00000002 00000001 00000000 00000000 00000000 00000000 00000000 *................................* 00A0 00000000 00000000 00000000 1091D030 00000000 00000000 10B02210 00000000 *.............j}.................* 00C0 00000000 00000000 *........ *
Figure 33. Sample trace output from the RMI and the CICS DB2 TRUE (Part 3 of 6)
5-0000 0020 0040 0060 0080 00A0 00C0 00E0 0100 0120 0140 0160 0180 01A0 01C0 01E0 0200 0220 0240 0260 0280
02906EC4 10B02210 00000000 D7F0F540 00000000 2E1E0020 40404040 00000000 000087E0 109575D8 9015C11E 00103220 3F72E502 40404040 40404040 00000001 00000003 00000005 00000000 00000000 4C4CE399
C6C8C4F2 008A2E88 00000000 D1E3C9D3 B11E4C9E 443C0001 40404040 00002705 00019C40 1091D0FC 9015BF84 4BC4C2F2 00040000 40404040 40404040 C9C4C5D5 C3E3C8C4 C1D7C940 00000000 00000000 81838540
C3E2C240 808A2E00 00000000 D3C9F140 DB7E9703 00000000 FF732120 00010400 9015C344 10B02210 00000000 00000000 042C0004 40404040 00000005 00000000 00000000 00000000 00000000 00000000 C5958440
40404040 00000000 00000000 40404040 C7C2C9C2 00000000 C6D9C240 00000000 80009120 109575C0 C1D7C940 0028C4F0 10B02244 40404040 1091D250 00000000 00000000 00000000 00000000 00000000 40404C4C
B11E4C9E 109BEC60 00000000 40404040 D4C9E8C1 00000000 00030001 00000000 1091D0FC 109BEBE8 00000005 F0F0F174 00000000 40404040 6E6EE399 00000002 00000004 00000000 00000000 00000000
CBBEA701 00000000 00000000 C5D5E3D9 C9E8C1F2 00000000 10A0C340 00000000 1091D174 1091D030 003400EF 008A2E88 40404040 40404040 81838540 E2C9C7D5 C1D7C940 00000000 00000000 00000000
109575C0 00000000 00000000 E7D7F0F5 E3F5C6F8 40404040 00000000 00000000 10A0C340 9015BBE8 1091D18C 1015CEA2 40404040 40404040 E2A38199 00000000 00000000 00000000 00000000 00000000
109BEBE8 00000000 E3C5E2E3 F0F0F0F1 1E4C99A6 40404040 00000000 00000000 1015CEA8 1015CBE8 4C6E0034 B11E4CD1 40404040 40404040 A3406E6E 00000000 00000000 00000000 00000000 00000000
*..>DFHD2CSB ..<...x..n.{...Y* *.......h...........-............* *............................TEST* *P05 JTILLI1 ENTRXP050001* *......<..=p.GBIBMIYAIYA2T5F8.<rw* *........................ * * ....FRB ......C ........* *................................* *..g\... ..C...j..j}..jJ...C ...y* *.n.Q.j}......n.{...Y.j}....Y...Y* *..A....d....API .........jJ.<>..* *.....DB2......D0001....h...s..<J* *..V................. * * * * .....jK&>>Trace Start >>* *....IDEN............SIGN........* *....CTHD............API ........* *....API ........................* *................................* *................................* *<<Trace End << *
Figure 33. Sample trace output from the RMI and the CICS DB2 TRUE (Part 4 of 6)
122
AP 3181 D2EX1 EXIT - APPLICATION REQUEST - EXEC SQL FETCH TASK-00042 KE_NUM-0042 TCB-QR /008BDE88 RET-8009C81E TIME-16:31:52.6707984379 INTERVAL-00.0000101875 =000006= 1-0000 020004 *... * 2-0000 00DE6EC4 C6C8C4F2 D3D6E340 40404040 E7D7F0F5 1028F680 109BEBE8 1091D030 *..>DFHD2LOT XP05..6....Y.j}.* 0020 00000000 0005EFF0 00000000 109BEC78 10A0C340 00000000 00000000 FF732120 *.......0..........C ............* 0040 00000000 00000000 00000000 00000000 00000000 E3C5E2E3 D7F0F540 010C010C *....................TESTP05 ....* 0060 A000C000 00000000 00000000 00000000 C9E8D2F2 E9F2C7F1 B11E4C99 A62E1E02 *..{.............IYK2Z2G1..<rw...* 0080 D1E3C9D3 D3C9F140 40404040 40404040 00000000 00000000 C7C2C9C2 D4C9E8C1 *JTILLI1 ........GBIBMIYA* 00A0 C9E8C1F2 E3F5C6F8 1E4C99A6 2E1EC6D9 C2400003 000110A0 C3400000 00000000 *IYA2T5F8.<rw..FRB ......C ......* 00C0 00000000 00000000 27050001 04000000 00000000 00000000 00000000 0000 *.............................. * 3-0000 00 *. * 4-0000 00C86EC4 C6C8C4F2 C5D5E340 40404040 E7D7F0F5 40404040 B11E493D 9E60A701 *.H>DFHD2ENT XP05 .....-x.* 0020 E3C5E2E3 D7F0F540 00000000 00000000 00000000 00000000 D1E3C9D3 D3C9F140 *TESTP05 ................JTILLI1 * 0040 00808080 40000000 60FD80EE 4DA95641 B11E493D 9E60A701 00000004 00000003 *.... ...-...(z.......-x.........* 0060 00000001 00000001 00000000 00000000 00000001 00000001 00000000 00000000 *................................* 0080 00000000 00000002 00000001 00000000 00000000 00000000 00000000 00000000 *................................* 00A0 00000000 00000000 00000000 1091D030 00000000 00000000 10B02210 00000000 *.............j}.................* 00C0 00000000 00000000 *........ * 5-0000 02906EC4 C6C8C4F2 C3E2C240 40404040 B11E4C9E CBBEA701 109575C0 109BEBE8 *..>DFHD2CSB ..<...x..n.{...Y* 0020 10B02210 008A2E88 808A2E00 00000000 109BEC60 00000000 00000000 00000000 *.......h...........-............* 0040 00000000 00000000 00000000 00000000 00000000 00000000 00000000 E3C5E2E3 *............................TEST* 0060 D7F0F540 D1E3C9D3 D3C9F140 40404040 40404040 C5D5E3D9 E7D7F0F5 F0F0F0F1 *P05 JTILLI1 ENTRXP050001* 0080 00000000 B11E4C9E DB7E9703 C7C2C9C2 D4C9E8C1 C9E8C1F2 E3F5C6F8 1E4C99A6 *......<..=p.GBIBMIYAIYA2T5F8.<rw* 00A0 2E1E0020 443C0001 00000000 00000000 00000000 00000000 40404040 40404040 *........................ * 00C0 40404040 40404040 FF732120 C6D9C240 00030001 10A0C340 00000000 00000000 * ....FRB ......C ........* 00E0 00000000 00002705 00010400 00000000 00000000 00000000 00000000 00000000 *................................* 0100 000087E0 00019C40 9015C344 80009120 1091D0FC 1091D174 10A0C340 1015CEA8 *..g\... ..C...j..j}..jJ...C ...y* 0120 109575D8 1091D0FC 10B02210 109575C0 109BEBE8 1091D030 9015BBE8 1015CBE8 *.n.Q.j}......n.{...Y.j}....Y...Y* 0140 9015C11E 9015BF84 00000000 C1D7C940 00000005 003400EF 1091D18C 4C6E0034 *..A....d....API .........jJ.<>..* 0160 00103220 4BC4C2F2 00000000 0028C4F0 F0F0F174 008A2E88 1015CEA2 B11E4CD1 *.....DB2......D0001....h...s..<J* 0180 3F72E502 00040000 042C0004 10B02244 00000000 40404040 40404040 40404040 *..V................. * 01A0 40404040 40404040 40404040 40404040 40404040 40404040 40404040 40404040 * * 01C0 40404040 40404040 00000005 1091D250 6E6EE399 81838540 E2A38199 A3406E6E * .....jK&>>Trace Start >>* 01E0 00000001 C9C4C5D5 00000000 00000000 00000002 E2C9C7D5 00000000 00000000 *....IDEN............SIGN........* 0200 00000003 C3E3C8C4 00000000 00000000 00000004 C1D7C940 00000000 00000000 *....CTHD............API ........* 0220 00000005 C1D7C940 00000000 00000000 00000000 00000000 00000000 00000000 *....API ........................* 0240 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 *................................* 0260 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 *................................* 0280 4C4CE399 81838540 C5958440 40404C4C *<<Trace End<< *
Figure 33. Sample trace output from the RMI and the CICS DB2 TRUE (Part 5 of 6)
AP 2523 ERM EVENT REGAINING-CONTROL-FROM-QR-TRUE(DSNCSQL) TASK-00042 KE_NUM-0042 TCB-QR /008BDE88 RET-91002F86 TIME-16:31:52.6710398129 INTERVAL-00.0002413750 =000007= 1-0000 01 *. * 2-0000 C4E2D5C3 E2D8D340 *DSNCSQL * 3-0000 B11E4C99 A62E1E02 *..<rw... * 4-0000 108C636C 0005F004 10B02204 00000000 008A7000 008A7000 10A0005C 10A0C230 *...%..0....................*..B.* 0020 10B021C0 10B02210 10B02206 10A000D0 10B02200 108C6960 10B021C8 10B021B0 *...{...........}.......-...H....* 0040 10B021AC 10B021EC 108C630B 10B021FD 108C630C 10B021B4 10B021B2 00020000 *................................* 5-0000 D8D9 *QR * AP 2521 ERM EXIT APPLICATION-CALL-TO-TRUE(DSNCSQL ) TASK-00042 KE_NUM-0042 TCB-QR 1-0000 01 2-0000 C4E2D5C3 E2D8D340 3-0000 B11E4C99 A62E1E02 /008BDE88 RET-91002F86 TIME-16:31:52.6710585004 INTERVAL-00.0000186875 *. *DSNCSQL *..<rw... =000008= * * *
Figure 33. Sample trace output from the RMI and the CICS DB2 TRUE (Part 6 of 6)
CSUB trace
The CSUB is a control block used by the CICS DB2 subtask that issues the requests to DB2. As the subtask is a TCB owned by the CICS DB2 attachment facility and not known to the CICS dispatcher or kernel, CICS tracing cannot be performed in the subtask program, DFHD2EX3. DFHD2EX3 does issue one GTF trace to record the point in time it posts back the CICS task on completion of the DB2 request. In addition to this, DFHD2EX3 maintains its own small trace table at the end of the CSUB control block to record the requests it makes to DB2, and the responses to those requests.
123
The CSUB trace table is 160 bytes in length allowing ten entries of 16 bytes to be written. The trace table wraps when all ten entries have been used. The format of each trace entry is shown in Table 12.
Table 12. Example of CSUB trace table entry
Bytes 0-3 Bytes 4-7 Trace request number Trace request Fullword number of the trace entry written. The number is used to nd the latest entry written. Four-character representation of the DB2 request issued. Possible values are: ABRT - Abort request API - SQL or IFI request COMM - Commit request THD - Create thread request ERRH - Error handler request IDEN - Identify request PREP - Prepare request PSGN - Partial signon request SIGN - Full signon request SYNC - Single phase request TERM - Terminate thread request *REC - Subtask ESTAI recovery routine entered
| | | |
Bytes 8-9 Bytes 10-11 Bytes 12-15 reserved frb return code frb reason code
The CSUB control block is formatted in a CICS system dump. It is also output if RI (RMI) level 2 trace is active in traces output from the CICS task related user exit DFHD2EX1, plus all exception traces from DFHD2EX1. In the previous trace example, DATA5 from trace point 3181 is the CSUB and is shown in Figure 34. Looking at the character representation on the right hand side, the trace table is delimited by >>Trace Start >> and <<Trace End <<. In this example you can see that an identify, sign-on, create thread, followed by two API requests have been issued to DB2, and all requests were successful and the FRB return code and reason codes for each request are zeros.
5-0000 0020 0040 0060 0080 00A0 00C0 00E0 0100 0120 0140 0160 0180 01A0 01C0 01E0 0200 0220 0240 0260 0280 02906EC4 0F57E200 00000000 D7F0F540 00000000 9FD20020 40404040 00000000 00008428 0F51C678 9C10914E 00103220 037C0004 40404040 00000005 00000001 00000003 00000005 00000000 00000000 4C4CE399 C6C8C4F2 008A01F0 00000000 C3C9C3E2 AEFD8812 443C0001 40404040 00002705 00008398 0F5870FC 9C108FBC 3BC4C2F2 0F57E234 40404040 0F587250 C9C4C5D5 C3E3C8C4 C1D7C940 00000000 00000000 81838540 C3E2C240 808A0168 00000000 E4E2C5D9 7598C200 00000000 FF6F3740 00010400 9C109374 0F57E200 00000000 00000000 00000000 40404040 00000000 00000000 00000000 00000000 00000000 00000000 C5958440 40404040 00000000 00000000 40404040 C7C2C9C2 00000000 C6D9C240 00000000 80018770 0F51C660 C1D7C940 008A01F0 40404040 40404040 00000000 00000000 00000000 00000000 00000000 00000000 40404C4C AEFD8812 0F572940 00000000 40404040 D4C9E8C1 00000000 00030001 00000000 0F5870FC 0F5728C8 00000005 1C109EAE 40404040 40404040 6E6EE399 00000002 00000004 00000000 00000000 00000000 3264A600 00000000 00000000 C5D5E3D9 C9E8C1F2 00000000 00202368 00000000 0F587174 0F587030 002C00EF AEFD88A0 40404040 40404040 81838540 E2C9C7D5 C1D7C940 00000000 00000000 00000000 0F51C660 00000000 00000000 E7D7F0F5 E3F5C6F8 40404040 00000000 00000000 00202368 9C108C20 0F58718C 1A048401 40404040 40404040 E2A38199 00000000 00000000 00000000 00000000 00000000 0F5728C8 00000000 E3C5E2E3 F0F0F0F1 FD880CF3 40404040 00000000 00000000 1C109EB4 1C109C20 4C6E002C 00040000 40404040 40404040 A3406E6E 00000000 00000000 00000000 00000000 00000000 *..>DFHD2CSB ..h...w...F-...H* *..S....0........... ............* *............................TEST* *P05 CICSUSER ENTRXP050001* *......h..qB.GBIBMIYAIYA2T5F8.h.3* *.K...................... * * .?. FRB ................* *................................* *..d...cq..l...g.................* *..F.......S...F-...H............* *..j+........API ............<>..* *.....DB2.......0......h...d.....* *[email protected]..... * * * *.......&;.......>>Trace Start >>* *....IDEN............SIGN........* *....CTHD............API ........* *....API ........................* *................................* *................................* *<<Trace End << *
124
Dump
Control blocks from the CICS DB2 attachment facility are formatted out in a CICS system dump under the control of the DB2 keyword of the CICS IPCS verbexit. The DB2 keyword may specify the following values: v v v v 0 1 2 3 no DB2 output summary information only control blocks only summary and control blocks
In a CICS transaction dump, no summary or control blocks appear but the trace table contains the CICS DB2 trace entries. A sample showing CICS DB2 summary information from a CICS system dump is shown in Figure 35.
===DB2: CICS/DB2 - SUMMARY ==DB2: GLOBAL STATE SUMMARY Db2conn name: RCTJT Connection status: Connected In standby mode: No DB2 id: DC2D DB2 release: 0410 Service task started: Yes Master subtask started: Yes Tcb limit: 112 Currently active tcbs: 2 Message Queue1: CDB2 Message Queue2: Message Queue3: Statistics Queue: CDB2 Standbymode: Reconnect Connecterror: Sqlcode ==DB2: TRANSACTION SUMMARY Tran Task TcaAddr TieAddr LotAddr Rctename RcteAddr CsubAddr Correlation Uowid Subtask Subtask id num id running in DB2 -------------------------------------------------------------------------------------------------------------XC06 00049 00052080 0F5862E0 0F586358 XC06 0F572800 0F5872C0 ENTRXC060002 AEFD9A4879CF4005 No No XP05 00046 00050080 0F586188 0F586200 XP05 0F5728C8 0F587030 ENTRXP050001 AEFD9A408DBE8803 No No
125
v Shows the results before and after SQL calls are processed v Displays the following: The type of SQL statement. Any input and output variables. The contents of the SQLCA. Primary and secondary authorization IDs. (This helps diagnose SQLCODE -922.) An EDF panel displays a maximum of 55 variables, which is about ten screens. Each EDF SQL session requires 12KB of CICS temporary storage, which is freed on exit from EDF. EDF screens for SQL statements are shown in Figure 36, and Figure 37 on page 127.
TRANSACTION: XC05 PROGRAM: TESTC05 TASK:0000097 APPLID: CICS41 DISPLAY:00 STATUS: ABOUT TO EXECUTE COMMAND EXEC SQL OPEN DBRM=TESTC05, STMT=00221, SECT=00001
LINE: UNKNOWN
EIBFN=X'0E0E'
126
TRANSACTION: XC05 PROGRAM: TESTC05 TASK:0000097 APPLID: CICS41 DISPLAY:00 STATUS: COMMAND EXECUTION COMPLETE CALL TO RESOURCE MANAGER DSNCSQL EXEC SQL OPEN P.AUTH=SYSADM , S.AUTH= PLAN=TESTC05, DBRM=TESTC05, STMT=00221, SECT=00001 SQL COMMUNICATION AREA: SQLCABC = 136 AT X'03907C00' SQLCODE = -923 AT X'03907C04' SQLERRML = 070 AT X'03907C08' SQLERRMC = ' ACCESS,00000000,00000000, '... AT X'03907C0A' SQLERRP = 'DSNAET03' AT X'03907C50' SQLERRD(1-6) = 000, 000, 00000, 0000000000, 00000, 000 AT X'03907C58' SQLWARN(0-A) = '_ _ _ _ _ _ _ _ _ _ _' AT X'03907C70' SQLSTATE = 57015 AT X'03907C7B' OFFSET: X'001692' LINE: UNKNOWN EIBFN=X'0E0E'
ENTER: CONTINUE PF1 : UNDEFINED PF4 : SUPPRESS DISPLAYS PF7 : SCROLL BACK PF10: PREVIOUS DISPLAY
END EDF SESSION USER DISPLAY STOP CONDITIONS ABEND USER TASK
127
128
Monitoring
The objective of monitoring the CICS attachment facility is to provide a basis for accounting and tuning. To achieve this objective, you need to obtain the following data: v The number of transactions accessing DB2 resources. v The average number of SQL statements issued by a transaction. v The average processor usage for a transaction. v The average response time for a transaction, v The cost associated with particular transactions. v Buffer pool activity associated with a transaction. v Locking activity associated with a transaction. This includes whether table space locks are used instead of page locks, and whether lock escalation occurs, for example due to repeatable read. v The level of thread usage for DB2ENTRYs and the pool. v The level of thread reuse for protected threads in DB2ENTRYs. You should also monitor your test environment to: v Check that new programs function correctly (that is, use the correct call sequence) against test databases. v Detect any performance problems due to excessive I/O operations or inefficient SQL statements. v Detect bad design practices, such as holding DB2 resources across screen conversations. v Set up optimum locking protocols to balance application isolation needs with those of existing applications. Include monitoring in the acceptance procedures for new applications, so that any problems not detected during the test period can be quickly identied and corrected.
Monitoring tools
You can use some, or all, of the following tools to monitor the CICS attachment facility and CICS transactions that access DB2 resources. v Monitor the CICS attachment facility using:
Copyright IBM Corp. 1998, 1999
129
CICS attachment facility commands DB2 commands v Monitor CICS transactions using: CICS auxiliary trace CICS DB2 statistics v Monitor DB2 using: DB2 statistics records DB2 accounting records DB2 performance records v Monitor the CICS system with the CICS monitoring facilities (CMF). v Monitor the MVS system using the Resource Measurement Facility (RMF). The following sections provide a description of these facilities and the data they provide.
For example, the DSNC -DIS THREAD command can shows CICS DB2 threads. The command is routed to DB2 for processing. DB2 checks that the authorization ID passed from CICS is authorized to issue the command entered. Responses are routed back to the originating CICS user. The command recognition character (CRC) of a hyphen, (-), must be used to distinguish DB2 commands from CICS attachment facility commands. For DB2 commands issued from CICS, the CRC is always -, regardless of the subsystem recognition character. Both CICS and DB2 authorization are required to issue DB2 commands from a CICS terminal: v CICS authorization is required to use the DSNC transaction, and v DB2 authorization is required to issue DB2 commands. For more information see CICS DB2 transaction DSNC on page 21.
130
131
DB2 PERFORMANCE MONITOR (V1 R0) DB2 ID=DSN3 STATISTICS SUMMARY CLASS ACTIVE TIME 12.43.07 ELAPSED TIME 10.38.07 THREADS 24 THREADS/MINUTE 2.1 S Q L MANIPULATIVE # OCCUR. /MINUTE /THREAD ---------------------------------------------------SELECT 98 8.9 4.0 INSERT 4 0.3 0.1 UPDATE 15 1.3 0.6 DELETE 4 0.3 0.1 PREPARE 0 0.0 0.0 SUB-TOTAL 121 11.0 5.0 DESCRIBE 0 0.0 0.0 OPEN CURSOR 17 1.5 0.7 CLOSE CURSOR 17 1.5 0.7 FETCH 96 8.7 4.0 SUB-TOTAL 130 11.8 5.4 TOTAL 251 22.8 10.4 S Q L CONTROL # OCCUR. /MINUTE /THREAD ---------------------------------------------------LOCK TABLE 0 0.0 0.0 GRANT 0 0.0 0.0 REVOKE 0 0.0 0.0 INCREMENTAL BIND 0 0.0 0.0 COMMENT ON 0 0.0 0.0 LABEL ON 0 0.0 0.0 TOTAL 0 0.0 0.0 STATISTICS SUMMARY BUFFER POOL 00 # OCCUR. /MINUTE /THREAD -------------------------------------------------BUFFER POOL SIZE (KBYTES) 800 CURRENT ACTIVE BUFFERS 11 MAXIMUM NUMBER OF BUFFERS 200 MINIMUM NUMBER OF BUFFERS 200 BUFFER POOL EXPANSIONS 0 0.0 0.0 EXPANDED TO LIMIT 0 0.0 0.0 STORAGE UNAVAILABLE 0 0.0 0.0 DATASETS OPENED 20 1.8 0.8 READ OPERATIONS -----------------------------------GETPAGE REQUESTS (GET) 1738 158.0 72.4 READ I/O OPERATIONS (RIO) 72 6.5 3.0 READS WITH PAGING 0 0.0 0.0 PREFETCH REQUESTED 72 6.5 3.0 PAGE READ DUE TO SEQ PREFETCH 23 2.0 0.9 PREFETCH DISABLED-NO BUFFER 0 0.0 0.0 PREFETCH DISABLED-NO READ ENGINE 0 0.0 0.0 WRITE OPERATIONS -----------------------------------SYSTEM PAGE UPDATES (SWS) 361 32.8 15.0 SYSTEM PAGES WRITTEN (PWS) 0 0.0 0.0 WRITE I/O OPERATIONS (WIO) 0 0.0 0.0 WRITES WITH PAGING 0 0.0 0.0 WRITE ENGINE NOT AVAIL FOR I/O 0 0.0 0.0 DEFERRED WRITE THRESHOLD REACHED 0 0.0 0.0 DM CRITICAL THRESHOLD REACHED 0 0.0 0.0 IMMEDIATE WRITES 0 0.0 0.0
/COMMIT --------4.4 0.1 0.6 0.1 0.0 5.5 0.0 0.7 0.7 4.3 5.9 11.4 /COMMIT -------0.0 0.0 0.0 0.0 0.0 0.0 0.0 /COMMIT --------
0.0 0.0 0.0 0.9 79.0 3.2 0.0 3.2 1.0 0.0 0.0 16.4 0.0 0.0 0.0 0.0 0.0 0.0 0.0
132
EDM POOL # OCCUR. -----------------------------------PAGES IN EDM POOL 412 PAGES USED FOR CT 0 FREE PG IN FREE CHAIN 382 PAGES USED FOR DBD 9 PAGES USED FOR SKCT 21 FAILS DUE TO POOL FULL 0 REQ FOR CT SECTIONS 160 LOAD CT SECT FROM DASD 42 REQUESTS FOR DBD 95 LOADING DBD FROM DASD 2 SERVICE CONTROLLER # OCCUR. -----------------------------------MAXIMUM DB2 DATASETS EXPECTED 0 DATASETS OPEN - CURRENT 20 DATASETS OPEN - MAXIMUM 15 ALLOCATION ATTEMPTS 22 ALLOCATION SUCCESSFUL 22 AUTHORIZATION ATTEMPTS 32 AUTHORIZATION SUCCESSFUL 32 PLANS BOUND 0 BIND ADD SUB-COMMANDS 0 BIND REPLACE SUB-COMMANDS 0 TEST BINDS NO PLAN-ID 0 AUTOMATIC BIND ATTEMPTS 0 AUTOMATIC BINDS SUCCESSFUL 0 AUTOMATIC BIND INVAL RESOURCE IDS 0 REBIND SUB-COMMANDS 0 ATTEMPTS TO REBIND A PLAN 0 PLANS REBOUND 0 FREE SUB-COMMANDS 0 ATTEMPTS TO FREE A PLAN 0 PLANS FREED 0
/MINUTE --------
/THREAD --------
/COMMIT --------
2.0 2.0 2.9 2.9 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.9 0.9 1.3 1.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
1.0 1.0 1.4 1.4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
STATISTICS SUMMARY 12.43.07 10.38.07 THREADS 24 THREADS/MINUTE 2.1 STATS TRACE TRACE AET SYSTEM EVENTS # OCCUR. # OCCUR. SS.TH ------------------------------------COMMANDS 10 4 0.02 CHECKPOINTS 0 0 EDM FULL 0 0 SHORT ON STORAGE 0 0 ABENDS EOM 0 0 ABENDS EOT 0 0 TCB TIME SRB TIME TOTAL TIME /THREAD CPU TIMES SS.TH SS.TH SS.TH SS.TH ------------------------------------------------SYSTEM SERVICES ADDRESS SPACE 0.11 0.19 0.30 0.01 DATABASE SERVICES ADDRESS SPACE 0.28 0.22 0.50 0.02 IRLM 0.00 0.01 0.01 0.00 TOTAL 0.39 0.42 0.81 0.03 CLASS ACTIVE TIME ELAPSED TIME
The DB2 for OS/390: Administration Guide shows and analyzes, from a DB2 viewpoint, the statistical data reported for the database and system services address spaces. Included here is a reduced version of the statistics summary report. You can use this report to monitor the average CICS transaction. Figure 38 on page 132 shows a sample of the report provided by DB2PM. Refer to the DB2 for OS/390: Administration Guide for additional information on these reports.
Chapter 12. Monitoring, tuning, and handling deadlocks
133
Figure 38 on page 132 provides the following information: v SQL Manipulative can be used to monitor the average transaction. In the example, the number of transactions about equals the number of threads, because the number of occurrences per thread and per commit is almost the same. It also means that there is no thread reuse. Otherwise, this number must be derived from the CICS statistics. In our case, the average transaction uses 4.4 SELECTs, 0.1 INSERTs, 0.6 UPDATEs, 0.1 DELETEs, 0.7 OPENs/CLOSEs of a cursor, and 4.3 FETCHs v SQL Control can be used to check whether the application is using LOCK statements. v Buffer Pool provides valuable information on: Whether buffer expansions are occurring (Buffer Pool Expansions) The number of data sets opened (Datasets Opened) The number of pages retrieved (GETPAGE Requests) Number of I/Os (Read Operations and Write I/O Operations)
For performance, thread reuse is recommended in CICS environments, to avoid the overhead of creating a thread for each CICS transaction. Under Locking, monitor the number of timeouts and deadlocks. For more information about deadlocks, see Handling deadlocks on page 147. This statistical data is not checkpointed and is not retained by DB2 across restarts.
134
Summarizing by authorization ID makes it easier to correlate the output from the accounting facility with that of the CICS monitoring facilities. This correlation is required to give an overall usage of resources by CICS transactions in the CICS and DB2 address spaces. Figure 39 on page 136 is a listing of the accounting output produced for a sample CICS transaction. As shown in the gure, the report provides: v A header line that identies the subsystem. v Below the class active time, evidence that the report has been produced by authorization ID. v Application time (Class 1). This section contains information on the elapsed time covered by this report, and the processor (CPU) time used during this elapsed time. The processor time is split into TCB and SRB times. See Chapter 9. Accounting on page 75 to interpret these gures. v In the Highlights section, the rst line (#OCCUR.) shows the number of accounting records that were written. v Buffer manager summary. This section contains information on the number of page references in the four buffer pools. This includes the number of get page requests, buffer pool expansions, and system page updates. Note that each page reference recorded may cause an I/O. Synchronous read I/Os are recorded. Write I/Os are not recorded. v Locking summary. This section contains information related to the use of locks. The number of lock suspensions, deadlocks, and timeouts are recorded. v Manipulative SQL activity. This section contains information on the number of times each type of SQL statement was executed. In the example, fteen updates were done. These counts provide a method for checking that application programs conform to their specications and installation standards. v Control SQL activity. This section contains information about control SQL activity. There is usually no control SQL activity in a CICS DB2 system. v Denitional SQL activity. This section contains information about denitional SQL activity. There is usually no denitional SQL activity in a CICS DB2 system.
135
DB2 ID=DSN3
ACTUAL FROM TO
ACCOUNTING DETAIL REQUESTED FROM NOT SPECIFIED TO NOT SPECIFIED 23:41:00.00 23:54:00.00
CLASS ACTIVE TIME 13:00.00 BY AUTHID AUTHID - R7322CI APPLICATION TIME AVERAGE (CLASS 1) -------------------------------ELAPSED TIME / INVOC 1.05.16 CPU TIME (SSSSSS.TH) 0.09 TCB TIME 0.07 SRB TIME 0.02
DB2 TIMES TOTALS (CLASS 2) HIGHLIGHTS: OR MEANS -------------------------------- -------1.00.93 #OCCUR. 23 0.08 RATE / HR. 106.2 0.07 NORMAL TERMINATIONS 23 0.01 ABNORMAL TERMINATIONS 0 SQL QUERY/UPDATE CALLS 5.2 LOCK SUSPENSIONS 0.0
----------- AVERAGES PER # OCCUR. ---------- GRAND BUFFER MANAGER SUMMARY POOL 0 POOL 1 POOL 2 POOL 32 TOTAL TOTAL ------------------------- -------- -------- -------- -------- -------- -------GET PAGE REQUEST 68.6 0.0 0.0 0.0 68.6 1580 BUFFERPOOL EXPANSIONS 0.0 0.0 0.0 0.0 0.0 0 SYSTEM PAGE UPDATES 15.6 0.0 0.0 0.0 15.6 359 SYNCHRONOUS READ I/O 2.4 0.0 0.0 0.0 2.4 56 SEQ. PREFETCH REQUEST 3.1 0.0 0.0 0.0 3.1 72 LOCKING SUMMARY TOTALS ------------------------- -------SUSPENSIONS 0 DEADLOCKS 0 TIMEOUTS 0 LOCK ESCALATION (SHARED) 0 LOCK ESCALATION (EXCLUS) 0 MAXIMUM PAGE LOCKS HELD 87 ACCOUNTING INVOCATIONS ------------------------NORMAL NEW USER 0 DEALLOCATION 23 APPL.PROGRAM END 0 ABNORMAL APPL.PROGRAM ABEND END OF MEMORY RESOLVE IN DOUBT CANCEL FORCE WORK UNIT IN DOUBT APPL.PROGRAM ABEND END OF TASK END OF MEMORY RESOLVE IN DOUBT CANCEL FORCE 0 0 0 0 0 0 0 0 0 SUSPENSIONS (CLASS 3) ---------------------I/O SUSPENSIONS LOCK/LATCH SUSPENSIONS AVERAGE TIME -----------0.10 0.00
136
MANIPULATIVE SQL ACTIVITY TOTAL ------------------------- -------QUERY/UPDATE ACTIVITY SELECT 98 INSERT 4 UPDATE 15 DELETE 4 PREPARE 0 OTHER ACTIVITY DESCRIBE OPEN CLOSE FETCH COMMIT ABORT CONTROL SQL ACTIVITY ------------------------LOCK TABLE GRANT REVOKE INCR. BINDS COMMENT LABEL DEFINITIONAL SQL ACTIVITY ------------------------TABLE INDEX TABLESPACE STORAGE GROUP DATABASE SYNONYM VIEW END OF REPORT. 0 17 17 96 22 0 TOTAL -----0 0 0 0 0 0
TOTAL/ #OCCUR -------4.2 0.1 0.6 0.1 0.0 0.0 0.7 0.7 4.1 0.9 0.0
DB2PM Version 3
DB2PM version 3 along with DB2 3.1 have package accounting support. Two DB2PM identiers, MAINPACK and PACKAGE, were introduced for this purpose: v MAINPACK can be used to distinguish plans according to the packages they contain. The representative package is either the rst or last package or DBRM in a plan. This identier is useful when the name of a plan does not provide satisfactory identication, for example, reporting database authority tables initiated by remote requesters that all have the same PLANAPP1 plan name at the server site. v PACKAGE is used to identify a package regardless of the plan to which it belongs. When usage is reported on a per package basis, it is not possible to attribute activity to specic plans or other DB2PM identiers. Highlights of the additional new functions are:
137
v Accounting reports and traces have a repeating group of elds for each package or DBRM that was referenced during the duration of the accounting record (see Figure 41 on page 140). v INCLUDE and EXCLUDE are expanded to support specic processing for packages or DBRMs. v ORDER is expanded to support the ordering of accounting reports by PACKAGE (see Figure 42 on page 141) and MAINPACK (see Figure 40 on page 139). v The SQL activity trace and report can be summarized by program, and the program can be either a DBRM or a package. v Record trace provides all package-related data captured by the DB2 instrumentation facility. v Exception processing (batch and online) supports the new package elds and allows qualication of exceptions by package name. v Online monitor thread displays contain the new package elds for the current package. Figure 41 on page 140 shows a sample of an accounting short trace where two packages are involved. The plan name is PLANAPP1. Figure 42 on page 141 shows the accounting short report ordered by package. The report indicates the use of resources by package, regardless of the plan under which a particular package is executed. Figure 43 on page 141 shows the accounting short report ordered by plan name. Because the plan name is PLANAPP1, data for different packages is summarized under this plan. Figure 40 on page 139 shows the accounting report ordered by main package within a plan name. This report facilitates distinguishing between accounting records that have the same plan name but executed different packages. Thus, the break up of the two packages SSQL and SSQLFFO executed under the same plan PLANAPP1 is presented. This would not be possible if the report were ordered by plan name as illustrated in Figure 43 on page 141.
138
1 0 ============================================================== 0 ACCOUNTING 0 REPORT 0 LAYOUT(SHORT) 0 ORDER(PLANNAME-MAINPACK) 1 LOCATION: CICSLOC DB2 PERFORMANCE MONITOR (V3) 1-1 SUBSYSTEM: DSN2 ACCOUNTING REPORT - SHORT INTERVAL FROM: 09/08/93 04:11:42.31 TO: 09/08/93 04:13:12.42 ORDER: PLANNAME-MAINPACK
PAGE: DB2 VERSION: V3 REQUESTED FROM: NOT SPECIFIED TO: NOT SPECIFIED
PLANNAME #OCCURS #ROLLBK SELECTS INSERTS UPDATES DELETES CLASS1 EL.TIME CLASS2 EL.TIME GETPAGES SYN.READ LOCKSUS MAINPACK #DISTRS #COMMIT FETCHES OPENS CLOSES PREPARE CLASS1 TCBTIME CLASS2 TCBTIME BUF.UPDT TOT.PREF #LOCKOUT -------------------------- ------- ------- ------- ------- ------- ------- -------------- -------------- -------- -------- -------PLANAPP1 SSQL 3 3 0 6 0.00 43.33 21.33 0.67 21.33 0.67 21.33 0.00 7.450440 0.146609 0.359026 0.093132 170.00 152.67 8.00 0.67 1.00 0
------------------------------------------------------------------------------------------------------|PROGRAM NAME TYPE #OCCURS SQLSTMT CL7 ELAP.TIME CL7 TCB TIME CL8 SUSP.TIME CL8 SUSP| |SSQL PACKAGE 3 109.33 0.358872 0.092988 0.262800 8.67| ------------------------------------------------------------------------------------------------------PLANAPP1 SSQLFFO 1 1 0 2 0.00 65.00 0.00 1.00 0.00 1.00 0.00 0.00 5.974271 0.027459 0.120076 0.024048 12.00 0.00 10.00 1.00 1.00 0
------------------------------------------------------------------------------------------------------|PROGRAM NAME TYPE #OCCURS SQLSTMT CL7 ELAP.TIME CL7 TCB TIME CL8 SUSP.TIME CL8 SUSP| |SSQLFFO PACKAGE 1 68.00 0.119931 0.023910 0.090771 8.00| ------------------------------------------------------------------------------------------------------*** TOTAL PLANAPP1 ***
4 4
0 8
0.00 48.75
16.00 0.75
16.00 0.75
16.00 0.00
7.081398 0.116822
0.299289 0.075861
130.50 114.50
8.50 0.75
1.00 0
------------------------------------------------------------------------------------------------------|PROGRAM NAME TYPE #OCCURS SQLSTMT CL7 ELAP.TIME CL7 TCB TIME CL8 SUSP.TIME CL8 SUSP| |ALL PROGRAMS PACKAGE 4 99.00 0.299137 0.075718 0.219793 8.50| ------------------------------------------------------------------------------------------------------ACCOUNTING REPORT COMPLETE
Figure 40. DB2PM accounting short report ordered by MAINPACK within plan name
139
1 0 ============================================================== 0 ACCOUNTING 0 TRACE 0 LAYOUT(SHORT) 1 LOCATION: CICSLOC DB2 PERFORMANCE MONITOR (V3) 1-1 SUBSYSTEM: DSN2 ACCOUNTING TRACE - SHORT ACTUAL FROM: 09/08/93 04:11:42.31 04:11:00.00 PAGE DATE: 09/08/93 04:15:00.00
PRIMAUTH CORRNAME CONNECT ACCT TIMESTAMP COMMITS OPENS UPDATES INSERTS EL. TIME(CL1) EL. TIME(CL2) GETPAGES SYN.READ LOCK SUS PLANNAME CORRNMBR THR.TYPE TERM. CONDITION SELECTS FETCHES DELETES PREPARE TCB TIME(CL1) TCB TIME(CL2) BUF.UPDT TOT.PREF LOCKOUTS -------- -------- -------- --------------- ------- ------- ------- ------- -------------- -------------- -------- -------- -------USRT001 004C0001 CICS410 04:11:42.312608 PLANAPP1 'BLANK' ALLIED NORM DEALLOC 2 0 1 65 0 0 0 0 5.974271 0.027459 0.120076 0.024048 12 0 10 1 1 0
---------------------------------------------------------------------------------------------|PROGRAM NAME TYPE SQLSTMT CL7 ELAP.TIME CL7 TCB TIME CL8 SUSP.TIME CL8 SUSP| |SSQLFFO PACKAGE 68 0.119931 0.023910 0.090771 8| ---------------------------------------------------------------------------------------------USRT001 004D0001 CICS410 04:12:11.647066 PLANAPP1 'BLANK' ALLIED NORM DEALLOC 2 0 0 0 0 0 64 0 5.872581 0.157637 0.664971 0.103878 151 197 18 0 1 0
---------------------------------------------------------------------------------------------|PROGRAM NAME TYPE SQLSTMT CL7 ELAP.TIME CL7 TCB TIME CL8 SUSP.TIME CL8 SUSP| |SSQL PACKAGE 64 0.664814 0.103727 0.554440 18| ---------------------------------------------------------------------------------------------USRT001 004E0001 CICS410 PLANAPP1 'BLANK' ALLIED 04:12:40.832168 NORM DEALLOC 2 0 1 65 64 0 0 0 7.827162 0.140760 0.189291 0.077407 17 64 3 1 1 0
---------------------------------------------------------------------------------------------|PROGRAM NAME TYPE SQLSTMT CL7 ELAP.TIME CL7 TCB TIME CL8 SUSP.TIME CL8 SUSP| |SSQL PACKAGE 132 0.189144 0.077266 0.110461 4| ---------------------------------------------------------------------------------------------USRT001 004F0001 CICS410 PLANAPP1 'BLANK' ALLIED 04:13:12.425355 NORM DEALLOC 2 0 1 65 0 64 0 0 8.651578 0.141431 0.222817 0.098112 342 197 3 1 1 0
---------------------------------------------------------------------------------------------|PROGRAM NAME TYPE SQLSTMT CL7 ELAP.TIME CL7 TCB TIME CL8 SUSP.TIME CL8 SUSP| |SSQL PACKAGE 132 0.222658 0.097969 0.123500 4| ----------------------------------------------------------------------------------------------
140
1 0 ============================================================== 0 ACCOUNTING 0 REPORT 0 LAYOUT(SHORT) 0 ORDER(PACKAGE) 1 LOCATION: CICSLOC DB2 PERFORMANCE MONITOR (V3) 1-1 SUBSYSTEM: DSN2 ACCOUNTING REPORT - SHORT INTERVAL FROM: 09/08/93 04:11:42.31 TO: 09/08/93 04:13:12.42 ORDER: PACKAGE PACKAGE ---------------------------------------------------------CICSLOC.USRT001.SSQL CICSLOC.USRT001.SSQLFFO *** GRAND TOTAL ***
PAGE: DB2 VERSION: V3 REQUESTED FROM: NOT SPECIFIED TO: NOT SPECIFIED
TYPE SQLSTMT CL7 TCB TIME CL8 SUSP #OCCURS CL7 ELAP.TIME CL8 SUSP.TIME -------- ------------- ------------- -------PACKAGE PACKAGE 3 1 109.33 0.358872 68.00 0.119931 99.00 0.299137 0.092988 0.262800 0.023910 0.090771 0.075718 0.219793 8.67 8.00
PACKAGE
8.50
1 0 ============================================================== 0 ACCOUNTING 0 REPORT 0 LAYOUT(SHORT) 0 ORDER(PLANNAME) 1 LOCATION: CICSLOC DB2 PERFORMANCE MONITOR (V3) 1-1 SUBSYSTEM: DSN2 ACCOUNTING REPORT - SHORT INTERVAL FROM: 09/08/93 04:11:42.31 TO: 09/08/93 04:13:12.42 ORDER: PLANNAME
PAGE: DB2 VERSION: V3 REQUESTED FROM: NOT SPECIFIED TO: NOT SPECIFIED
#OCCURS #ROLLBK SELECTS INSERTS UPDATES DELETES CLASS1 EL.TIME CLASS2 EL.TIME GETPAGES SYN.READ LOCKSUS PLANNAME #DISTRS #COMMIT FETCHES OPENS CLOSES PREPARE CLASS1 TCBTIME CLASS2 TCBTIME BUF.UPDT TOT.PREF #LOCKOUT -------------------------- ------- ------- ------- ------- ------- ------- -------------- -------------- -------- -------- -------PLANAPP1 4 4 0 8 0.00 48.75 16.00 0.75 16.00 0.75 16.00 0.00 7.081398 0.116822 0.299289 0.075861 130.50 114.50 8.50 0.75 1.00 0
------------------------------------------------------------------------------------------------------|PROGRAM NAME TYPE #OCCURS SQLSTMT CL7 ELAP.TIME CL7 TCB TIME CL8 SUSP.TIME CL8 SUSP| |SSQL PACKAGE 3 109.33 0.358872 0.092988 0.262800 8.67| |SSQLFFO PACKAGE 1 68.00 0.119931 0.023910 0.090771 8.00| ------------------------------------------------------------------------------------------------------ACCOUNTING REPORT COMPLETE
141
Monitoring CICS
CICS provides monitoring and accounting facilities for the resources needed by CICS transactions within the CICS address space. Two types of records can be produced: v Performance records that record the resources used by each transaction in the CICS address space v Exception records that record shortages of resources | | | | | | | | | | The CICS performance class monitoring records include the following DB2related data elds: v The total number of DB2 EXEC SQL and instrumentation facility interface (IFI) requests issued by a transaction. v The elapsed time the transaction waited for a DB2 thread to become available. v The elapsed time the transaction waited for a CICS DB2 subtask to become available. v The elapsed time the transaction waited for DB2 to service the DB2 requests issued by the transaction. CICS monitoring is used in the CICS DB2 environment with the DB2 accounting facility, to monitor performance and to collect accounting information.
142
v Requested reset statistics - a special case of requested statistics in which the statistics counters are reset after collection. v Interval statistics - statistics written when a requested interval expires. v End of day statistics - a special case of interval statistics. v Unsolicited statistics - CICS writes DB2 global and resource statistics to SMF when the attachment facility is shut down. Also, DB2 resource statistics are written to SMF when a DB2ENTRY is discarded. The CICS sample statistics program, DFH0STAT, supports DB2 statistics. It uses EXEC CICS COLLECT STATISTICS commands with the DB2CONN and DB2ENTRY keywords to collect statistics. It also uses EXEC CICS INQUIRE commands for the DB2CONN and DB2ENTRYs to collect data. An example of the output from DFH0STAT is shown in two parts in Figure 44 on page 144.
143
Sysid JOHN
Jobname CI13JTD5
Date 11/17/1998
Time 16:21:46
CICS 5.3.0
PAGE
DB2 Connection Name. . . . . . . . . . DB2 Sysid. . . . . . . . . . . . . . . DB2 Release. . . . . . . . . . . . . . DB2 Connection Status. . . . . . . . . DB2 Connection Error . . . . . . . . . DB2 Standby Mode . . . . . . . . . . . DB2 Pool Thread Plan Name. . . . . . . DB2 Pool Thread Dynamic Plan Exit Name Pool Thread Authtype . . . . . . . . . Pool Thread Authid . . . . . . . . . . Command Thread Authtype. . . . . . . . Command Thread Authid. . . . . . . . . Signid for Pool/Entry/Command Threads. Create Thread Error. . . . . . . . . . Protected Thread Purge Cycle . . . . . Deadlock Resolution. . . . . . . . . . Non-Terminal Intermediate Syncpoint. . Pool Thread Wait Setting . . . . . . . Pool Thread Priority . . . . . . . . . Current TCB Limit. . . . . . . . . . . Current number of TCBs . . . . . . . . Peak number of TCBs. . . . . . . . . . Current number of free TCBs. . . . . . Current number of tasks on TCB Readyq. Peak number of tasks on TCB Readyq . . Pool Thread Limit. . . . . . . . . . . Current number of Pool Threads . . . . Peak number of Pool Threads. . . . . . Number of Pool Thread Waits. . . . . . Current number of Pool Tasks . . . . . Peak number of Pool Tasks. . . . . . . Current Total number of Pool Tasks . . Current number of Tasks on Pool Readyq Peak number of Tasks on Pool Readyq. . Current number of DSNC Command threads Peak number of DSNC Command threads. . DSNC Command Thread Limit. . . . . . . Applid IYK4Z2G1 DB2 Entries DB2Entry DB2Entry DB2Entry DB2Entry DB2Entry Name. . . . . . . Static Plan Name. Dynamic Plan Exit Authtype. . . . . Authid. . . . . . . . . . . . Name. . . . . . . . . . . . . . . . . . . . . . Sysid JOHN
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
RCTJT DC2D 4.1.0 CONNECTED SQLCODE RECONNECT DSNCUEXT TXID SIGNID JTILLI1 N906 00.30 ROLLBACK NORELEASE WAIT HIGH 80 23 23 2 0 0 50 0 2 0 0 0 0 0 0 0 0 2 Date 11/17/1998
16:18:50.06058
Message TD Queue 1. . . . . . . . . . . : CDB2 Message TD Queue 2. . . . . . . . . . . : Message TD Queue 3. . . . . . . . . . . : Statistics TD Queue . . . . . . . . . . : CDB2 DB2 Accounting records by . . . . . . . : TXID
of of of of of of of
Calls using Pool Thread Pool Thread Pool Thread Pool Thread Pool Thread Pool Thread
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
: : : : : : :
0 0 0 0 0 0 2
of of of of
0 0 0 0 PAGE 3
Jobname CI13JTD5
Time 16:21:46
. . . . .
. . . .
. . . .
. . . .
. . . .
: : : :
DB2Entry Thread Wait Setting . . . . . . : WAIT DB2Entry Thread Priority . . . . . DB2Entry Thread Limit. . . . . . . Current number of DB2Entry Threads Peak number of DB2Entry Threads. . . . . . . . . . . . . . : HIGH : : : . . . . . . . . . . . . . . . . : : : : : : : : 20 0 20 20 20 20 0 98 500 0 78
DB2Entry Protected Thread Limit. . . . . . . Current number of DB2Entry Protected Threads Peak number of DB2Entry Protected Threads. . Current number of DB2Entry Tasks . . . . . . Peak number of DB2Entry Tasks. . . . . . . . Current Total number of DB2Entry Tasks . . . Current number of Tasks on DB2Entry Readyq . Peak number of Tasks on DB2Entry Readyq. . .
Numberof Calls using DB2Entry. . . . . . . .: Number of DB2Entry Signons. . . . . . . . . : Number of DB2Entry Commits. . . . . . . . . : Number of DB2Entry Aborts . . . . . . . . . : Number of DB2Entry Single Phase . . . . . . : Number of DB2Entry Thread Reuses. . . . . . : Number of DB2Entry Thread Terminates. . . . : Number of DB2Entry Thread Waits/Overflows . :
144
. . . . . . Name. . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
DB2Entry DB2Entry DB2Entry DB2Entry Number Number Number Number Number Number Number Number
. . . .
. . . .
. . . .
. . . .
: : : :
DB2Entry Thread Wait Setting . . . . . . : POOL DB2Entry Thread Priority . . . . . DB2Entry Thread Limit. . . . . . . Current number of DB2Entry Threads Peak number of DB2Entry Threads. . . . . . . . . . . . . . : HIGH : : : . . . . . . . . . . . . . . . . : : : : : : : : 1 0 1 3 1 1 0 3 19 0 0
of of of of of of of of
Calls using DB2Entry. . . . . . DB2Entry Signons. . . . . . . . DB2Entry Commits. . . . . . . . DB2Entry Aborts . . . . . . . . DB2Entry Single Phase . . . . . DB2Entry Thread Reuses. . . . . DB2Entry Thread Terminates. . . DB2Entry Thread Waits/Overflows
DB2Entry Protected Thread Limit. . . . . . . Current number of DB2Entry Protected Threads Peak number of DB2Entry Protected Threads. . Current number of DB2Entry Tasks . . . . . . Peak number of DB2Entry Tasks. . . . . . . . Current Total number of DB2Entry Tasks . . . Current number of Tasks on DB2Entry Readyq . Peak number of Tasks on DB2Entry Readyq. . .
Important statistics elds to look at as regards performance and tuning are: v The number of calls made using a thread from a DB2ENTRY or the pool and the number of thread reuses, that is, the number of times an existing thread was reused. Thread reuse is good for performance. The use of protected threads can increase thread reuse. v If THREADWAIT(YES) is specied, the peak number of tasks on the readyq waiting for a thread. It is better to limit transactions using a transaction class rather than allow them to queue for threads. v On the DB2CONN, check the number of tasks on the pool readyq. Also the peak number of tasks on the TCB readyq. If the latter is nonzero, tasks were queued waiting for a TCB rather than a thread, and the peak number of TCBs equals the TCBLIMIT. It means the sum of the THREADLIMIT values for the pool, for command threads and all DB2ENTRYs, exceeds the number of TCBs allowed. TCBLIMIT or the THREADLIMITs should be adjusted in this case.
Tuning
For information on tuning DB2 tables and the DB2 subsystem, and for general considerations when tuning a DB2 application, see the DB2 for OS/390 Administration GuideDB2 for OS/390: Administration Guide.
145
146
Handling deadlocks
Deadlocks can occur in a CICS DB2 system between two or more transactions or between one transaction and another DB2 user. This section covers deadlocks only within DB2. If DB2 resources are involved in this type of deadlock, one of the partners in the deadlock times out according to the user-dened IRLM parameters. Other possible deadlocks are where resources outside DB2 are involved.
Chapter 12. Monitoring, tuning, and handling deadlocks
147
Deadlocks are expected to occur, but not too often. You should give special attention to deadlock situations if: v Other transactions are often delayed because they access resources held by the partners in the deadlock. This increases the response times for these transactions. A cascade effect can then be the result. v The resources involved in the deadlock are expected to be used more intensively in the future, because of an increased transaction rate either for the transactions involved in the deadlock or for other transactions. The IRLM component of the DB2 subsystem performs deadlock detection at user-dened intervals. One of the partners in the deadlock is the victim and receives a -911 or a -913 return code from DB2. The actual return code is determined by the DROLLBACK parameter for the DB2CONN (if a transaction is using a pool thread) or the DB2ENTRY used by the transaction. The other partner continues processing after the victim is rolled back. To solve deadlock situations, you must perform a number of activities. Solving deadlocks means applying changes somewhere in the system to reduce the deadlock likelihood. The following steps are often necessary for solving a deadlock situation: 1. 2. 3. 4. 5. Detect the deadlock. Find the resources involved. Find the SQL statements involved. Find the access path used. Determine why the deadlock occurred.
148
Deadlock detection
In a normal production environment running without DB2 performance traces activated, the easiest way to get information about a deadlock is to scan the MVS log to nd the messages shown in Figure 46. From these messages, both partners in the deadlock are identied. The partners
DSNT375I PLAN p1 WITH CORRELATION ID id1 AND CONNECTION ID id2 IS DEADLOCKED with PLAN p2 WITH CORRELATION ID id3 AND CONNECTION ID id4. DSNT501I DSNILMCL RESOURCE UNAVAILABLE CORRELATION-ID=id1,CONNECTION-ID=id2 REASON=r-code TYPE name NAME name
are given by both plan name and correlation ID. Also, a second message identies the resource that the victim could not obtain. The other resource (whether it is the same or not) is not displayed in the message.
149
Making changes
In general, a deadlock occurs because two or more transactions both want the same resources in opposite order at the same time and in a conicting mode. The actions taken to prevent a deadlock must deal with these characteristics. Figure 47 shows a list of preventive actions and the corresponding main effects. Notes:
Spread Change Decrease Change Resources the Locking Concurrency Locking Order Mode X X X X X
Actions Increase Index Freespace Increase Index Subpage size Increase TS Freespace Change Clustering Index Reorg the Table Space Add an Index Drop an Index Serialize the Transactions Use additional COMMITS Minimize the Response Time Change Isolation Level (2) Redesign Application Redesign Database
X X X X
X X (1) X X X X X X
X X
X X
X X X
1. Due to changes in access path. 2. Cursor stability is usually better than repeatable read. To choose the right action, you must rst understand why the deadlock occurred. Then you can evaluate the actions to make your choices. These actions can have several effects. They can: v Solve the deadlock problem as desired v Force a change in access path for other transactions causing new deadlocks v Cause new deadlocks in the system. It is therefore important that you carefully monitor the access path used by the affected transactions, for example by the EXPLAIN facility in DB2. In many cases, solving deadlocks is an iterative process.
150
Index A
abends AD2x and AD3x 125 AEY9 97 ASRE 8 avoiding AEY9 abends 97 transaction abend codes 125 accounting 63, 75, 90 Accounting combinations in one record 87 combining CICS and DB2 records 85 accounting processor time, CLASS 1 and CLASS 2 accounting trace 78 ACCOUNTREC accounting parameter 79 ACCOUNTREC(TASK) 86, 87 ACCOUNTREC(UOW) 63, 80, 86 ACQUIRE(ALLOCATE) 39, 42 ACQUIRE(USE) 39 ADDMEM operand 53 address spaces DSN1DBM1 2 DSN1DIST 2 DSN1IRLMPROC 2 DSN1MSTR 2 DSN1SPAS 2 AEY9 97 APAR PN45895 69 application architecture 100 application design avoiding abends 97 BIND options 94 CICS DB2 design criteria 91 converting CICS applications 111 dynamic plan switching 95 exit program 95 held cursors 99 locking strategy 93 overview 91 packages 96 page contention 114 RETURN IMMEDIATE command 100 security 95 sequential insertion 115 SQL language 112 SQL statements in application design 92 switching CICS transaction codes 102 table-controlled program ow 105 table-controlled program ow technique 108 transaction grouping 104 updating index columns 113 using packages 96, 110 application program interface 1 ASRE abend 8 attachment commands 1 authorization exit routine 59 authorization ID 58 authorization IDs, primary and secondary 59
Copyright IBM Corp. 1998, 1999
AUTHTYPE(GROUP) 58 AUTHTYPE security 56 AUTHTYPE(USERID) 58 AUTHTYPE values for security authorization ID 58 group ID 58 sign ID from DB2CONN 58 terminal ID 58 transaction ID 58 user ID 58 auxiliary trace facility 131 79
B
bind options ACQUIRE(ALLOCATE) 39 cursor stability 94 isolation level 94 RELEASE(COMMIT) 40 RELEASE(DEALLOCATE) 39 repeatable read 94 validation 94 BIND options in application design 94 in program preparation 68 RETAIN 68 BIND parameters, ACQUIRE and RELEASE BIND time stamps 71 BMS (basic mapping support) 22
42
C
CEMT INQUIRE commands 17 CEMT SET commands 17 CICS attachment facility application program interface 1 attachment commands 1 functions 1 monitoring 130 CICS command security 53 VCICSCMD general resource class CICS DB2 attachment facility 7 automatic connection 15 benets 4 function 4 migration 7 migration planning 7 operations 15 performance 4 sample group DFH$DB2 22 system availablity 4 CICS DB2 attachment facility command threads 1 entry threads 1 multithread connections 1 overview 1 pool threads 2
53
151
CICS DB2 attachment facility (continued) resource manager interface (RMI) 2 SQL request 2 transaction thread 2 CICS DB2 connection dened in the RCT 37 dened using RDO 37 CICS DB2 environment preparation 66 testing 65 CICS DB2 interface overview 1 CICS DB2 resource denition DSNCRCT macro 3 overview 3 CICS DB2 statistics 142 CICS resource security XCICSDB2 general resource class 54 CICS security 52 CICS-supplied information for accounting monitor data 75 statistics data 75 CICS-supplied transactions DSNC transactions 21 system programming using CEMT 21 CICS system dump in problem determination 125 CICS transaction codes, switching 102 CICSPlex SM management 4 CLASS 1 processor time 79 CLASS 2 processor time 79 command authorization CICS attachment facility 56 DB2 57, 60 command recognition characters 18 command threads 37 commit processing 40 CONNECTED 98 CONNECTERROR command 99 connection authorization 49, 50 CONNECTST 98 conversion projects 105 converting CICS applications 111 coordinating DB2CONN, DB2ENTRY, BIND options correlation ID 27 CREATE TABLESPACE LOCKSIZE 43 CSUB trace 123 cursor stability 94 cursor table (CT) 39 CURSOR with HOLD option 99 customization dynamic plan exits 73 dynamic plan switching 73 implications 73
42
D
dataset protection 49 DB2 accounting facility 134 DB2 accounting procedure availability of data 82, 85
DB2 accounting procedure (continued) GETPAGES 82 types of data 82 DB2 catalogs SYSIBM.SYSDBRM table 106 SYSPLAN and SYSDBRM 106 DB2 commands 18 DB2 migration 7 DB2 security accounting 63 authorization 58 authorization exit routines 59 authorization to execute a plan 61 establishing authorization IDs 59 performance recommendation 62 primary authorization ID 58 secondary authorization ID 58 security mechanisms 61 DB2-supplied information for accounting traces 76 DB2 thread serialization 114 DB2CONN message parameters 29, 120 DB2PM identiers 137 DBMS(data base management system) 91 DBRMs, production of 70 DCLGEN operations 70 deadlock detection 149 deadlock types 148 deadlocks 147 dening DB2CONN, DB2ENTRY, DB2TRAN for RDO 37 design criteria 91 DFH$DB2 sample group 56 DFH0STAT report 143 statistics summary report 143 DFHCSDUP CICSplex SM 4 dening and installing DB2CONN 4 dening and installing DB2ENTRY 4 dening and installing DB2TRAN 4 installing using EXEX CICS CREATE 4 DFHD2EX1 task related user exit 3 DFHD2MSB subtask 38 DISCONNECT attachment facility command 23 disconnecting CICS and DB2 16 DISPLAY attachment facility command 24 DISPLAY STATISTICS output 27 DSN3SATH sample 59 DSN3SSGN sample 51, 59 DSNC STOP messages 32 DSNC transactions DISCONNECT 21, 23 DISPLAY 21, 24 MODIFY 21, 29 STOP 21, 31 STRT 21, 33 DSNCRCT macro using RDO 3 DSNCSQ entryname 10 DSNCUEXT plan exit 73 DSNTIAC 69
152
DSNTIAR 69 dynamic plan exits 12 dynamic plan selection requirement for pool thread 96 dynamic plan switching 96, 112
LOCKSIZE
43
M
macro changes 8 messages in problem determination 120 migrating to CICS DB2 attachment facility assembling the RCT 8 based on current setup 7 RCTs to the CSD 10 using RDO 8 migration planning DB2 databases 7 Mnotes 8 modiable special registers 41 MODIFY attachment facility command 29 MODIFY TRACE command 76 monitoring data 76 monitoring DB2 131 monitoring the attachment facility CICS transactions 130, 131 functions 17 performance 130 tools 129 using CEMT commands 17 using EXEC CICS commands 17 multisystem data sharing access 7 multithread connections 1 MVS parallel sysplex requirements 7 MVS subtasks 38 MVS system monitoring 145
E
EDF 125 EDF panel for SQL statements. 126 enqueue and dequeue 114 entry threads 37 EXEC CICS EXTRACT EXIT command 8 EXEC CICS EXTRACT EXITPROGRAM 10 EXEC CICS INQUIRE and SET commands 17 EXEC CICS RETURN IMMEDIATE command 100 EXEC SQL COMMIT 113 EXPLAIN 72 EXTRACT EXIT program 8, 10, 97
F
frequency of updates 115
G
GASET option 8 GETPAGE 84 global trace records 77 GRANT command 60, 70 GTF (generalized trace facility)
H
handling deadlocks 147 held cursors 41, 99 hot spots, examples 115
N
NOTCONNECTED NUMLKTS 43 98
I
indoubt UOWs resolution 16 INITPARM system initialization parameter using 7 INQUIRE EXITPROGRAM 98 Installation and migration of CICS DB2 7 INVEXITREQ 97 IRLM component 148 isolation level 94
O
operations with CICS DB2 attachment facility starting the CICS DB2 attachment facility 15 stopping the CICS DB2 attachment facility 16 overview of CICS DB2 3
P
package monitoring 137 package table (PT) 40 packages 68 advantages over dynamic plan switching 96 application design 110 converting existing applications 111 PACKAGES 71 page contention 114 performance CICS attachment facility 130 CICS transactions 131 DB2PM 137 monitoring 129 performance recommendation (security denitions) pool threads 38, 47
Index
J
JCL requirements, CICS startup 8
L
link-editing 4 lock escalation 43 LOCK TABLE statement 93 locking mechanism, DB2 43 locking strategy 93
62
153
primary authorization ID 51 problem determination CSUB trace 123 dump 125 messages 120 trace 120 wait types 117 processor time calculating 82 class 1 78 class 2 81 consumption 78 processor usage 77 production procedure 70 production run library 72 protected threads 39, 45 protecting DB2ENTRY resource denitions PROTECTNUM 44, 47
54
R
RACF 49 external security manager (ESM) 49 RACF class DSNR 51 RACF default resource proles VCICSCMD general resource class 53 RACF list of groups option not active 59 RCT parameters. obsolete 8 RDO (resource denition online) dening and installing DB2CONN 4 dening and installing DB2ENTRY 4 dening and installing DB2TRAN 4 RDONAME parameter 10 RELEASE(COMMIT) 40 RELEASE(DEALLOCATE) 39 releases of DB2 supported 7 repeatable read 94 resynchronization information 17 RETAIN option 68 RETURN IMMEDIATE 100 reusing threads security 44 RMI (resource manager interface) 2 RRCDTE sample job 54
S
sample authorization exit routine 59 sample sign-on exit routine (DSN3SSGN) 51 SASS (single address space) 50 SEC system initialization parameter 61 SECPRFX system initialization parameter 61 security authorizing users to DB2ENTRY 55 AUTHTYPE 56 command security 53 connection authorization 49 DB2TRAN resource security 55 dening RACF proles 54 RACF 49
security (continued) RACF class, DSNR 51 resource security 53 SASS 50 surrogate user checking 55 transaction authorization 49 using AUTHTYPE(GROUP) 51 using AUTHTYPE(USERID) 51 security, surrogate 55 sequential insertion 115 sequential number allocation 115 serialization 114 single address space (SASS) 50 skeleton cursor table (SKCT) 39 skeleton package table (SKPT) 40 SMF (system management facility) 19, 76, 131 SMF 101 record exclusions 81 elds 79 QWACAJST and QWACASRB 81 special registers 62 CURRENT DATE 41 CURRENT DEGREE 41 CURRENT PACKAGESET 41 CURRENT SERVER 41 CURRENT SQLID 41 CURRENT TIME 41 CURRENT TIMESTAMP 41 CURRENT USER 41 SQL dynamic 64 qualied or unqualied 64 static 63 SQL processing, main activities 38 SQL request 2 SQL return code -501 100 -818 71 -911 148 -913 148 SQLCA formatting routine 69 STANDBYMODE command 99 statistics data 75 statistics monitoring in performance 131 statistics summary report 143 STOP attachment facility command 31 storm drain effect 98 STRT attachment facility command 33 system denition parameters PROTECTNUM 47 THREADLIMIT 47 THREADWAIT 47 system initialization parameters INITPARM 7 PROTECTNUM 45 THREADLIMIT 45 THREADWAIT 45 system programming function using CEMT 21
T
table-controlled program ow table space locks 39 105
154
task related user exit (TRUE) 2 TCB attach 46, 48 TCB attach, threads 45 THRDA 13, 73 thread creation 39 thread types used by the CICS attachment facility 37 THREADLIMIT 47, 73 threads creating, using and terminating 44 high priority, unprotected 46 low priority, unprotected 47 releasing 45 TCBs 46 THREADWAIT 47 time stamps 71 TIVOLI Performance Reporter 76 transaction abend codes 125 transaction authorization 49, 52 transaction denitions for issuing DB2 commands 22 tuning CICS applications 146 CICS attachment facility 147 two-phase commit 16, 28 TXID parameter 10 TYPE=ENTRY grouping transactions 44
U
unique indexes 113 unmodiable special registers 41 unprotected threads 38 UOW (unit of work) 16, 94, 113 updating index columns 113
V
VALIDATE 94 validation 94 VCICSCMD general resource class 53 VERSION keyword 72 views 113 VSCR (virtual storage constraint relief) 5
W
wait types 117 wildcard characters 5, 10 WKLD (RMF workload reports) write intents 84 78
X
XCICSDB2 general resource class 54 XCICSDB2 member class 54 XCTL, CICS transfer control 102 XTRAN system initialization parameter 61
Z
ZCICSDB2 grouping class 54
Index
155
156
157
158
SC33-1939-01
Spine information:
Release 3