...

DB接続設計 WASV6 Workshop による基幹システム設計

by user

on
Category: Documents
204

views

Report

Comments

Transcript

DB接続設計 WASV6 Workshop による基幹システム設計
WASV6による基幹システム設計Workshop
DB接続設計
Agenda
データベース・アクセス基礎
一般的なデータベース・アクセスにおけるHint & Tips
Connect to DB2 UDB for LUW (Linux Unix Windows)
Connect to DB2 for z/OS using DB2 Connect
Connect to DB2 for z/OS using Universal JDBC Driver
データベース・アクセス基礎
データベース・アクセス関連コンポーネント
アプリケーション
データ・
データ・ソース定義
ソース定義 (Data Source)
接続プールやJDBCドライバーに関する設定を行う単位です。
接続プール
接続プール (Connection Pool)
アプリケーション・サーバーにインストールされたアプリケーションです。
接続オブジェクトを再利用することで、接続処理による負荷を軽減できます。
接続オブジェクト
接続オブジェクト(Connection
オブジェクト(Connection Object)
RDBMSへの接続を抽象化したオブジェクトです。
Managed Connection((接続プール内の)接続オブジェクト)
Physical Connection (物理接続)
接続オブジェクトと物理接続の状態が、常に一致するとは限りません。
JDBCドライバー
JDBCドライバー
一般的にRDBMSベンダーから提供されるドライバーです。
Application Server
DataSource
Application
(JDBC or SQLJ)
Connection Pool
JDBC Driver
RDBMS
Data
Managed Connection
DataStoreHelper
Physical Connection
接続プールの設定
接続オブジェクトの管理
接続オブジェクトを管理する指針を設定する
接続タイムアウト
dataSource.getConnection()の待ち時間
最大接続数
最小接続数
パージ・ポリシー
リープ処理
一定時間おきに接続オブジェクトを監視し、タイムアウトをチェックする
リープ時間
未使用タイムアウト (Unused Timeout)
未使用の接続を解放
物理接続が最小接続数まで解放
経過タイムアウト (Aged timeout)
定期的にリソースを解放
物理接続が0になるまで解放
Application
最大接続数 = 10
最小接続数 = 5
Application
Connection Pool
最小接続数を超えて
いる場合のみ、未使
用タイムアウトによる
切断対象になる
接続オブジェクトのライフ・サイクル
Managed Connectionの3種類のステータス
Connection Pool
DoesNotExist
InUse
DoesNotExist
InFreePool
(5)
物理接続が存在し、利用されている
InFreePool
物理接続が無い
(4)
(3)
(2)
(1)
物理接続が存在するが、利用されていない
ステータスの遷移のタイミング
InUse
(1)
DoesNotExist → InUse
(2)
InUse → InFreePool
(3)
接続プール内に、InFreePoolの接続オブジェクトがあるときに、dataSource.getConnection()
InUse → DoesNotExist
(5)
connection.close()
InFreePool → InUse
(4)
接続プール内に、InFreePoolの接続オブジェクトがないときに、dataSource.getConnection()
StaleConnectionExceptionが発生
InFreePool → DoesNotExist
未使用タイムアウト、経過タイムアウトが発生
Purge PolicyがEntirePoolに設定されている接続プールに対して、StaleConnectionException
が発生(後述)
DataStoreHelperの働き
DataStoreHelper
SQLExceptionが発生すると、SQLCodeとSQLStateを元に、例外の種類を判別するためのマッピン
グ情報を持っています。
例外の種類には、StaleConnectionException、DuplicateKeyExceptionがあります。
com.ibm.websphere.ce.cm.StaleConnectionException
接続が失効したことを意味します。
SQLExceptionの子クラスで、元のSQLExceptionをオーバーライドしています。
接続プールにこの例外が戻ると、Purge Policyにしたがって、接続プール内の接続を操作します。
EntirePool
FailingConnectionOnly
接続プール内にあるInFreePoolの接続オブジェクトを、全てDoesNotExistにマークします。
StaleConnectionExceptionが発生した接続オブジェクトのみを、DoesNotExistにマークします。
マッピング情報
マッピング情報は
情報は各DataStoreHelperクラス
DataStoreHelperクラスの
クラスのJavadocで
Javadocで参照可能
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.javad
oc.doc/public_html/api/com/ibm/websphere/rsadapter/GenericDataStoreHelper.html
(1) エラーが
エラーが発生!!
Connection Pool
JDBC Driver
RDBMS
Application
StaleConnectionException
SQLException
DataStoreHelper
(3) Purge connections!!
Data
SQLException
(2) SQLExceptionのSQLCodeとSQLStateにより
、StaleConnectionExceptionにマッピングする
マッピングする
一般的なデータベース・アクセスにおけるHint & Tips
一般的なデータベース・アクセスにおけるHint & Tips
一般的なJDBC Driver選択基準
動的SQL (JDBC) VS. 静的SQL (SQLJ)
java.sql.Statement VS. java.sql.PreparedStatement
ステートメント・キャッシュによるPrepare処理の省略
グローバル参照 VS. リソース参照
共用可能接続 VS. 共用不可能接続
コンテナー管理認証 VS. アプリケーション管理認証
接続数の制御
接続処理による負荷の軽減
DBサーバー過負荷状態におけるリクエストの抑制
一般的なJDBC Driver選択基準
Type 1以外のJDBC Driverは、RDBMS固有の物を利用します。そのため
多くの場合、RDBMSベンダーから提供されています。
JDBCドライバーを選ぶ際は、機能とパフォーマンスに基づいて選択しま
す。一般的なJDBCドライバーの特長とパフォーマンスは、下記の通りで
す。
Type 1 (JDBC-ODBC Bridge)
Type 2 (Native API Partly)
アプリケーションからJNIを利用して、直接APIを利用します。
アプリケーションと同一筐体にRDBMSが存在する場合に利用します。
一般的には
一般的には、
には、直接API
直接APIを
APIを呼び出す為、機能が
機能が豊富で
豊富で、比較的パフォーマンス
比較的パフォーマンスが
パフォーマンスが良い方法です
方法です。
です。
Type 3 (Net-protocol pure Java)
Protocol変換するのは、ODBCドライバーに依存する、タイミング不明です。
一般的には、最もパフォーマンスが悪い方法です。
アプリケーションはネットワーク経由でリスナーにアクセスします。
リスナーがRDBMSにアクセスし、応答を返します。
一般的には、比較的パフォーマンスが悪い方法です。
Type 4 (Native-protocol pure Java)
Javaのみでコーディングされています。
ドライバーが、RDBMS固有の通信プロトコルに変換します。
一般的には
一般的には、
には、 RDBMS固有
RDBMS固有の
固有のプロトコルを
プロトコルを利用する
利用する為
する為、比較的パフォーマンス
比較的パフォーマンスの
パフォーマンスの良い方法で
方法で
す。
[参考]JDBC Driverが提供する実装
JDBCドライバーは、JDBCで定義されたAPIの実装を提供します。
JDBC APIのインターフェイスは、java.sql.* および、javax.sql.* パッケージに含まれます。
java.sql.*
Connection
に対する接続を抽象化したインターフェイス
主なメソッド
を実行するのに使用されるインターフェイス
主なメソッド
PooledConnection
済SQLを実行するのに使用されるインター
フェイス
Statementインターフェイスを継承
パラメーター・マーカー”?”を使用可能
主なメソッド
executeQuery(), executeUpdate()
接続プールを実装
ユーザーから利用することはない
データ・ソースへの物理接続
XADataSource
ConnectionPoolDataSourceインターフェイスを継承
XAConnectionのファクトリー
主なメソッド
execute(String sql),
executeUpdate(String sql)
close()
Prepare
getConnection()
ConnectionPoolDataSource
PreparedStatement
に対する接続のファクトリー
主なメソッド
RDBMS
SQL
commit()
rollback()
close()
createStatement()
prepareStatement(String sql)
DataSource
Statement
DB
javax.sql.*
getXAConnection()
XAConnection
分散トランザクションをサポートする接続オブジェクト
PooledConnectionを継承
主なメソッド
getXAResource()
CallableStatement
ストアード・プロシージャーを実行するのに使用される
インターフェイス
PreparedStatementインターフェイスを継承
ResultSet
結果セットを表すインターフェイス
主なメソッド
next()
hasNext()
close()
getString(), getObject()….
分散トランザクション
分散トランザクション(
トランザクション(後述)
後述)のために、
のために、WAS内部
で使用する
使用するインターフェイス
するインターフェイスです
インターフェイスです。
です。XAが利用できな
利用できな
いデータベースなどの
データベースなどの場合
などの場合、
場合、これらの実装
これらの実装は
実装は提供さ
提供さ
れません。
れません。
アプリケーションで
アプリケーションで使用する
使用するインターフェイス
するインターフェイスです
インターフェイスです。
です。
動的SQLの実行
動的SQLは実行時にSQLの解析を行います。
多くのRDBMSは、SQLのPrepare処理の結果作成された実
行計画をキャッシュします。
再度同じ
再度同じSQLを
SQLをPrepare処理
Prepare処理するように
処理するように要求
するように要求されると
要求されると、
されると、キャッ
シュを
シュを検索して
検索して同
して同じものがあれば、
じものがあれば、それを利用
それを利用することで
利用することで実
することで実
行計画を
行計画を決定する
決定するプロセス
するプロセスを
プロセスを省略します
省略します。
します。
JDBC Application
RDBMS
connection.prepareStatement(sql)
Prepare
(Parse)
構文チェック
セキュリティ・チェック
prepareStatement.executeQuery()
Execute
キャッシュの検索
実行計画の決定
resultSet.next()
resultSet.getXXXX()
Fetch
実行計画を
キャッシュから再利用
実行計画を
キャッシュに保存
DB2におけるSQLJアプリケーション開発フロー
SQLJを利用すると静的SQLを利用できます。
SQLに関する情報を事前にBINDすることで、実行時にSQLを解析す
る必要がありません。
開発者は、SQLJのソース・コー
ド(*.sqlj)を記述します。
RDBMSベンダーが提供する
SQLJトランスレーター(DB2
UDBの場合sqljコマンド)を利用
して、プリ・コンパイルすると、
Javaソース・コードと、SQLJプロ
ファイル(DB2 UDBの場合、
*.ser形式)が生成されます。
RDBMSベンダーが提供する
SQLJプロファイルBinder(DB2
UDBの場合db2sqljcustomizeコ
マンドやdb2sqljbindコマンド)を
利用して、BINDします。このとき
*.serファイルには、BIND情報が
更新されます。
Javaソース・コードは、通常通り
コンパイルしてできた*.classファ
イルを、配布します。また、
SQLJプロファイルは実行時に
も必要なので、*.classと一緒に
配布します。
SQLJ source
*.sqlj
開発者がコーディング
precompile
SQLJ translator
[ sqlj ]
SQLJ profile
*.ser
customize
bind
Generated Java
files
*.java
compile
Java compiler
SQLJ profile printer
[ db2sqljprint ]
Text output
Profile customizer
[ db2sqljcustomize]
bind (auto)
SQLJ profile binder
[ db2sqljbind ]
RDBMS (DB2)
package
Class files
*.class
実行時に必要
アクセス・プランなどの情報を含む、DB2側のオブジェクト。
SQLJ profileをBINDすると生成されます。
動的SQL (JDBC) VS. 静的SQL (SQLJ)
動的SQL
動的SQL (JDBC)
実行前
実行時
実行前
Precompile
Compile
Bind
実行時
Parse
Execute
Fetch
静的SQL
静的SQL (SQLJ)
Compile
Execute
Fetch
どちらの方法
どちらの方法で
方法でコーディングしても
コーディングしても、
しても、JDBCドライバー
JDBCドライバーを
ドライバーを利用して
利用してRDBMS
してRDBMSに
RDBMSに接続し
接続し
ます。
ます。
SQLJでは
SQLJでは事前
では事前に
事前にBindしておくことで
Bindしておくことで、
しておくことで、実行時に
実行時にParse処理
Parse処理を
処理を行わない分
わない分、高速に
高速に
SQLを
SQLを実行できます
実行できます。
できます。
SQLJの
SQLJのソースが
ソースが変更になるたびに
変更になるたびにBind
になるたびにBind処理
Bind処理を
処理を行う必要があるので
必要があるので、
があるので、アプリケー
ションの
ションのバージョン管理
バージョン管理は
管理は、SQLJの
SQLJの方が複雑になります
複雑になります。
になります。またアプリケーション
またアプリケーションの
アプリケーションの
開発者は
開発者は、Javaの
Javaの文法の
文法の他に、SQLJ固有
SQLJ固有の
固有の構文を
構文を理解する
理解する必要
する必要があります
必要があります。
があります。
java.sql.Statement VS. java.sql.PreparedStatement
PreparedStatementを利用することで、Prepare済のステート
メントを再利用できます。
HEAVY
JDBC Application
RDBMS
java.sql.Statement
文を実行する度に、SQLが
されます。
connection.createStatement()
Prepare
statement.executeQuery(sql)
Execute
resultSet.hasNext() resultSet.next()
resultSet.getXXXX()
Fetch
connection.preapreStatement(sql)
Prepare
preparedStatement.executeQuery()
Execute
resultSet.hasNext() resultSet.next()
resultSet.getXXXX()
Fetch
SQL
Parse
java.sql.PreparedStatement
回 されたSQLを、何回も実
行できます。これにより、RDBMSに
かかるParseの負荷を軽減できます。
特にデメリットはありませんので
デメリットはありませんので、
はありませんので、
コーディング上
コーディング上はこの
PreparedStatementを利用してく
利用してく
ださい
1 Parse
ステートメント・キャッシュによるPrepare処理の省略
アプリケーションからprepareを要求すると、ステートメント・キャッシュに同じSQL文が存在す
るか、検索します。
存在した場合、キャッシュ内のPreparedStatementを再利用します。
存在しなかった場合、Prepareを要求します。
PreparedStatementは、トランザクション終了時にキャッシュに戻ります。
ステートメント・キャッシュは、接続オブジェクト毎に用意されます。
ステートメント・
ステートメント・キャッシュ・
キャッシュ・サイズの
サイズの有効性は
有効性は、RDBMSの
RDBMSの種類や
種類や設定によって
設定によって異
によって異なります。
なります。
Application Server
RDBMS
JDBC Application
Prepare
connection.preapreStatement(sql)
Statement Cache
キャッシュに
キャッシュにHitしなかった場
しなかった場
合のみ、
のみ、Prepareを行います。
います。
preparedStatement.executeQuery()
Execute
resultSet.next()
resultSet.getXXXX()
Fetch
Tivoli Performance Viewer (TPV)による監視
TPVを使うと、破棄されたPreparedStatementの数を確認することができます。
この数が極端に多い場合には、ステートメント・キャッシュ・サイズを大きくすることを検討してください。
ステートメント・キャッシュが利用するHeapの量は、それほど多くありませんが、変更後は必ず負荷テストを行ってく
ださい。
ステートメント・キャッシュ再利用の条件
SQLの文字列が全く同じである必要があります。
1文字でも異なると判断されると、再利用されません。次のような場合
にも、異なると判断されます。
列名指定順の違い
大文字と小文字の違い
空白文字数の違い
connection.prepareStatement()で指定する引数が同じである
必要があります。
resultSetType, resultSetConcurrency, resultSetHoldabilityが同じで
ある必要があります。
グローバル参照 VS. リソース参照
グローバル参照
グローバル参照
(例) ctx.lookup(“jdbc/dataSourceName”);
AS上に定義したデータ・ソースを、アプリケーションで直接lookupする方法です。
J2EEでは非推奨です。できる限りリソース参照を利用してください。
実行時にアクセスするデータ・ソースが決定する場合など、特殊なケースでのみ使用してください。
リソース参照
リソース参照
通常はこの
通常はこの、
はこの、リソース参照
リソース参照を
参照を利用してください
利用してください。
してください。
AS上に定義したデータ・ソースに対して、デプロイメント記述子でリソース参照を定義します。アプリ
ケーションでは、リソース参照をlookupします。
(例) ctx.lookup(“java:comp/env/resrefName”);
DataSourceの各種設定を変更できます。
デフォルトの分離レベル
Container
Application
デフォルトでは共用可能です。
SQL文で分離レベル指定を行わない場合に、この分離レベルが適用されます。
これを設定しないと、デフォルト値はTRANSACTION_REPEATBLE_READです。
認証方法
共用可能 (Sharable) / 共用不可能 (Unsharable)
グローバル参照
グローバル参照で
参照でlookup
Application Server
ctx.lookup(“jdbc/dataSourceName”)
Enterprise Application
Class
Deployment Descriptor
Resource
Reference
リソース参照
リソース参照で
参照でlookup
ctx.lookup(“java:comp/env/resrefName”)
Data Source
RDBMS
[参考]分離レベルについて
JDBCでは、トランザクションの分離レベルが4種類定義されています。こ
の分離レベルは、DB2の分離レベルとは異なるので注意してください。
JDBC
TRANSACTION_SERIALIZABLE
TRANSACTION_REPEATABLE_READ
TRANSACTION_READ_COMMITED
TRANSACTION_READ UNCOMMITED
S
RR
RC
RU
DB2
Repeatable read
Read stability
Cursor stability
Uncommited read
RR
RS
CS
UR
CMPの分離レベルは、リソース参照のデフォルト分離レベルではなく、ア
クセス・インテントに従って決定されます。
分離レベル
分離 レベル
アクセス・
アクセス ・ インテント・
インテント ・ プロファイル
wsPessimisticUpdate- Weakest
LockAtLoad (デフォルト・ポリシー)
wsPessimisticUpdate
wsPessimisticRead
wsOptimisticUpdate
wsOptimisticRead
wsPessimisticUpdate-NoCollisions
wsPessimisticUpdate-Exclusive
更新ロック
更新 ロック
DB2
Oracle
SyBase
Informix
Cloudsca
pe
SQL
Server
RR
RC
RR
RR
RR
RR
RR
RR
RC
RC
RC
S
RC
RC
RC
RC
RC
S
RR
RR
RC
RC
RC
S
RR
RR
RC
RC
RC
S
RR
RR
RC
RC
RC
S
RR
RR
RC
RC
RC
S
No ※Oracle
のみYes
Yes
No
No
No
No
Yes
共用可能接続 VS. 共用不可能接続
Class A
共用可能接続
同じトランザクション・スコープ内で、getConnection()を
呼び出すと、リソース参照の設定が同じ場合、毎回同
じ接続が取得できます。
物理接続 : 接続オブジェクト = 1 : N
get/use/closeパターンでコーディングしてください。
グローバル・トランザクション内でcloseしても、スコープを抜けるま
で接続オブジェクトはFreePoolに戻りません。
ただし、
ただし、接続オブジェクト
接続オブジェクトの
オブジェクトのプロパティ(
プロパティ(例えば分離
えば分離レベル
分離レベル)
レベル)を変更
すると、
すると、SharingViolation例外
SharingViolation例外が
例外が発生します
発生します。
します。
get/use/closeパターンは、利用時に接続オブジェクトを取得し、利
用終すぐに解放するコーディング方法です。
基本的には
基本的には利用
には利用しないでください
利用しないでください。
しないでください。
グローバル・トランザクション利用時に、1 Phase
Commit最適化を起こりやすくする為に使ってください。
共用不可能接続
通常はこちらを
通常はこちらを使
はこちらを使ってください。
ってください。
毎回異なる接続オブジェクトが取得できます。
グローバル・トランザクション内で接続オブジェクトをcloseすると、
接続オブジェクトはグローバル・トランザクションの終了を待ちます。
物理接続 : 接続オブジェクト = 1 : 1
アプリケーション・コード内で、接続オブジェクトをキャッ
シュする場合に有効です。
Class B
共用
Transaction
Scope
get
Connection
Pool
use
close
Class C
get
use
close
Class A
Class B
共用不可能
Transaction
Scope
get
use
close
Class C
get
use
close
Connection
Pool
コンテナー管理認証 VS. アプリケーション管理認証
コンテナー管理認証
J2EEでは非推奨です。アプリケーション管理認証を利用してください。
データソースのコンテナー管理認証別名を使って、RDBMSにアクセスします。
コンテナー管理認証別名は、クライアント・コンテナー、もしくは別セル内の
サーバーで稼動するアプリケーションからも利用できる為、セキュリティー上
好ましくない場合があります。
アプリケーション管理認証
アプリケーション管理認証
データソースのコンポーネント管理認証別名を使って、RDBMSにアクセスし
ます。
コンポーネント管理認証別名は、アプリケーション・サーバーにインストールし
たアプリケーションから利用できます。クライアント・コンテナー、もしくは別セ
ル内のサーバーで稼動するアプリケーションからは利用できません。
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/co
m.ibm.websphere.base.doc/info/aes/ae/cdat_seccon.html
接続数の制御
最大接続数
最小接続数
ピーク時に1ASがデータベースへのアクセス数を設定してください。ただし、接続先RDBMSの許容量を超えるように
は設定しないでください。
最大接続数と同じ数に設定すると、使用されない接続が確立されたままになります。これにより、DBサーバーのリ
ソース解放のタイミングを逃すことになります。
定常状態の接続数を設定してください。基本的にはリソースの解放が目的ですが、特別な理由がない限り0には設
定しない方が良いです。定期的
定期的な
定期的なリソース解放
リソース解放が
解放が目的の
目的の場合には
場合には、
には、経過タイムアウト
経過タイムアウトを
タイムアウトを利用してください
利用してください。
してください。(DB2
UDBを
UDBを例にとって後述
にとって後述します
後述します。
します。)
未使用タイムアウト
最小接続数までリソースを解放する為に設定します。特別な理由により、使用しない接続の解放を強いられていな
いのであれば、初期値より短く設定する必要はありません。
実際に接続オブジェクトが解放されるのは、リープ処理のタイミングであることに注意してください。
Application
Application
最大接続数 = 10
最小接続数 = 5
Connection Pool
最小接続数を超えて
いる場合のみ、未使
用タイムアウトによる
切断対象になる
Tivoli Performance Viewer (TPV)による監視
TPVを使うと、接続プールの利用状況を確認できます。
接続プールを使い切っていて、且つ接続タイムアウトが多発しているような場合、最大接続数を増やすことで、接続
タイムアウトを減らすことができるかもしれません。RDBMSの負荷との兼ね合いともあるので、よく検討してチューニ
ングしてください。
WAS V6 NEW!!
接続処理による負荷の軽減
RDBMSに対して、同時に大量の接続要求を行うと、RDBMS
側のリソース割り当てがうまく行かず、接続処理の効率が悪
化する可能性があります。
これを回避する為に、WAS 6では接続プールの拡張設定とし
て、サージ保護に関する機能が追加されました。
設定項目
サージしきい値
同時に行っている接続要求がこのしきい値を超えると、サージ・モードが開始しま
す。
サージ作成間隔
サージ・モードが有効なときに、接続要求を発行する間隔を設定します。
WAS V6 NEW!!
DBサーバー過負荷状態におけるリクエストの抑制
過負荷に陥っているRDBMSに対して、更に処理を要求すると、全てのリ
クエストの処理効率が低下する可能性があります。
これを回避する為に、WAS 6では接続プールの拡張設定として、滞留
モードに関する機能が追加されました。
設定項目
滞留タイマー時間
滞留時間
リソースからレスポンスが戻るまでの待ち時間を設定してください。この時間を超えると、その
接続は滞留接続であると判定されます。
滞留しきい値
滞留状態をチェックする間隔を設定します。
滞留接続数がこのしきい値を超えると、接続プールは滞留状態になります。
滞留状態
滞留状態でgetConnection()を呼び出すと、
javax.resource.ResourceExceptionが発生します。アプリケーションは、この例
外を受け取ったら、RDBMS負荷を回避する為の対応を行うことで、効率的に
サービスを提供できます。
画面に「しばらくお待ちください」などのメッセージを表示して、ユーザーに待機を促すことで、
アプリケーション・サーバーに対する余計な負荷を回避できます。
DB2接続
ここからはDB2への接続に関するHint & Tipsを紹介します。
DB2 UDB for LUW (Linux, Unix and Windows)
DB2 for z/OS using DB2 Connect
DB2 for z/OS using Universal JDBC Driver Type 4
DB2 UDB for LUW
WASとDB2 UDBが同一筐体内に導入されている場合は、Universal
JDBC Driver Type2を利用します。
別筐体に導入されている場合は、2つの接続方法があります。
Type 4による接続
直接接続できるため高速です。
Type 2によるClient Instance経由での接続
Application Server
Data Source
DB2 UDB
JDBC Driver
Type 2
Application Server
Data Source
DB2 UDB
JDBC Driver Type 4
DB2 for z/OS using DB2 Connect
DB2 for z/OS Version 7までは、TM (Transaction Manager)がWASの環
境でDB2 for z/OSをRM (Resource Manager)として利用する為には、
DB2 Connectによってプロトコル変換を行う必要がありました。
DB2 Connectはプロトコル変換に関する情報をSPMログに書き出します。
XAトランザクションを利用する場合、リカバリーの為にSPMログが必要で
す。
Application Server
Data Source
DB2 Connect
JDBC Driver
DB2 for z/OS
Type 2
SPM log
Application Server
Data Source
DB2 Connect
JDBC Driver Type 4
SPM log
DB2 for z/OS
DB2 for z/OS using Universal JDBC Driver Type 4
DB2 for z/OSは、Version 8からXAプロトコルに(一部)対応しました。
※詳細は「DRDA 2005 WAS - DB2 for z/OS連携ワークショップ」の資料
を参考にしてください。
その為Universal JDBC Driver Type 4を利用してDB2 for z/OSへの直接
接続した場合にも、XAが利用可能です。
Universal JDBC Driverには、Connect Instanceで行っていた接続プール
や、Sysplex Exploitation機能が実装されています。
新機能であるため、この構成はまだ適用されていませんが、SPMログが
必要ないなど、Connect Instanceを利用するよりも格段に構成をシンプル
にできます。
Application Server
DB2 for z/OS
Data Source
JDBC Driver Type 4
Connect to DB2 UDB for LUW
(Linux, Unix and Windows)
JDBC Driver選択基準
WASとDB2が同一筐体の場合は、Universal JDBC Driver Type 2を利用してくだ
さい。
CLI Driverは今後更新されず、廃止される予定です。
Type 4はTCP/IPを利用するのに対して、Type 2はメモリー間通信を行うので、一般的
に高速です。
別筐体の場合は、次の2つの選択肢があります。
Type 2 DriverでDB2 Client経由で接続
Type 4 Driverで直接接続 ← 直接接続できる為、一般的に高速
Application Server
Data Source
DB2 Client
JDBC Driver
Type 2
Catalog
DB2 UDB
[target]
Application Server
Data Source
JDBC Driver Type 4
DB2 UDB
[target]
DBサーバーのリソース解放
WASがPreparedStatementをステートメント・キャッシュに保持するのに対して、DB2ではSQLをParseした
結果(実行計画)をPackage Cache内にあるPackageのSectionに保持します。
多くの種類のSQLを利用するアプリケーションでは、applheap(アプリケーション・ヒープ)を多く消費する
傾向があります。公式な情報ではありませんが、下記のように動作しているようです。
Package名はデータ・ソースの拡張設定で設定可能です。
SQL実行時には、Sectionの情報をapplheapに読み込みます。
アプリケーションからPrepare要求が届くと、applheapに読み込まれているSectionについては、そのまま実行されま
す。
接続を切断すると、applheapを解放できます。
経過タイムアウト
経過タイムアウトで
タイムアウトで一定時間毎に
一定時間毎に接続を
接続を解放することで
解放することで、
することで、applheapなどの
applheapなどのdb2agent
などのdb2agentが
db2agentが利用する
利用するヒープ
するヒープ領
ヒープ領
域を定期的に
定期的に解放できます
解放できます。
できます。
Application Server
DB2
DataSource
Connection Pool
JDBC Driver
Statement
Cache
db2agent
applheap
Package
Section
db2agent
Statement
Cache
Package Cache
applheap
Section
Section
Section
Section
DataStoreHelper
Table
Statistics
DBサーバーへの接続負荷の軽減
接続プールを利用することで接続負荷を軽減できるのは、前
述の通りです。
しかし、前項で述べたとおり、リソースを定期的に解放するた
めには、接続を切断する必要があります。
接続を要求されると、接続処理の負荷がサーバーにかかります。
前述の通りWAS 6では接続プールの拡張機能として、サー
ジ保護と滞留モードが追加されました。
サージ保護
サージ保護を
保護を利用することで
利用することで、
することで、接続要求がまとまって
接続要求がまとまってDB
がまとまってDBサーバー
DBサーバーに
サーバーに
飛ばないように制御
ばないように制御できます
制御できます。
できます。これにより接続処理
これにより接続処理(
接続処理(db2agentの
db2agentの初期
化)において、
において、リソース割
リソース割り当てが競合
てが競合することによる
競合することによるDB
することによるDBサーバー
DBサーバーの
サーバーの
負荷を
負荷を軽減できます
軽減できます。
できます。
滞留モード
滞留モードを
モードを利用すると
利用すると、
すると、高負荷状態の
高負荷状態のDBサーバー
DBサーバーに
サーバーに、それ以上
それ以上の
以上の
処理を
処理を要求しないように
要求しないように制御
しないように制御できます
制御できます。
できます。
Client Reroute 利用時の考慮点
機能説明
接続先DBに障害が発生した時、Client側で接続先を切り替える機能です。
コードでリトライロジックを記述する必要があります。
接続先の切り替えが完了すると、クライアントにはSQLCode -30108(Client
Instanceによって切り替えた場合)、もしくは-4498(Type 4ドライバーによって
切り替えた場合)が発生します。
① 障害が発生
② Client Reroute機能により、代替サーバー(Alternate Server)に再接続
③ アプリケーションに-30108、もしくは-4498が戻ります。
この例外はStaleConnectionExceptionにマッピングされない為、接続プール
内のすべての接続オブジェクトで、Client Rerouteが発生することになります。
PK06078
-30108と-4498がStaleConnectionExceptionにマッピングされるようになりま
す。
Purge PolicyをEntierPoolに設定しておくことで、1つの接続オブジェクトで
Client Rerouteが発生すると、InFreePoolの接続オブジェクトをすべて解放で
きます。
1
JDBC Driver
JDBC Application
DB2
DB2 Client
3
2
DB2
64bitインスタンスへの接続方法
DB2 64bitインスタンスを利用するメリット
巨大なメモリー空間を利用可能になります。
これによりDB2は大きいバッファープールを作成可能になり、処理が高速になりま
す。
同一筐体でWASが64ビットで稼動している場合は、Type 2ドライバー
を使って、DB2の64ビットインスタンスに接続できます。
同一筐体でWASが稼動している場合でも、WASが32ビットで稼動して
いる場合は、Type 2接続は利用できません
32ビットのWASから、64ビットのDB2に接続する方法
Client Instanceを経由させる
WASからは32ビットのClient Instanceに接続し、Client InstanceでDBをカタログさ
せることで、接続可能です。
Type 4ドライバーを利用する
Type 4ドライバーはTCP/IPを利用するため、64ビット・インスタンスに対しても接
続可能です。
同一筐体内に2つのDB2インスタンス
DBを移行する際、2つのバージョンのDB2インスタンスに対して、接続し
たい場合、1つのサーバーから同時に、2つのDB2インスタンスにType 2
接続に、Type 2接続することはできません。
これはType 2接続ではネイティブ・ライブラリーがDB2のバージョンごとに
違う為です。
Type 2接続を続ける場合、WASのサーバーは最低でも2つ起動する必要が
あります。
Nodeagent起動時にdb2profileを読み込ませている場合、それぞれのサー
バーに適切なネイティブ・ライブラリーを読み込ませることができない場合が
あります。
Nodeagent起動時にはdb2profileを読み込ませず、サーバーごとに、適切
な「環境エントリー」を設定することで、上記問題を回避できます。
DB2INSTANCE
DBインスタンス名を設定します。
LIBPATH
DB2_INSTANCE_USER_HOME_DIRECTORY/sqllib/lib を設定します。
Connect to DB2 for z/OS
using DB2 Connect
XA利用時の考慮点
In-doubtトランザクションのリカバリー
XAはPresumed Nothing
DRDA XAはPresumed Abort
Phase 1 request (prepare)前にTMがlogを書き出す為、TMは再同期が必要である
かどうかを把握します。
Phase 1 request (prepare)前にARがlogを書き出さない為、ARは再同期が必要で
あるかどうか把握しません。
DB2 for z/OSトランザクション
z/OSトランザクションの
トランザクションのリカバリー要求
リカバリー要求は
要求はDB2 for z/OSから
z/OSから発行
から発行されるこ
発行されるこ
とがあるため、
とがあるため、リカバリー計画時
リカバリー計画時には
計画時には、
には、DB2 Connectと
Connectと合わせて考慮
わせて考慮する
考慮する必要
する必要が
必要が
あります。
あります。
Sysplexによるデータ共用環境において、負荷分散機能としてSysplex
Distributor(後述)だけを利用すると、インダウトの解決は保障されま
せん。
Application Server
DB2 Connect
TM
(Transaction Manager)
DB2 for z/OS
RM
(Resource Manager)
Presumed Nothing
Presumed Abort
AR
(Application Requester)
AS
(Application Server)
WASとDB2 Connectの接続プールの関係
WASの接続プール機能の他に、DB2 ConnectとDB2 for
z/OSでも、独自のプーリング機能があります。
DB2コネクトのConnection Pooling および Connection Concentrator
一度確立された接続を保持することで、DB2 for z/OSへの接続の確立と切断に
要する負荷を削減できます。
DB2/zのThread Pooling
DB2コネクトからの大量の接続を可能にしつつ、DB2 for z/OS内でメモリを消費す
るスレッドの数を削減できます。
Application Server
Application
Connection Pool
WAS
Connection Pool
DB2 Connect
Connection
Agents
DB2 Connect
Connection Pool
& Concentrator
DB2 for z/OS
DDF
DBM1
DB2 for z/OS
Thread Pool
Execute
SQL
DB2 Connectの接続プール機能
利用し終わったdb2agentをプーリングすることで、プロセス初期化の負荷
を軽減できます。
db2agentはDB2 for z/OS側にあるDDF上のスレッド(コネクション)と接続
を保ちます。
クライアント側は、接続数がMAX_CONNECTIONSになるまで、接続でき
ます。
db2agent数は通常、num_poolagent以下にはなりません。
DB2 Connectのヘルス・モニターが、プールされたdb2agentをDB2/zの監視
に利用することがあります。ヘルス・モニターはdb2agentを使用後、解放しま
す。
ヘルス・モニターはデフォルトでONに設定されています。
WASの
WASの接続プール
接続プールと
プールとDB2 Connectの
Connectの接続プール
接続プールを
プールを併用すると
併用すると、
すると、接続の
接続の管
理が複雑になります
複雑になります。
になります。以降で
以降で解説する
解説するDB2
するDB2 Connectを
Connectを利用した
利用した負荷分散
した負荷分散
機能を
機能を利用しない
利用しない場合
しない場合は
場合は、DB2 Connectの
Connectの接続プール
接続プールを
プールを利用する
利用する必要
する必要
はありません。
はありません。
Idle thread timeout利用時の考慮点
DDFに接続要求が届くと、スレッド・プール内のInactive Thread (RA)と1:1で結びつき、Active Thread
(DA)になります。
KEEPDYNAMIC(NO)に設定されていないと、ConnectionとDBATは切り離されないため、DBATがInactive
になることはありません。
with hold (holdability=true)指定されたCursorが開いたままだと、トランザクションが終了してもDBATは
Inactiveになりません。
サブシステム・パラメーター:CMTSTAT=INACTIVEに設定することで、スレッド・プールが利用可能になります。
DDF内のThreadは、DB2 for z/OS Version 8から、Connectionと呼ばれるようになりました。
必要な
必要な場合のみ
場合のみ、
のみ、holdabilityを
holdabilityをtrueにして
trueにしてSQL
にしてSQLを
SQLを発行してください
発行してください。
してください。
holdability=trueで
holdability=trueで得られた結果
られた結果セット
結果セットは
セットは、確実に
確実に解放してください
解放してください。
してください。
DBATがアクティブなまま、IDTHTOINで指定した時間を超えると、スレッドはPooled DBATに戻されます。
CMTSTAT=INACTIVE
DDF
DBM1
DBAT (Database Access Thread)
Inbound Connection
Active Connections
Active DBAT (RA)
R2
Inactive Connections
Pooled DBAT (DA)
IDTHTOIN=****
Idle thread timeout利用時の考慮点
スレッドがActiveかつIdle状態のまま、Idle thread timeoutで指定した時間
経過すると、スレッドは破棄されます。
データ・ソースのカスタム・プロパティーで、
retrieveMessagesFromServerOnGetMessage=trueに設定していると、
IDLE_THREAD_TIMEOUTによってRollback Pending状態になったトランザク
ションを利用して、ストアード・プロシージャーを呼び出してしまうため、複数の
例外が発生してしまいます。
retrieveMessagesFromServerOnGetMessage=false
retrieveMessagesFromServerOnGetMessage=falseに
=falseに設定することで
設定することで、
することで、この
問題は
問題は回避できます
回避できます。
できます。
InFreePool状態の接続先のスレッドで、Idle Thread Timeoutが発生する
問題が発生しました。
次のようなケースでInFreePool状態の接続先スレッドがActiveになる可能性
があります。
JDBC関連オブジェクトの解放が正しく行われなかった場合。
グローバル・トランザクション内でgetConnection()したものの、その接続を利用してSQLを発行
せずに、接続を解放した場合
最小接続数=0
最小接続数=0、
未使用タイムアウト<IDTHTOIN
設定することで回避
=0、未使用タイムアウト
タイムアウト<IDTHTOINに
<IDTHTOINに設定することで
することで回避できま
回避できま
す。
非常に
非常に特殊な
特殊なケースです
ケースです。
です。通常は
通常はIdle thread timeoutが
timeoutが発生するのは
発生するのはInUse
するのはInUse
の接続だけです
接続だけです。
だけです。同様の
同様の問題が
問題が発生して
発生して緊急
して緊急に
緊急に対処が
対処が必要な
必要な場合に
場合に適用し
適用し
てください。
てください。
ステートメント・キャッシュの必要性
DB2 for z/OSにおける2種類のキャッシュ機能
Global Cache
Local Cache
スレッドごとにPrepare済のSQLをキャッシュします。
DB2 for z/OSのスレッド・プールを利用する環境では、あるアプリケーションが同じスレッドを
利用するとは限らない為、Local Cacheの効果は見込めません。
DB2 Connectによる負荷分散機能(Sysplex Exploitation、Connection Concentrator)を利用
する場合は、KEEPDYNAMIC(NO)に設定するため、利用できません。
ステートメント・
ステートメント・キャッシュが
キャッシュが有効なのは
有効なのはKEEPDYNAMIC=YES
なのはKEEPDYNAMIC=YESの
KEEPDYNAMIC=YESの環境です
環境です。
です。
NOの
NOの場合はあまり
場合はあまり効果
はあまり効果が
効果が見込めません
見込めません。
めません。デフォルトは
デフォルトは
KEEPDYNAMIC=NOで
KEEPDYNAMIC=NOで、YESに
YESに変えるにはDB2Binder
えるにはDB2Binderコマンド
DB2Binderコマンドを
コマンドを使います。
います。
メンバーごとにPrepare済のSQLをキャッシュします。
SQLがGlobal Cacheに存在する場合、Short prepareになります。Short prepare (10-50K
Introductions)はFull prepare (500K Introductions)よりも大幅にprepareの時間を短縮できます。
(例) > java com.ibm.db2.jcc.DB2Binder -url
jdbc:db2://9.170.1.14:8181/KOARA -collection DB2013 -user DB2013 password DB2013 -keepdynamic yes
DB2 for z/OSにおけるキャッシング機能の詳細については「DRDA 2005
WAS - DB2 for z/OS連携ワークショップ」の「DRDAのPerformance関連
機能」の資料を参照してください。
Sysplexとデータ共用
DB2/zをSysplex構成にすることで、複数のメンバーへの負
荷分散が可能です。
OSやCPU障害時にFail overが可能です。
データ共用
データ共用グループ
共用グループ
z/OS System A
WLM Information
TCP/IP Stack
NI
DB2 for z/OS
Subsystem 1
DB2 for z/OS
Subsystem 2
Static VIPA
NI
DB2 Connect
or
Universal JDBC
Driver
Sysplex
Exploytation
SYSPLEX
Dynamic
VIPA
Database
CF
Connection
Concentrator
TCP/IP Stack
NI
NI
WLM Information
z/OS System B
DB2 for z/OS
Subsystem 1
DB2 for z/OS
Subsystem 2
DB2 Connectによる負荷分散機能利用時の考慮点
Sysplex Exploitation
負荷情報を取得するのは、新規に接続を確立する時です。
次のような条件があります。
DB2 Connectの接続プール機能を利用する必要があります。
KEEPDYNAMIC=NOに設定する必要があります。
経過タイムアウト
経過タイムアウトを
タイムアウトを利用して
利用して、
して、一定時間ごとに
一定時間ごとに接続
ごとに接続を
接続を切断することで
切断することで、
することで、
負荷の
負荷の均一化できます
均一化できます。
できます。
Connection Concentrator(+Sysplex Exploitation)
負荷情報を取得するのは、トランザクション完了時です。
KEEPDYNAMIC=NOに設定する必要があります。
Sysplex Exploytationとは違い、一定時間ごとに切断する必要はあり
ません。
VIPAによる高可用性機能利用時の考慮点
VIPA (Virtual IP Address)
Static VIPA
Dynamic VIPA
Static VIPAの機能に加えて、Sysplex構成されたメンバーに、TCP/IPスタックを引き継ぐ機能
です。TCP/IPスタックの障害に対応できます。
障害時には、DB2 Connectとの接続が一度切断されます。
Member specific DVIPA
物理インターフェイスを多重化できます。動的ルーティングと併用します。
Sysplex構成されたメンバーをまたがって、TCP/IPスタックを引き継ぐ機能ではありません。
障害時に引継ぎが発生しても、基本的にDB2 Connectとの接続は切断されませんが、切断さ
れる可能性が無いわけではありません。
DVIPAによってサブシステム毎に固有のIPを割り当てます。
サブシステムのCPUなどに障害があった時にも、データ共用グループ内の別システムにFail
overします。
VIPAを
VIPAを利用すると
利用すると、
over時にStaleConnectionExceptionが
StaleConnectionExceptionが発生する
発生する可能
すると、Fail over時
する可能
性があります。
があります。接続プール
接続プールの
プールの設定で
設定で、Purge Policyを
PolicyをEntirePoolに
EntirePoolに設定してく
設定してく
ださい。
ださい。アプリケーションは
アプリケーションはStaleConnectionExceptionの
StaleConnectionExceptionの扱いを検討
いを検討してくだ
検討してくだ
さい。
さい。
Sysplex Distributorによる初回接続の可用性
Sysplex Distributor
TCP/IPスタックを2重に用意して、Distributed StackとTarget Stackを分割し
ます。
Distributed Stack
DVIPAを割り当てる為、別のTCP/IPスタックにFail overできます。
クライアントからの接続要求を受け付け、負荷の小さいTarget Stackに割り振ります。
割り振りをCF (Coupling Facility)経由で行う為、毎回Distributed Stackを経由すると、XCF (CrossSystem Coupling Facility)に大きな負荷がかかります。
Target Stack
Member specific DVIPAで割り当てたTCP/IPスタック
Sysplex Exploitationを
Exploitationを利用している
利用しているクライアント
しているクライアントは
クライアントは、一度Target
一度Target Stackに
Stackに接続すると
接続すると、
すると、それ以降
それ以降
Distributed Stackには
Stackにはアクセス
にはアクセスしません
アクセスしません。
しません。これにより、
これにより、XCFの
XCFの負荷を
負荷を軽減できます
軽減できます。
できます。その為
その為、Sysplex
Distributorを
Distributorを利用する
利用する場合
Exploitationを有効にしてください
有効にしてください。
する場合は
場合は、Sysplex Exploitationを
にしてください。
z/OS System B
TCP/IP Stack
Distributed
DVIPA
Sysplex
Exploytation
DB2 Connect
or
Universal JDBC
Driver
DB2 for z/OS
Subsystem 1
Target
DVIPA
XCF
CF
Distributed
DVIPA
Target
DVIPA
TCP/IP Stack
z/OS System B
Database
DB2 for z/OS
Subsystem 2
Sysplex Distributor
Sysplex Distributor
単体での利用は推奨されておらず、Sysplex Exploitation(Connection
Concentrator)と併用されるのが一般的です。
Sysplex Distributor単体で利用すると、DB2 Connectが接続先を特定しない為、
In-doubtトランザクションが回復できない場合があります。
Sysplex Exploitationと併用するとでは、Fail over後も同じメンバーに接続するため、
In-doubtトランザクションが回復できます。
初めて接続を要求するときに、メンバーに障害があっても、正常に接
続できます。(初回冗長性あり)
接続要求はSysplex Distributorが提供するIP(Distribution Stack)に
送信しますが、実際に接続が確立されるのは、DVIPAが提供するIP
(Target Stack)です。Sysplex Exploitationを利用した場合は、その後
の処理要求は直接Target Stackに送ります。
Sysplex Distributor利用時
Distributor利用時は
利用時は、Sysplex Exploitationを
Exploitationを利用す
利用す
ることをお勧
ることをお勧めします。(
めします。(後述
。(後述の
後述のUniversal JDBC Driverの
Driverの時
も同様です
同様です。)
です。)
Connect to DB2 for z/OS
using DB2 Universal JDBC Driver Type 4
DB2 V.8.2 NEW!!
Universal JDBC Driverのコンポーネント
Universal JDBC Driverは、DB2 Connectが提供する負荷分
散機能を提供します。
接続プール機能
Sysplex Workload Balancing
Global Transport Object Poolが、db2agentと同等の働きをします。
DB2 ConnectのSysplex Exploitationと同等の機能を提供します。
Connection Concentrator
DB2 ConnectのConnection Concentratorと同等の機能を提供します。
JDBC Driver
Connection Pool
Physical Connection
Global Transport
Object Pool
DB2 for z/OS
DDF
DBM1
DB2 V.8.2 NEW!!
利用条件
DB2 UDB Connect for LUW FixPack 10
WebSphere Application Server バージョン5.1 以上
DB2 Universal JDBC Driverのバージョン
> java com.ibm.db2.jcc.DB2Jcc –version
IBM DB2 JDBC Universal Driver Architecture xxxx
⇒ xxxxが2.7以上であること
WLM for z/OS
DB2 UDB for OS/390® and z/OS バージョン7 以上
DB2 for z/OS 8より前のバージョンでは、XAをサポートしません。
DB2 V.8.2 NEW!!
設定方法
FixPack 10から使用できる新しいプロパティ
DB2 Universal JDBCドライバー
構成プロパティ
(DB2JccConfiguration.propertiesに記述)
db2.jcc.dumpPool
db2.jcc.dumpPoolStatisticsOnSchedule
db2.jcc.dumpPoolStatisticsOnScheduleFile
db2.jcc.maxTransportObjectIdleTime
db2.jcc.maxTransportObjectWaitTime
db2.jcc.maxTransportObjects
db2.jcc.minTransportObjects
省略時値
0 (サマリーの
み)
-1 (統計は作
成しない)
(統計は作成し
ない)
説明
グローバル・トランスポート・プール・イベントの統計のタイプを指定
グローバル・トランスポート・プールの統計が、db2.jcc.dumpPoolStatisticsOnScheduleFile
構成プロパティーに指定されたファイルに書き込まれる頻度を秒単位で指定
グローバル・トランスポート・プールの統計を作成するファイルの名前を指定
未使用のトランスポート・オブジェクトが、グローバル・トランスポート・オブジェクト・プール
内に置かれてからこのプールから削除されるまでの期間を秒数で指定
-1
db2.jcc.maxTransportObjects 値に達した場合に、アプリケーションがトランスポート・オブ
(無制限)
ジェクトを待機する最長期間を秒数で指定
-1
グローバル・トランスポート・オブジェクト・プール内のトランスポート・オブジェクト数の上
(無制限)
限を指定(全てのDataSourceからの接続の合計値)
0
グローバル・トランスポート・オブジェクト・プール内のトランスポート・オブジェクト数の下
(空になり得る) 限を指定
60秒
DB2 Universal JDBCドライバー
DataSourceプロパティ
省略時値
説明
enableConnectionConcentrator
false
(使用しない)
enableSysplexWLB
false
(使用しない)
DB2 Universal JDBC ドライバーの接続コンセントレーター機能を使用可能にするかどう
かを指示。この機能はDB2 UDB for z/OSサーバーへの接続に対してのみ使用可能
DB2 Universal JDBC ドライバーのSysplex ワークロード・バランシング機能を使用可能に
するかどうかを指示。この機能はDB2 UDB for z/OSサーバーへの接続に対してのみ使
用可能
グローバル・トランスポート・オブジェクト・プール内のトランスポート・オブジェクト数の上
限を指定
(特定のDataSourceからの接続のみ)
maxTransportObjects
-1
(無制限)
参考資料
Information Center
WebSphere Application Server Version 6.0.x
DB2 Universal Database
http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp
SIL
「クライアント・リルートとWAS連携の考慮点」 (SIL-05-073N)
http://publib.boulder.ibm.com/infocenter/db2help/index.jsp
DB2 for z/OS
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp
http://www.ibm.com/jp/domino01/mkt/dminfo.nsf/doc/000DB513
Redbook
“DB2 UDB for z/OS Version 8 Performance Topics” (SG24-6465-00)
“Distributed Functions of DB2 for z/OS and OS/390” (SG24-6952-00)
“Squeezing the Most Out of Dynamic SQL with DB2 for z/OS and
OS/390” (SG24-6418-00)
Fly UP