OpenTP1 Version 7

高速トランザクション処理基盤

TP1/EE/Extended Data Cache 使用の手引

解説・手引・文法書

3000-3-F55

目　　次

前書き

はじめに

1.　概要

1.1　XDBの開発背景と特長

1.1.1　XDBの開発背景

1.1.2　XDBの特長

1.2　TP1キャッシュ機能でのXDBの役割

1.2.1　TP1キャッシュ機能とは

1.2.2　XDB使用時の前提OSおよび前提製品

1.2.3　TP1キャッシュ機能使用時のシステム構成と処理の流れ

1.3　XDBの運用サイクル

2.　XDBのアーキテクチャ

2.1　データベースの論理構造

2.1.1　表

2.1.2　インデクス

2.1.3　スキーマ

2.2　表およびインデクスの格納領域（DBエリア）

2.2.1　DBエリアとは

2.2.2　DBエリアの種類

2.2.3　DBエリアの物理構造

2.2.4　DBエリアが作成されるメモリ領域

2.2.5　DBエリアの自動増分

2.3　メモリ上へのデータの展開とデータの保存

2.3.1　メモリ上へのデータの展開

2.3.2　メモリ上のデータの保存

2.4　XDBのトランザクション制御

2.4.1　データベースの更新処理方式

2.4.2　トランザクションの分離レベル

2.4.3　排他の取得期間

2.4.4　SQLエラーに伴うロールバック

2.5　待機系のデータベースへの追い付き反映

2.6　待機系との連携による障害対策

2.6.1　3台構成の場合にTP1/EEのプロセスダウンが発生したときの処理

2.6.2　2台構成の場合にTP1/EEのプロセスダウンが発生したときの処理

3.　データベースの設計

3.1　データベースの設計手順

3.2　表の設計

3.2.1　列に定義できるデータ型

3.2.2　セグメントの再利用の設定

3.3　インデクスの設計

3.3.1　インデクスを定義する列を決めるときの考慮点

3.3.2　単一列インデクスと複数列インデクスの使い分け

3.3.3　ページ内の未使用領域の設定

3.4　DBエリアの設計

3.4.1　DBエリアを設計するときの検討項目と考慮点

3.4.2　ページサイズを決めるときの考慮点

3.4.3　セグメントサイズを決めるときの考慮点

3.4.4　DBエリアの共用メモリ面数を決めるときの検討項目

3.4.5　共用メモリの固定化

3.5　表用DBエリアの容量見積もり

3.6　インデクス用DBエリアの容量見積もり

3.7　作業表用DBエリアの容量見積もり

3.8　マスタディレクトリ用DBエリアの容量見積もり

3.9　ディクショナリ用DBエリアの容量見積もり

4.　性能向上策

4.1　SQLプール機能

4.1.1　SQLプール機能とは

4.1.2　SQLプール機能を効果的に使うには

4.1.3　SQLプールサイズの見積もり

4.1.4　SQLプール機能の効果を確認する方法

4.2　表定義プール機能

4.2.1　表定義プール機能とは

4.2.2　表定義プールサイズの見積もり

4.2.3　表定義プールサイズが適切かどうか確認する方法

4.2.4　表定義情報の一括先読み

4.3　SQLの最適化

4.3.1　表の検索方式

4.3.2　表の結合方式

4.3.3　インデクスの優先順位

4.3.4　作業表を作成するSQL

4.3.5　集合関数の高速処理機能

4.3.6　キースキャンによる列値取得機能

5.　メモリ所要量

5.1　XDB用ワーク領域（XDBPOOL）の見積もり

5.1.1　計算式で使用する変数

5.1.2　計算式

5.2　更新バッファが使用するメモリの見積もり

5.3　TP1/EEプロセスで確保するメモリの見積もり

5.4　システムワーク領域の最大サイズの見積もり

5.5　更新ログの見積もり

6.　環境設定

6.1　環境設定手順

6.2　インストール前の確認

6.2.1　カーネルパラメタの調整

6.3　XDBのインストール

6.4　TP1/Server Baseのユーザサービス定義の設定

形式

オペランドの説明

6.5　XDBサービス定義の作成

形式

オペランドの説明

注意事項

6.6　定義系SQL文記述ファイルの作成（表およびインデクスの定義）

6.7　インポート制御ファイルおよびエクスポート制御ファイルの作成

記述規則

インポート制御ファイルの作成

エクスポート制御ファイルの作成

6.8　入力データファイルの準備

6.8.1　入力データファイルの形式

6.8.2　エクスポートファイルの形式

7.　運用

7.1　運用項目一覧

7.2　XDBの開始と終了

7.2.1　XDBの開始

7.2.2　XDBの終了

7.3　統計情報の取得

7.3.1　TASKTM情報に出力されるXDBに関する情報

7.3.2　システム統計情報に出力されるXDBに関する情報

7.4　XDBトレース情報の取得

7.4.1　XDBトレース情報とは

7.4.2　XDBトレース情報を取得するための準備

7.4.3　XDBトレース情報の表示方法

7.5　SQLトレース情報，パラメタトレース情報，およびSQL単位情報の表示

7.5.1　SQLトレース情報，パラメタトレース情報，およびSQL単位情報の表示方法

7.5.2　SQLトレース情報に表示される項目

7.5.3　パラメタトレース情報に表示される項目

7.5.4　SQL単位情報に表示される項目

7.5.5　留意事項

7.6　アクセスパス情報の表示

7.6.1　アクセスパス情報の表示方法

7.6.2　アクセスパス情報に表示される項目

7.6.3　アクセスパス情報の表示例

7.7　表またはインデクスの追加手順

8.　チューニング

8.1　チューニングの手順

8.2　DBエリアの格納効率に関するチューニング

8.2.1　表用DBエリアの格納効率に関するチューニング

8.2.2　インデクス用DBエリアの格納効率に関するチューニング

8.3　インデクス性能に関するチューニング

8.4　SQLに関するチューニング

9.　トラブルシュート

9.1　トラブルシュート情報の一覧

9.2　実行系孤立状態になったときの対処方法

10.　運用コマンド

運用コマンドの一覧

eetrbwtor（メッセージへの応答）

eexdbdefchk（XDBサービス定義のチェック）

eexdbdump（コアファイルからのXDBトレース情報の表示）

eexdbed（XDBトレース情報の表示）

eexdbexport（表データのエクスポート）

eexdbexttbl（メモリダンプファイルからの表データの抽出）

eexdbfput（XDBトレース情報のファイルへの出力）

eexdbimport（表データのインポート）

eexdbmemdmp（メモリダンプの出力）

eexdbrasget（保守資料の取得）

eexdbshmrm（共用メモリの解放）

eexdbsql（SQLの実行）

eexdbsta（データベースの状態解析）

付録

付録A　ディクショナリ表

付録A.1　ディクショナリ表の一覧

付録A.2　SQL_TABLES表の内容

付録A.3　SQL_COLUMNS表の内容

付録A.4　SQL_INDEXES表の内容

付録A.5　SQL_DIV_TABLE表の内容

付録A.6　SQL_DIV_INDEX表の内容

付録A.7　SQL_DBAREAS表の内容

付録A.8　ディクショナリ表に定義されているインデクス

付録B　XDBの最大値と最小値

付録C　用語解説

索引

[他社商品名称に関する表示]

All Rights Reserved. Copyright (C) 2008, Hitachi, Ltd.

前書き

■ 対象製品

P-9V64-9411　 uCosminexus TP1/EE/Extended Data Cache　 01-01（適用OS：Red Hat Enterprise Linux 5.1（IPF））

このプログラムプロダクトのほかにも，このマニュアルをご利用になれる場合があります。詳細は「リリースノート」でご確認ください。
この製品は，ISO9001およびTickITの認証を受けた品質マネジメントシステムで開発されました。

■ 輸出時の注意

本製品を輸出される場合には，外国為替および外国貿易法ならびに米国の輸出管理関連法規などの規制をご確認の上，必要な手続きをお取りください。
なお，ご不明な場合は，弊社担当営業にお問い合わせください。

■ 商標類

Linuxは，Linus Torvalds氏の日本およびその他の国における登録商標または商標です。
Red Hatは，米国およびその他の国でRed Hat, Inc. の登録商標若しくは商標です。

■ 発行

2008年11月（第1版）3000-3-F55

■ 著作権

All Rights Reserved. Copyright (C) 2008, Hitachi, Ltd.

はじめに

このマニュアルは，プログラムプロダクト　P-9V64-9411　uCosminexus TP1/EE/Extended Data Cache（以降，XDBと表記します）のシステム構築方法および運用方法について説明したものです。

＜はじめにの構成＞

対象読者

マニュアルの構成

関連マニュアル

読書手順

図中で使用する記号

文法の記号

計算式の記号

このマニュアルでの表記

略語一覧

常用漢字以外の漢字の使用について

KB（キロバイト）などの単位表記について

対象読者

高速データ処理基盤であるXDBを使ったシステムを構築・運用するデータベース管理者の方を対象としています。

なお，このマニュアルは，次に示す知識があることを前提にして説明されています。

データベース管理者レベルの知識

Linux(R)のシステム管理の基礎的な知識

SQLの基礎的な知識

TP1/Server BaseおよびTP1/Server Base Enterprise Optionの基礎的な知識

マニュアルの構成

このマニュアルは，次に示す章と付録から構成されています。

第1章　概要

高速データ処理基盤であるXDBの開発背景と特長，TP1キャッシュ機能でのXDBの役割，およびXDBの一般的な運用サイクルについて説明しています。

第2章　XDBのアーキテクチャ

XDBのデータベースの論理構造や，XDBの処理方式について説明しています。

第3章　データベースの設計

表，インデクス，およびDBエリアを設計するときの考慮点と，DBエリアの容量見積もり方法について説明しています。

第4章　性能向上策

SQLの処理性能を向上させる方法について説明しています。

第5章　メモリ所要量

XDBが使用するメモリ所要量の求め方について説明しています。

第6章　環境設定

XDBの環境設定について説明しています。

第7章　運用

XDBの運用方法について説明しています。

第8章　チューニング

チューニングで使用する情報と，チューニングの際に確認する項目について説明しています。

第9章　トラブルシュート

トラブルシュート情報の一覧と実行系孤立状態になったときの対処方法について説明しています。

第10章　運用コマンド

XDBの運用コマンドについて説明しています。

付録A　ディクショナリ表

XDBのディクショナリ表とディクショナリ表に定義されているインデクスについて説明しています。

付録B　XDBの最大値と最小値

XDBの最大値と最小値について説明しています。

付録C　用語解説

このマニュアルで使用している用語について説明しています。

関連マニュアル

読書手順

図中で使用する記号

このマニュアルの図中で使用する記号を，次のように定義します。

文法の記号

（1）文法記述記号

定義文，制御文，コマンドのオプションおよび引数の指定方法について説明する記号です。

文法記述記号
意味

〔　　　〕
この記号で囲まれている項目は省略できることを意味しています。

（例）〔-ｒ ランID〕

この場合，-rオプションの指定を省略できます。

…
この記号で示す直前の項目を繰り返し指定できることを意味しています。

（例）eexdbshmrm -g サービスグループ名〔,サービスグループ名〕…

この場合，eexdbshmrmコマンドにサービスグループ名を複数指定できます。

｜
この記号で区切られた項目は選択できることを意味しています。

（例）〔-p｜-l〕

この場合，-pまたは-lのどちらかを指定できます。

｛｛　　　｝｝
この記号で囲まれた複数の項目が一つの繰り返し項目の単位であることを意味しています。

（例）｛｛eexdbarea -n DBエリア名｝｝

これは，次のように繰り返し指定できることを示します。

eexdbarea -n DBエリア名

eexdbarea -n DBエリア名

｛　　　｝
この記号で囲まれている複数の項目のうち，一つだけ選択できることを意味しています。

（例）｛syntax｜detail｜all｝

この場合，syntax，detail，allのうち，どれか一つを指定できます。

＿
（下線）
この記号で示す項目は，該当オペランド，またはオプションを省略した場合に仮定される値を意味しています。

（例）xdb_memory_fixed = Y | N

この場合，xdb_memory_fixedオペランドを省略すると，Yが仮定されます。

（2）属性表示記号

定義文，制御文，コマンドのオプションおよび引数に指定できる値の範囲を説明する記号です。

属性表示記号 | 意味
～ | この記号のあとに指定値の属性を示します。
《　　》 | 指定を省略したときに仮定される値を示します。
〈　　〉 | 指定値の構文要素を示します。
((　　)) | 指定値の指定範囲を示します。

（3）構文要素記号

定義文，制御文，コマンドのオプションおよび引数に指定できる文字または値を説明する記号です。

構文要素記号
意味

〈英字〉
アルファベット（A～Z，a～z）と_（下線）

〈英数字〉
英字と数字（0～9）

〈符号なし整数〉
数字列（0～9）

〈16進数〉
数字（0～9），A～F，およびa～f

〈識別子〉
先頭がアルファベットの英数字列

〈文字列〉
"（二重引用符）を除く任意の文字の配列※

〈パス名〉
記号名称，/，および　.（ピリオド）
ただし，パス名は使用するOSに依存します。

〈DBエリア名〉
アルファベット（A～Z，a～z），数字（0～9），-（ハイフン），および_（下線）
ただし，先頭はアルファベットにする必要があります。

使用上の注意

すべて半角文字を使用してください。

注※

定義文，制御文，およびコマンドのオプションに文字列を指定する場合は，指定値全体を "（二重引用符）で囲む必要があります。この場合，指定値全体を囲む二重引用符は指定値には含まれません。また，特に断りがないかぎり，二重引用符は指定値の中の文字として使用できません。

計算式の記号

このマニュアルで使用する計算式の記号の意味を次に示します。

記号
意味

↑↑
計算結果の値を小数点以下で切り上げます。

（例）↑34÷3↑

この場合，計算結果は12となります。

↓↓
計算結果の値を小数点以下で切り捨てます。

（例）↓34÷3↓

この場合，計算結果は11となります。

MAX
括弧内の項目のうち，最も大きい値を選びます。

（例）MAX（3，8＋2，2×2）

この場合，計算結果は10となります。

MIN
括弧内の項目のうち，最も小さい値を選びます。

（例）MIN（3，8＋2，2×2）

この場合，計算結果は3となります。

このマニュアルでの表記

このマニュアルでは，製品名称を省略して表記しています。製品名称と，このマニュアルでの表記を次に示します。

製品名称 | このマニュアルでの表記
Itanium(R) Processor Family | IPF
uCosminexus TP1/EE/Extended Data Cache | XDB
uCosminexus TP1/EE/Extended Transaction Controller | XTC
uCosminexus TP1/EE/Message Control Extension | MCP
uCosminexus TP1/Server Base | TP1/Server Base
uCosminexus TP1/Server Base Enterprise Option | TP1/EE

略語一覧

このマニュアルで使用する英略語の一覧を次に示します。

英略語 | 英字での表記
AP | Application Programming
API | Application Programming Interface
CR | Carriage Return
CSV | Comma Separated Value
DB | Database
DBMS | Database Management System
EOF | End of File
ID | Identifier
LRU | Least Recently Used
NL | New Line
OS | Operating System
RPC | Remote Procedure Call
SPP | Service Providing Program
SUP | Service Using Program
TAR | Tape Archival and Retrieval format
UAP | User Application Program

常用漢字以外の漢字の使用について

このマニュアルでは，常用漢字を使用することを基本としていますが，次に示す用語については，常用漢字以外の漢字を使用しています。

個所（かしょ）　必須（ひっす）

KB（キロバイト）などの単位表記について

1KB（キロバイト），1MB（メガバイト），1GB（ギガバイト），1TB（テラバイト）はそれぞれ1,024バイト，1,024²バイト，1,024³バイト，1,024⁴バイトです。

1.　概要

この章では，高速データ処理基盤であるXDBの開発背景と特長，TP1キャッシュ機能でのXDBの役割，およびXDBの一般的な運用サイクルについて説明します。

＜この章の構成＞

1.1　XDBの開発背景と特長

1.2　TP1キャッシュ機能でのXDBの役割

1.3　XDBの運用サイクル

1.1　XDBの開発背景と特長

ここでは，高速データ処理基盤であるXDBの開発背景と特長について説明します。

＜この節の構成＞

1.1.1　XDBの開発背景

1.1.2　XDBの特長

1.1.1　XDBの開発背景

証券取引所やオンライン証券など，金融・証券系の電子商取引が行われるシステムでは，1日に処理するトランザクション量が以前に比べて飛躍的に増加しています。今後も，株取引の小口化やアルゴリズム取引の浸透によって，トランザクション量の増加傾向は続くと予想されています。

そのため，今まで以上に，オンラインシステムで処理するデータを管理するデータベースに対するディスクアクセスをどう減らすかが，チューニングの最重要項目の一つとなっています。しかし，システム内の負荷が高くなる個所では，ディスクアクセスのチューニングだけでは，システムの処理要求を満たせないケースも出てきています。

この要求に応えるために，オンラインシステムで処理するデータをすべてメモリ上に展開し，トランザクションを高速に処理するインメモリデータ処理技術を導入したXDBが開発されました。

XDBでは，64ビットOSの大容量メモリ空間に，アプリケーションがアクセスするすべてのデータを配置することで，ディスクへのアクセスをなくしています。これによって，ディスクアクセスによるボトルネックが解消され，トランザクション処理のパフォーマンスが大きく向上します。

XDBの開発によって，大量のトランザクションを高速に処理するソリューションが実現できるようになります。

参考

インメモリデータ処理技術とは，オンラインシステムやバッチシステムなどで処理するデータを，すべてメモリ上で高速に処理する技術のことです。この技術によって，ハードディスクなど外部記憶装置とのやり取りに掛かる時間を削減できます。

1.1.2　XDBの特長

XDBの特長を次に示します。

＜この項の構成＞

(1)　ディスクアクセスレスによる性能向上

(2)　TP1/EEと同一プロセス内にデータを展開

(3)　トランザクション分離レベルにREAD COMMITTEDを採用

(4)　クラスタリングによる高信頼性と高可用性の実現

(5)　負荷の少ないデータベース運用

(1)　ディスクアクセスレスによる性能向上

XDBの最大の特長は，ディスクアクセスレスによる性能向上です。

XDBでは，処理するデータすべてをメモリ上に置くため，ディスク型DBの課題であった，ディスクアクセスに掛かるオーバヘッドがなくなります。これによって，トランザクションの処理性能が大きく向上します。

(2)　TP1/EEと同一プロセス内にデータを展開

TP1/EEと同一のプロセス内にデータを展開することによって，データアクセス時に他プロセスとの通信を発生させません。これによって，OpenTP1とDBMS（リソースマネジャ）の間で発生する通信オーバヘッドを削減しています。

(3)　トランザクション分離レベルにREAD COMMITTEDを採用

XDBでは性能面を重視し，トランザクションの分離レベルにREAD COMMITTEDを採用しています。また，排他制御を行う区間をコミット処理時に限定し，排他制御に掛かるオーバヘッドを削減しています。

(4)　クラスタリングによる高信頼性と高可用性の実現

XDBでは，データベースを三重化して障害の発生に備えています。仮に実行系で障害が発生しても，2台ある待機系のうち1台を実行系に切り替えて処理を継続できます。

また，実行系のデータベースの更新内容を待機系のデータベースに逐次反映しています。これによって，系の切り替え（フェールオーバ）に掛かる時間を短縮し，オンライン停止時間を最小限に抑えられます。

(5)　負荷の少ないデータベース運用

XDBでは，データベースの更新履歴（ログ）の管理や，バックアップの取得などの運用が必要ありません。また，バッファプールやチェックポイントなどのチューニングも必要ないため，その分データベースの運用に掛かる負荷を少なくすることができます。

1.2　TP1キャッシュ機能でのXDBの役割

XDBは，大量トランザクションの高速処理を実現するTP1キャッシュ機能のデータベースとして，TP1/EE下でXTCと連携して動作します。

ここでは，TP1キャッシュ機能でのXDBの役割について説明します。

参考

マニュアル「TP1/EE/Extended Transaction Controller 使用の手引」の「TP1キャッシュ機能の概要」の説明を読んだあとに，この節の内容を読むことをお勧めします。

＜この節の構成＞

1.2.1　TP1キャッシュ機能とは

1.2.2　XDB使用時の前提OSおよび前提製品

1.2.3　TP1キャッシュ機能使用時のシステム構成と処理の流れ

1.2.1　TP1キャッシュ機能とは

TP1キャッシュ機能とは，インメモリデータ処理技術を中心とした高速トランザクション処理機能の総称です。

TP1キャッシュ機能は，TP1/Server Base Enterprise Option（TP1/EE）を前提とする機能です。高速メッセージ処理基盤であるuCosminexus TP1/EE/Extended Transaction Controller（XTC）と，高速データ処理基盤であるuCosminexus TP1/EE/Extended Data Cache（XDB）の2製品から構成されます。

TP1キャッシュ機能を使用することで，トランザクション処理の高速化と，高信頼性，高可用性を同時に実現するオンライントランザクション処理システムを構築できます。TP1キャッシュ機能の詳細については，マニュアル「TP1/EE/Extended Transaction Controller 使用の手引」を参照してください。

1.2.2　XDB使用時の前提OSおよび前提製品

XDBを使用するには，次に示す前提OSおよび前提製品が必要です。対応バージョンについてはリリースノートをご確認ください。

＜この項の構成＞

(1)　前提OS

(2)　前提製品

(3)　関連製品

(1)　前提OS

Red Hat Enterprise Linux 5.1（IPF）

(2)　前提製品

P-9V64-2131　uCosminexus TP1/Server Base

P-9V64-2A21　uCosminexus TP1/Server Base Enterprise Option

P-9V64-9211　uCosminexus TP1/EE/Extended Transaction Controller

これらの製品を動作させる場合には，次に示す製品が必要です。

P-9V2C-E111　HAモニタ

(3)　関連製品

XDBでUAPを開発する場合には，次に示す製品が必要です。

P-9V36-1211　COBOL2002 Net Server Suite

1.2.3　TP1キャッシュ機能使用時のシステム構成と処理の流れ

障害が発生したときにメモリ上のデータが消失しないように，システムを多重化して信頼性と可用性を確保しています。仮に，障害が発生しても，バックアップ用のシステム（待機系のシステム）で処理を継続できます。

TP1キャッシュ機能使用時のシステム構成と処理の流れを次の図に示します。

図1-1　TP1キャッシュ機能使用時のシステム構成と処理の流れ

説明

システム構成

CLサーバは，実行系1台，待機系2台の3台構成とします。XDBはCLサーバの各サーバに配置し，それぞれのマシンのメモリ上にデータベースを作成してデータベースを三重化します。

なお，オンライン中に業務処理を行っている系を実行系，待機している系を待機系といいます。

処理の流れ

送信元のHAサーバから，マルチキャストによってCLサーバの各サーバにメッセージ（処理要求）が送信されます。送信されたメッセージに従って，データベースの更新処理が実行系で行われます。

実行系でトランザクションがコミットされると，その更新内容が待機系のデータベースに逐次反映されます。

ここでは，入力メッセージの送信元としてHAサーバを例にしていますが，入力メッセージの送信元をHAサーバ以外にすることもできます。詳細については，マニュアル「TP1/EE/Extended Transaction Controller 使用の手引」の「TP1キャッシュ機能使用時のサーバ構成」を参照してください。

参考

CLサーバの実行系がプロセスダウンした場合でも，未処理のメッセージからすぐにトランザクションを開始できるように，CLサーバの待機系でもメッセージを受信しています。障害発生時に，HAサーバから再度メッセージを送信する必要がなくなるため，その分，系の切り替えに掛かる時間を短縮できます。

■HAサーバ

HAサーバとは，TP1キャッシュ機能使用時に，メッセージやRPCの送信側となるサーバです。それぞれのサーバにXTCを配置します。

HAサーバは，一般的なクラスタ構成とし，実行系1台，待機系1台の2台で構成します。

■CLサーバ

CLサーバとは，TP1キャッシュ機能使用時に，メッセージやRPCの受信側となって，高速データ処理を行うサーバです。それぞれのサーバにXTCおよびXDBを配置します（XDBを配置したサーバはCLサーバにする必要があります）。

CLサーバは，HAモニタのマルチスタンバイ機能を使用したクラスタ構成として，実行系1台，待機系2台の3台で構成します。

1.3　XDBの運用サイクル

XDBの開始時にメモリ上にデータベースが作成されます。XDBの稼働中はメモリ上のデータが検索・更新されます。そして，XDBの終了時に，更新されたメモリ上のデータがディスク上のファイルに出力されます。

XDBの開始から終了までの運用の流れを次の図に示します。

図1-2　XDBの開始から終了までの運用の流れ

説明

XDBの開始時，XDBによってディスク上にあるファイル中のデータが，ユーザの定義に従ってメモリ上のデータベースにインポートされます。実行系のデータベースにインポートされたデータは待機系のデータベースにコピーされます。

XDBの稼働中は，メモリ上のデータが検索および更新されます。このとき，ディスクアクセスは発生しません。

XDBの終了時，XDBによって更新されたメモリ上のデータが，ユーザの定義に従ってディスク上のファイルにエクスポートされます。このファイルを次回のXDB開始時に入力できます。

XDBが終了すると，メモリ上のデータベースはなくなり，XDBを開始するとメモリ上にデータベースが作成し直されます。

＜この節の構成＞

(1)　ディスク型DBとの運用の違い

(2)　XDBのデータベース管理者が行う主な運用

(1)　ディスク型DBとの運用の違い

一般的なディスク型DBとの主な運用の違いを次に示します。

(a)　オンライン開始ごとに表やインデクスを定義

XDBを開始するたびに，表やインデクスが定義されたファイルを読み込み，データベースを作成します。開始ごとにデータベースが作成し直されるため，表やインデクスの再編成などのメンテナンスは必要ありません。

(b)　オンライン稼働中の定義変更不可

XDBでは，あらかじめ表やインデクスを定義したファイルを使用して，データベースを作成します。そのため，XDBの稼働中に，表またはインデクスの定義を追加，変更，削除できません。

(c)　データベースの更新履歴の取得や定期的なバックアップが不要

XDBでは，コミットと同時にメモリ上のデータを確定させます。また，CLサーバの実行系のデータベースの更新内容は，XTCによって逐次，待機系に転送され，待機系でデータベースの追い付き反映処理が行われます（CLサーバの実行系と待機系の間の整合性が保証されます）。

CLサーバの実行系と待機系の間の整合性が保証されることによって，待機系のデータベースがバックアップの位置づけになります。そのため，定期的にバックアップを取得する必要はありません。

また，ロールバック，ロールフォワード時に使用するデータベースの更新履歴（ログ）は取得しません。そのため，ログの管理も不要となります。

(2)　XDBのデータベース管理者が行う主な運用

XDBのデータベース管理者が行う主な運用を次に示します。

システムの稼働状況の監視

メモリ上に作成されたデータベースの利用状況の監視

稼働環境を設定するパラメタ（XDBサービス定義）の変更

チューニング情報の取得

チューニング

トラブルシュート情報の取得

障害の対処

2.　XDBのアーキテクチャ

この章では，XDBのデータベースの論理構造や，XDBの処理方式について説明します。

＜この章の構成＞

2.1　データベースの論理構造

2.2　表およびインデクスの格納領域（DBエリア）

2.3　メモリ上へのデータの展開とデータの保存

2.4　XDBのトランザクション制御

2.5　待機系のデータベースへの追い付き反映

2.6　待機系との連携による障害対策

2.1　データベースの論理構造

ここでは，XDBのデータベースの論理構造（表，インデクス，およびスキーマ）について説明します。

＜この節の構成＞

2.1.1　表

2.1.2　インデクス

2.1.3　スキーマ

2.1.1　表

XDBのデータベースは，行と列から構成されている表形式のリレーショナルデータベースです。表の横方向を行，縦方向を列といい，各行の同じ列には同じ形式のデータが格納されます。

一つの行は一つ以上の列から構成されていて，表を操作するときの単位となります。

列には列名を付けます。表にアクセスするときは，この列名によって行の中の位置を識別します。

2.1.2　インデクス

表を検索するためのキーとして列に付けた索引のことをインデクスといいます。XDBでは，B-tree構造のインデクスが使われています。

インデクスはUAPの性能に大きく影響するため，どの列にインデクスを定義するかを十分に検討する必要があります。詳細については，「3.3　インデクスの設計」を参照してください。

2.1.3　スキーマ

表やインデクスの所有者を表す論理的な集合をスキーマといい，1ユーザに対して一つ作成されます。XDBの開始時にスキーマは自動的に作成されるため，XDBのユーザがスキーマを定義する必要はありません。

XDBの場合，XDBに接続するユーザのユーザ名（スキーマ名）は常にXDBUSERとなります。XDBの開始時にXDBUSERのスキーマが自動的に作成されます。

なお，XDBの開始時，XDBUSERのスキーマのほかに，ディクショナリ表を所有するスキーマ（スキーマ名：MASTER）が自動的に作成されます。そのため，ディクショナリ表を検索する場合は，スキーマ名にMASTERを指定する必要があります。

MASTERのスキーマに対して，ユーザは任意の表やインデクスを定義できません。

■スキーマ名とは

XDBのユーザを一意に識別するために付けられた名称のことをスキーマ名といいます。1ユーザに対して一つのスキーマ名が与えられます。一般的には，ユーザ名のようなものと考えてください。

2.2　表およびインデクスの格納領域（DBエリア）

ここでは，表およびインデクスを格納する論理的な領域（DBエリア）について説明します。

＜この節の構成＞

2.2.1　DBエリアとは

2.2.2　DBエリアの種類

2.2.3　DBエリアの物理構造

2.2.4　DBエリアが作成されるメモリ領域

2.2.5　DBエリアの自動増分

2.2.1　DBエリアとは

XDBには，表およびインデクスを格納する論理的な領域があります。この領域をDBエリアといいます。一つのDBエリアには，複数の表またはインデクスを格納できます。ただし，次に示すような形で表およびインデクスを格納することはできません。

表とインデクスを同じDBエリアに格納できません。

一つの表または一つのインデクスを複数のDBエリアにわたって格納できません。

DBエリアと表，インデクスの関係を次の図に示します。

図2-1　DBエリアと表，インデクスの関係

2.2.2　DBエリアの種類

DBエリアには幾つかの種類があり，用途ごとに各DBエリアを使い分ける必要があります。DBエリアの種類を次の表に示します。

表2-1　DBエリアの種類

項番
DBエリアの種類
説明

1
表用DBエリア
表を格納するDBエリアです。

2
インデクス用DBエリア
インデクスを格納するDBエリアです。

3
作業表用DBエリア
SQLの実行時にXDBが作成する作業表を格納するDBエリアです。
作業表については，「4.3.4　作業表を作成するSQL」を参照してください。

4
マスタディレクトリ用DBエリア
システムの内部情報を格納するDBエリアです。

5
ディクショナリ用DBエリア
ディクショナリ表およびディクショナリ表のインデクスを格納するDBエリアです。
ディクショナリ表については，「付録A　ディクショナリ表」を参照してください。

XDBのユーザは，作成する表やインデクス，および実行するSQLを考慮して，DBエリアを設計し，作成する必要があります。DBエリアの設計については，「3.4　DBエリアの設計」を参照してください。

なお，マスタディレクトリ用DBエリアとディクショナリ用DBエリアは，XDBの開始時に自動的に作成されるため，XDBのユーザがこれらのDBエリアを作成する必要はありません。

2.2.3　DBエリアの物理構造

DBエリアは，ページとセグメントという単位から構成されています。DBエリアの物理構造を次の図に示します。

図2-2　DBエリアの物理構造

このようにDBエリアは複数のセグメントから構成されています。セグメントは複数のページから構成されています。

＜この項の構成＞

(1)　セグメント

(2)　ページ

(1)　セグメント

セグメントは，表やインデクスのデータを格納するときの最小単位です。そのため，一つのセグメントに複数の表，または複数のインデクスを格納することはできません。セグメントと表，インデクスの関係を次の図に示します。

図2-3　セグメントと表，インデクスの関係

参考

作業表用DBエリアは，ほかのDBエリアと構造が異なり，セグメント単位ではなくページ単位に管理されます。

なお，セグメントには次の表に示す種類があります。

表2-2　セグメントの種類

項番
セグメントの種類
説明
該当するDBエリアの種類

1
表
基本行用セグメント
基本行用ページ※を割り当てるセグメントです。

表用DBエリア

ディクショナリ用DBエリア

2
インデクス
上位ページ用セグメント
上位ページを割り当てるセグメントです。

インデクス用DBエリア

ディクショナリ用DBエリア

3
下位ページ用セグメント
リーフページ，または行IDリストページを割り当てるセグメントです。

注※

基本行を格納するページを基本行用ページといい，分岐行を格納するページを分岐行用ページといいます。

■基本行とは

通常，1行のデータは同一ページに格納されますが，可変長のデータ型などを使用しているときは，1行のデータサイズが1ページのサイズより大きくなることがあります。この場合，複数のページにデータを分割して格納します。このとき，別ページに格納された行を分岐行といい，その分岐先の情報を格納する行を基本行といいます。

XDBでは，ユーザが作成する表の列のデータ型に，可変長のデータ型をサポートしていないため，ユーザが作成する表では分岐行が発生することはありません。したがって，マニュアル中では，基本行は行と読み替えてください。分岐行についての説明は参考情報としてお読みください。

なお，ディクショナリ表では可変長のデータ型（VARCHAR）をサポートしているため，分岐行が発生することがあります。

参考

■セグメントが確保されるタイミング

表用DBエリアのセグメントは，表に行が挿入されたときに確保されます。表の定義時（CREATE TABLE文の実行時）には確保されません。行の追加が繰り返されて，確保済みセグメントに空きページがなくなった場合に，新規セグメントが確保されます。

インデクス用DBエリアのセグメントは，インデクスの定義時（CREATE INDEX文の実行時）に，上位ページ用セグメントと下位ページ用セグメントが一つずつ確保されます。そのあとは，表の場合と同様に，インデクスキーの増加に伴い，必要に応じてセグメントが確保されます。

■セグメントが解放されるタイミング

確保されたセグメントは次に示すタイミングで解放されます。

eexdbimportコマンドで表データをインポートしたとき（作成モードを指定した場合に限ります）

(2)　ページ

ページは，XDBが管理する領域の最小単位です。ページには次に示す三つの種類があります。

(a)　データページ

表データを格納するページです。

(b)　インデクスページ

インデクスのキー値を格納するページです。インデクスページは上位ページ，下位ページ，行IDリストページに分類されます。

XDBのインデクスはB-tree構造になっています。B-tree構造中の最上位のインデクスページをルートページ，中間のインデクスページを中間ページ，最下位のインデクスページをリーフページといいます。上位ページとはルートページと中間ページのことで，下位ページとはリーフページのことです。

ルートページと中間ページには下段のページの情報が格納されています。また，リーフページには各インデクスのキー値とそのキー値に対応する行の格納位置が格納されています。

行IDリストページは，リーフページ中の特定のキー値が256以上重複した場合，そのキー値専用のページとして作成されます。用途はリーフページと同様で，キー値に対応する表中の行の格納位置を管理します。

(c)　ディレクトリページ

DBエリアに関する管理情報を格納するページです。

参考

■ページが確保されるタイミング

表用DBエリアのページは，表に行が挿入されたときに確保されます。表の定義時（CREATE TABLE文の実行時）には確保されません。行の追加が繰り返されて，確保済みページが満杯になった場合に，新規ページが確保されます。

インデクス用DBエリアのページは，インデクスの定義時（CREATE INDEX文の実行時）に，ルートページとリーフページが一つずつ確保されます。そのあとは，インデクスページスプリットが発生するたびに新規ページが確保されます。

インデクスページスプリットについては，「3.3.3(1)ページ内の未使用領域とは」を参照してください。

■ページが解放されるタイミング

表用DBエリアの場合，確保されたページは次に示すタイミングで解放され，未使用ページとなります。

セグメントが解放された場合
セグメント内の全ページが解放されます。

行の削除によってページ内の全データが削除された場合
そのページが解放されます。

なお，インデクス用DBエリアのページは，XDBの稼働中に解放されることはありません。

2.2.4　DBエリアが作成されるメモリ領域

DBエリアの種類によって，DBエリアが作成されるメモリ領域や，領域の確保および解放タイミングが異なります。

＜この項の構成＞

(1)　作業表用DBエリア以外のDBエリアの場合

(2)　作業表用DBエリアの場合

(1)　作業表用DBエリア以外のDBエリアの場合

XDBの開始時に，DBエリアが共用メモリ上に作成されます。

また，DBエリアの自動増分時にも，必要となる分の共用メモリが確保されます。DBエリアの自動増分については，「2.2.5　DBエリアの自動増分」を参照してください。

なお，一度確保された共用メモリはXDBを終了しても解放されません。詳細については，「2.3.2　メモリ上のデータの保存」を参照してください。

(2)　作業表用DBエリアの場合

作業表用DBエリアはほかのDBエリアと異なり，プロセス固有メモリ上に作成されます。XDBの開始時にはプロセス固有メモリは確保されません。作業表を作成するSQLが実行されたときに，プロセス固有メモリは動的に確保されます。

作業表を作成するSQLが終了したとき，または同期点処理が行われたときに，確保したプロセス固有メモリは解放されます。

2.2.5　DBエリアの自動増分

データの追加や，インデクスページスプリットなどによって，DBエリアの容量が不足した場合にXDBが共用メモリを確保し，DBエリアの容量を自動的に増分します。これをDBエリアの自動増分といいます。DBエリアの自動増分で，一度に増分する容量は共用メモリ1面の大きさです。

DBエリアの自動増分の概要を次の図に示します。

図2-4　DBエリアの自動増分の概要

共用メモリ1面の意味については，「3.4.4　DBエリアの共用メモリ面数を決めるときの検討項目」を参照してください。

共用メモリ1面の大きさは，XDBサービス定義のeexdbareaオペランドの-lオプションで指定します。XDBサービス定義については，「6.5　XDBサービス定義の作成」を参照してください。

2.3　メモリ上へのデータの展開とデータの保存

XDBは，XDBの開始時に共用メモリ上にデータベースを作成してデータを展開し，XDBの終了時に共用メモリ上のデータをファイルに出力して保存します。

ここでは，XDBの開始時に行われる共用メモリ上へのデータ展開処理と，XDBの終了時に行われる共用メモリ上のデータのファイルへの保存処理について説明します。

＜この節の構成＞

2.3.1　メモリ上へのデータの展開

2.3.2　メモリ上のデータの保存

2.3.1　メモリ上へのデータの展開

XDBを開始するときに，XDBは共用メモリ上にデータベースを作成してデータを展開します。この処理をインポートといいます。

共用メモリ上にデータを展開するときの処理の流れを次の図に示します。

図2-5　共用メモリ上にデータを展開するときの処理の流れ

説明

XDBサービス定義のeexdbareaオペランドの指定に従って，DBエリアを共用メモリ上に作成します。

定義系SQL文記述ファイルの指定に従って，表およびインデクスを定義します。

入力データファイルを読み込んで，データを表用DBエリアにインポートします。インデクスが定義されている場合は，インデクスのデータを作成してインデクス用DBエリアにインポートします。

■XDBサービス定義のeexdbareaオペランド

DBエリアの定義を行い，DBエリアの種類や，大きさを設定するためのオペランドです。詳細については，「6.5　XDBサービス定義の作成」を参照してください。

■定義系SQL文記述ファイル

CREATE TABLE文とCREATE INDEX文を記述したファイルです。ユーザは，XDBを開始する前にこのファイルを作成しておく必要があります。

詳細については，「6.6　定義系SQL文記述ファイルの作成（表およびインデクスの定義）」を参照してください。

■入力データファイル

表データを格納したCSV形式のファイルです。

XDBは，インポート制御ファイルの指定に従って，入力データファイルを読み込みます。インポート制御ファイルとは，どの表にどの入力データファイルを読み込むかという情報を定義したファイルです。ユーザは，XDBを開始する前にインポート制御ファイルを作成しておく必要があります。

インポート制御ファイルの詳細については，「6.7　インポート制御ファイルおよびエクスポート制御ファイルの作成」を参照してください。

XDBは，ここで説明した流れに従って，XDBを開始するたびに共用メモリ上にデータベースを作成してデータを展開します。

2.3.2　メモリ上のデータの保存

XDBを終了するときに，共用メモリ上のデータをファイルに出力して保存します。この処理をエクスポートといい，出力先のファイルをエクスポートファイルといいます。エクスポートファイルは，次回のXDB開始時の入力データファイルとして使用します。

共用メモリ上のデータの保存処理を次の図に示します。

図2-6　共用メモリ上のデータの保存処理

説明

XDBの終了時，表用DBエリア内のデータをエクスポートファイルに出力します。インデクス用DBエリア内のデータは出力されません。

エクスポートファイルへの出力は実行系だけで行われます。待機系では行われません。

■エクスポートファイル

XDBの終了時，表用DBエリア内のデータを出力するファイルです。一つの表に対して，一つのエクスポートファイルが作成されます。

XDBは，エクスポート制御ファイルの指定に従って，データをエクスポートファイルに出力します。エクスポート制御ファイルとは，どの表のデータをどのファイルに出力するかという情報を定義したファイルです。ユーザは，XDBを開始する前にエクスポート制御ファイルを作成しておく必要があります。

エクスポート制御ファイルの詳細については，「6.7　インポート制御ファイルおよびエクスポート制御ファイルの作成」を参照してください。

次に示す理由によって，いったん確保された共用メモリはXDBの終了時に通常は解放されません。

次回のXDBの開始時にDBエリアを作成するための共用メモリが確保できなくなるのを防ぐため

異常終了時に共用メモリの内容を障害情報として取得できるようにするため

これらの理由のため，できる限り共用メモリを解放しないでください。ただし，共用メモリ不足などによって，共用メモリを解放する必要がある場合は，次に示すどちらかの方法で共用メモリを解放してください。

eexdbshmrmコマンドを実行する

XDBサービス定義のxdb_memory_terminate_removeオペランドにYを指定する

2.4　XDBのトランザクション制御

ここでは，XDBのトランザクション制御について説明します。

＜この節の構成＞

2.4.1　データベースの更新処理方式

2.4.2　トランザクションの分離レベル

2.4.3　排他の取得期間

2.4.4　SQLエラーに伴うロールバック

2.4.1　データベースの更新処理方式

INSERT文，UPDATE文，またはDELETE文によって表が更新される場合，該当する行を各トランザクション固有の領域に格納し，その領域でデータが更新されます。この領域を更新バッファといい，トランザクションごとに確保されます。更新バッファ上でデータが更新されたあとに，トランザクションがコミットされると，更新バッファ上の更新データがDBエリアに反映されます。

＜この項の構成＞

(1)　表を更新するときの処理方式

(2)　複数のトランザクションが同じ行を更新する場合（エラーとなるケース）

(3)　トランザクションのコミットとロールバック

(1)　表を更新するときの処理方式

表を更新するときの処理方式を次の図に示します。

図2-7　表を更新するときの処理方式

説明

更新対象の行が更新バッファ上に読み込まれます。更新バッファはトランザクションごとに確保されます。

更新バッファ上のデータが更新されます。このとき，DBエリア上のデータは更新されません。更新バッファ上でデータの更新を行っている間（トランザクションがコミットするまでの間），DBエリア上の更新対象行をほかのトランザクションから参照できます。

トランザクションのコミット時に，更新バッファ上のデータがDBエリアに反映されます。

SELECT文で表を参照する場合は，該当する行が自トランザクションの更新バッファ上にあるときは，更新バッファ上のデータを参照します。該当する行が更新バッファ上にないときは，DBエリア上のデータを参照します。

(2)　複数のトランザクションが同じ行を更新する場合（エラーとなるケース）

複数のトランザクションが同じ行を更新した場合，あとから更新を行ったトランザクションはエラーとなり，そのトランザクションはロールバックされます。

複数のトランザクションが同じ行を更新するときの例を次の図に示します。

図2-8　複数のトランザクションが同じ行を更新するときの例

説明

あとから更新しようとしたトランザクション2はエラーになります。このとき，トランザクション2はロールバックします。

XDBは，同時に実行されるトランザクションで同じ行が更新されることがほとんどないようなシステムで使用されることを想定しています。同じ行を同時に更新してエラーとなった場合でも，アプリケーション側でリトライやキャンセルによる対応ができることを前提としています。

(3)　トランザクションのコミットとロールバック

トランザクションがコミットされると，更新バッファ上のデータがDBエリアに反映されます。

トランザクションがロールバックされると，更新バッファ上の更新データは消去されて，更新バッファはトランザクション開始前の状態になります。ロールバックしたトランザクションについては，UAP側で処理を再実行できるようにしてください。

2.4.2　トランザクションの分離レベル

XDBでは，トランザクション処理の同時実行性を重視して，トランザクションの分離レベルにREAD COMMITTEDを採用しています。そのため，一度読み込んだデータを再度読み込む場合，ほかのトランザクションによって参照中の行が更新されると，タイミングによっては結果が異なることがあります。例を次に示します。

■例1：検索処理中にほかのスレッドからデータが更新された場合

スレッドA：SELECT C1 FROM T1
スレッドB：UPDATE T1 SET C1=200

スレッドAのSQL実行中に，スレッドBがSQLを発行してコミットすると，次のようなことが起こる可能性があります。

スレッドAの1行目の取り出し時：C1の値は100

スレッドBのコミット

スレッドAの2行目の取り出し時：C1の値は200

■例2：更新処理中にほかのスレッドからデータが更新された場合

スレッドA：UPDATE T1 SET … WHERE C1=100
スレッドB：UPDATE T1 SET C1=100 WHERE C1=200

スレッドAのSQL実行中に，スレッドBがSQLを発行してコミットすると，更新対象となる行がタイミングによって異なる可能性があります。

2.4.3　排他の取得期間

トランザクションのコミット処理を行い，更新バッファ上のデータをDBエリアに反映するときに排他が取得されます。排他の取得期間を次の図に示します。

図2-9　排他の取得期間

説明

更新バッファ上のデータをDBエリアに反映するときに排他が取得されます。

行単位（インデクスはページ単位）で排他が取得されるため，排他の取得期間中はA行を参照したり，A行を更新バッファ上に読み込んだりすることはできません。

＜この項の構成＞

(1)　同じ行を同時に更新するトランザクションがある場合

(2)　同じ行を更新するトランザクションと参照するトランザクションがある場合

(1)　同じ行を同時に更新するトランザクションがある場合

同じ行を同時に更新するトランザクションがある場合の例を次の図に示します。

図2-10　同じ行を同時に更新するトランザクションがある場合の例

説明

スレッド2によるA行の更新処理中に，スレッド1がA行を更新しようとしたため，スレッド1はエラーとなり，トランザクションがロールバックします。

スレッド2によるA行の更新確定後（DBエリアへの反映確定後）に，スレッド3によるA行の更新処理が開始されたため，スレッド3はA行を更新できます。

同一行に対するコミット処理は同時実行できません。そのため，スレッド2のコミット処理が完了したあとに，スレッド3のコミット処理が開始されます。

(2)　同じ行を更新するトランザクションと参照するトランザクションがある場合

同じ行を更新するトランザクションと参照するトランザクションがある場合の例を次の図に示します。

図2-11　同じ行を更新するトランザクションと参照するトランザクションがある場合の例

説明

スレッド1がA行の更新を行い，スレッド2がA行を参照しています。

この場合，スレッド1の更新確定前後（DBエリアへの反映確定前後）で，スレッド2が取り出す値が変わります。

2.4.4　SQLエラーに伴うロールバック

SQLの実行中にエラーが発生し，トランザクションを続行できなくなった場合，XDBはこのトランザクションによるデータベースの更新を無効にし，SQL連絡領域中のSQLWARN6に'W'を設定してUAPに処理を戻します。SQLWARN6に'W'が設定された場合は，TP1/EEのライブラリ関数を発行して，このトランザクションをロールバックさせてください。ロールバックしない状態でSQLを発行すると，SQLはすべてエラーになります。また，この状態のままTP1/EEに制御を戻すと，同期点を取得する処理でエラーが発生します。その場合，出力されたメッセージを参照して，エラー要因を取り除き，該当するトランザクションのRPCサービス要求を再実行してください。

2.5　待機系のデータベースへの追い付き反映

XDBは，XTCと連携して，実行系のデータベースの更新内容を待機系のデータベースに逐次反映しています。これによって，系の切り替えに掛かる時間を短縮します。

実行系のデータベースが更新された場合，実行系のXDBは更新ログを生成します。この更新ログが待機系に転送され，更新ログを入力情報にして待機系のXDBがデータベースを更新します。

参考

ディスク型DBで生成されるログはデータベースのリカバリなどに使用しますが，XDBが生成する更新ログは待機系のデータベースを更新するために使用します。データベースのリカバリなどには使用しません。

待機系のデータベースへの追い付き反映処理の概要を次の図に示します。

図2-12　待機系のデータベースへの追い付き反映処理の概要

説明

実行系のデータベースが更新された場合，更新ログが生成されます。

生成された更新ログを待機系に転送します。この処理はXTCが行います。

XDBが更新ログを入力情報にして待機系のデータベースを更新します。

各処理について次に説明します。

＜この節の構成＞

(1)　更新ログの生成処理

(2)　更新ログの待機系への転送処理

(3)　待機系のデータベースの更新処理

(4)　追い付き反映時の注意事項

(1)　更新ログの生成処理

TP1/EEからコミット処理の命令を受け付けると，XDBは割り当てられた領域に更新ログを格納し，更新バッファの内容をデータベースに反映します。

更新ログは，トランザクションをコミットする（データベースを更新する）ごとに生成されます。更新ログはファイルに保存されません。TP1/EEが管理するヒープ領域で生成されて，待機系への転送が完了したあとに消滅します。

更新ログは，生成されたときに，コミット通番が付与されます。待機系では，このコミット通番の順番に従って更新ログをデータベースに反映します。

参考

次に示す場合は，トランザクションがコミットしても更新ログが生成されません。

トランザクションによるデータベースへのアクセスがない場合

トランザクションによるデータ更新がない場合（参照だけの場合）

また，ロールバック処理が発生した場合，待機系に更新を反映する必要がないため，更新ログは生成されません。

(2)　更新ログの待機系への転送処理

生成された更新ログは，XTCの機能によって待機系に逐次転送されます。詳細については，マニュアル「TP1/EE/Extended Transaction Controller 使用の手引」の「CL連携による系切り替え機能」を参照してください。

(3)　待機系のデータベースの更新処理

転送された更新ログを入力情報にして待機系のデータベースを更新します。このとき，実行系で付与されたコミット通番の順番に従ってデータベースを更新します。

なお，インデクスの更新データは更新ログに含まれません。更新ログには，表の更新データだけが格納されます。このため，待機系では，インデクスの定義情報と表の更新データを基に，インデクスデータを更新します。インデクスの更新データを更新ログに含めないのは，次に示す性能上の理由によります。

更新ログの生成時間を短縮することによって，実行系のコミット処理時間を短縮している

待機系に更新ログを転送するときの時間を短縮している

また，待機系のデータベースの更新処理中にエラーが発生した場合，待機系がプロセスダウンします。実行系が待機系のプロセスダウンを検知した時点で，該当する待機系をCLサーバから切り離します。

(4)　追い付き反映時の注意事項

マシンの性能および実行環境の違いによって，実行系で発生しないエラーが待機系で発生し，追い付き反映処理が失敗することがあります。例えば，次に示すようなエラーが発生することがあります。この場合，待機系がプロセスダウンします。

待機系でメモリ不足が発生した

待機系で共用メモリの確保に失敗した

2.6　待機系との連携による障害対策

XDBでは，障害に備えてデータベースを三重化しています。障害が発生した場合，2台ある待機系のうち1台を実行系に切り替えてオンライン処理を続行します。

ここでは，障害によってTP1/EEのプロセスダウンが発生した場合の処理について説明します。3台構成のときの処理と，障害によって2台構成になったときの処理についてそれぞれ説明します。

待機系との連携による障害対策は，XTCおよびHAモニタと連携して行います。XTCについては，マニュアル「TP1/EE/Extended Transaction Controller 使用の手引」の「CL連携による系切り替え機能」を，HAモニタについては，マニュアル「高信頼化システム監視機能 HAモニタ Linux(R)編」を参照してください。

参考

XTCとHAモニタの連携によって，高信頼性と高可用性を実現するクラスタリングのことをCL連携といいます。CL連携の詳細については，マニュアル「TP1/EE/Extended Transaction Controller 使用の手引」を参照してください。

＜この節の構成＞

2.6.1　3台構成の場合にTP1/EEのプロセスダウンが発生したときの処理

2.6.2　2台構成の場合にTP1/EEのプロセスダウンが発生したときの処理

2.6.1　3台構成の場合にTP1/EEのプロセスダウンが発生したときの処理

実行系でTP1/EEのプロセスダウンが発生すると，HAモニタの系切り替え機能によって，2台ある待機系のうち，1台を実行系にします。

3台構成の場合にTP1/EEのプロセスダウンが発生したときの処理を次の図に示します。

図2-13　3台構成の場合にTP1/EEのプロセスダウンが発生したときの処理

説明

実行系のTP1/EEのプロセスダウンをHAモニタが検知した場合，2台ある待機系のうち，1台を実行系にします。どちらの待機系を実行系とするかは，HAモニタの設定に従います。

参考

HAモニタとのインタフェースはTP1/EEが持ち，プロセスダウン時にプロセス単位で系切り替えが行えるようにTP1/EEが制御します。XDBはHAモニタとのインタフェースを持っていません。

2.6.2　2台構成の場合にTP1/EEのプロセスダウンが発生したときの処理

実行系1台，待機系1台の2台構成のときに，実行系でTP1/EEのプロセスダウンが発生すると，共用メモリ上の情報をメモリダンプとしてダンプファイルに出力し，XDBを停止します。

2台構成の場合にTP1/EEのプロセスダウンが発生したときの処理を次の図に示します。

図2-14　2台構成の場合にTP1/EEのプロセスダウンが発生したときの処理

実行系1台，待機系1台の2台構成のときに，実行系でTP1/EEのプロセスダウンが発生すると，切り替え後に実行系1台の状態になります。この状態を実行系孤立状態といいます。

■メモリダンプ

メモリダンプには，データベースの情報が含まれています。eexdbexttblコマンドで，メモリダンプファイルから表データを抽出し，エクスポートファイルに出力できます。このエクスポートファイルを，次回XDB開始時のデータベースの入力データファイルにします。

メモリダンプから表データを抽出する方法については，「9.2　実行系孤立状態になったときの対処方法」を参照してください。

3.　データベースの設計

この章では，表，インデクス，およびDBエリアを設計するときの考慮点と，DBエリアの容量見積もり方法について説明します。

＜この章の構成＞

3.1　データベースの設計手順

3.2　表の設計

3.3　インデクスの設計

3.4　DBエリアの設計

3.5　表用DBエリアの容量見積もり

3.6　インデクス用DBエリアの容量見積もり

3.7　作業表用DBエリアの容量見積もり

3.8　マスタディレクトリ用DBエリアの容量見積もり

3.9　ディクショナリ用DBエリアの容量見積もり

3.1　データベースの設計手順

データベースの設計手順を次の図に示します。

図3-1　データベースの設計手順

3.2　表の設計

ここでは，表を定義するときの考慮点について説明します。

＜この節の構成＞

3.2.1　列に定義できるデータ型

3.2.2　セグメントの再利用の設定

3.2.1　列に定義できるデータ型

表の各列に適切なデータ型を定義してください。列に定義できるデータ型を次の表に示します。

表3-1　列に定義できるデータ型

項番 | 分類 | データ型 | 説明
1 | 数データ | INTEGER | 整数を扱うデータ型です。
2 | DECIMAL | 固定小数点数を扱うデータ型です。
3 | 文字データ | CHARACTER | 固定長文字列を扱うデータ型です。
4 | 時刻印データ | TIMESTAMP | 年，月，日，時，分，秒の六つの属性を持つ時刻印のデータ型です。

各データ型の詳細については，マニュアル「TP1/EE/Extended Data Cache SQLプログラミング」を参照してください。

3.2.2　セグメントの再利用の設定

表データの格納効率を重視する場合は，セグメントの再利用の設定を検討してください。

＜この項の構成＞

(1)　セグメントの再利用とは

(2)　セグメントの再利用を行うと効果が期待できるケース

(3)　セグメントの再利用を行っても効果が期待できないケース

(1)　セグメントの再利用とは

XDBでは，行の追加や更新によって新規ページの割り当てが発生した場合，最終セグメント（最後に確保したセグメント）に新規ページを確保します。最終セグメントに新規ページを割り当てる空き領域がない場合は，新たに新規セグメントを確保して新規ページを割り当てます。

このように，通常は，最終セグメント以外のセグメントの空き領域（行の削除によって発生した空き領域）を利用しません。このため，行の削除が頻繁に発生すると，時間が経過するに連れて表データの格納効率が悪くなります。

表データの格納効率を上げるには，セグメントの再利用を設定します。セグメントの再利用を設定すると，最終セグメントに新規ページを割り当てる空き領域がない場合，新規セグメントを確保しないで，確保済みセグメントから空きページ（未使用ページまたは空きがある使用中ページ）を探し，そのページに表データを格納します。

表データの格納効率を重視する場合は，セグメントの再利用を検討してください。格納効率よりも性能を重視する場合は，セグメントの再利用は行わないでください。

セグメントの再利用を設定するには，CREATE TABLE文のSEGMENT REUSE句にセグメントの再利用契機を指定します。

■セグメントの再利用契機

セグメントの再利用契機には，セグメントの再利用を開始する契機をセグメント数で指定します。例えば，セグメントの再利用契機に3（SEGMENT REUSE 3）を指定した場合，表に三つのセグメントが割り当てられている状態で，最終セグメントに空き領域がないときに，セグメントの再利用が行われます。

セグメントの再利用の概要を次の図に示します。

図3-2　セグメントの再利用の概要

参考

確保済みセグメントから空き領域（未使用ページまたは空きがある使用中ページ）を探す処理を空き領域探索といいます。

空き領域探索によって探したページに表データを格納した場合，次回の空き領域探索では，前回，表データを格納したページの位置から探索を開始します。

次に示す場合は，セグメントの再利用を設定しているかどうかに関係なく，空き領域探索が発生します。
・メモリ領域不足によって，DBエリアの自動増分機能でDBエリアを拡張できない場合
・最大確保共用メモリ面数に達していて，かつ新規セグメントを確保できない場合

セグメントの再利用を設定している場合は，次に示すときにも空き領域探索が発生します。
・最大確保共用メモリ面数に達する前の状態で，DBエリアの自動増分機能でDBエリアを拡張しなければ新規セグメントを確保できないとき

(2)　セグメントの再利用を行うと効果が期待できるケース

データの格納効率を重視する場合に，セグメントの再利用を行ってください。

例えば，行の削除が多く発生し，最終セグメント以外に空き領域が多く発生するような場合にセグメントの再利用を行うと，データの格納効率の面で効果が期待できます。

セグメントの再利用を設定するには，CREATE TABLE文のSEGMENT REUSE句で1回目のセグメントの再利用契機と2回目以降のセグメントの再利用契機を指定します。

SEGMENT REUSE句の指定例を次に示します。

指定例

このように指定した場合，セグメントの再利用契機は，セグメント数が4，6（4＋2＝6），8（4＋2＋2＝8），…のときとなります。

■再利用契機に指定する値の目安

表に格納されている行数の増減予測が難しい場合や，表データの格納効率を重視する場合は，「SEGMENT REUSE 1,1」と指定してください。この場合，新規セグメントを確保する前に，必ず空き領域探索が行われるため，表データの格納効率が最も良くなります。ただし，新規セグメントを確保する前に，空き領域探索が必ず発生するため，性能面に影響が出ることがあります。

(3)　セグメントの再利用を行っても効果が期待できないケース

行の挿入や更新は頻繁に行うが，行の削除はあまり行わない表の場合は，空き領域があまり発生しません。そのため，セグメントの再利用を行っても，データの格納効率の面で効果が期待できません。

セグメントを再利用しない場合は，SEGMENT REUSE句にNOUSEを指定するか，またはSEGMENT REUSE句の指定を省略してください。

3.3　インデクスの設計

インデクスはUAPの性能に大きく影響するため，どの列にインデクスを定義するかを十分に検討する必要があります。ここでは，インデクスを定義するときの考慮点について説明します。

また，次に示す個所もインデクスの設計と関連が深いため，インデクスを定義する前に読むことをお勧めします。

「4.3　SQLの最適化」

＜この節の構成＞

3.3.1　インデクスを定義する列を決めるときの考慮点

3.3.2　単一列インデクスと複数列インデクスの使い分け

3.3.3　ページ内の未使用領域の設定

3.3.1　インデクスを定義する列を決めるときの考慮点

適切な列にインデクスを定義すると表の検索性能が向上しますが，不適切な列にインデクスを定義すると，逆に性能低下の原因になります。

＜この項の構成＞

(1)　インデクスの効果的な使い方

(2)　インデクスを定義すると逆効果になる場合

(3)　インデクスを定義しても効果が期待できない場合

(4)　インデクスの定義が適切でない場合の問題点

(1)　インデクスの効果的な使い方

ここでは，インデクスの効果的な使い方について説明します。

(a)　探索条件の評価に使う

WHERE句に指定された探索条件を評価するときにインデクスを使用すると，検索するページ数を削減できます。ただし，インデクスのキー値に重複が多い場合は，逆に検索するページ数が多くなることがあります。

(b)　表の結合検索に使う

表の結合検索を行うときにインデクスを使用すると，結合条件の評価回数（行の突き合わせ回数）を削減できます。結合検索の内表の列にインデクスが定義されていない場合，外表の各行に対して内表の全行が突き合わせ処理されます。

参考

表の結合方式については，「4.3.2　表の結合方式」を参照してください。

FROM句の指定順に外表，内表となります。

(c)　データをソートするときに使う

データをソートする場合（ORDER BY句が指定されている場合）に，ソート処理の代用としてインデクスを使用すると，ソート処理のオーバヘッドを削減できます。

インデクスを使用してソート処理を代用するには，ソートの指定順序とインデクス構成列の指定順序を合わせる必要があります。さらに昇順，降順の指定もすべて一致させるか，またはすべて逆にする必要があります。

ソートに複数の列を指定する場合については，「3.3.2　単一列インデクスと複数列インデクスの使い分け」を参照してください。

ただし，WHERE句と同時にORDER BY句を指定する場合，WHERE句の指定を優先して，検索時に使用するインデクスが決まるため，ソート処理のオーバヘッドを削減できないことがあります。

なお，ソート処理を代用するインデクスが定義されていない場合，作業表を作成してソート処理を行います。この場合，インデクスを使用したときに比べて性能が低下します。

(d)　集合関数の結果を取得するときに使う

集合関数のCOUNT(*)およびCOUNTで求めるデータ件数を取得するときに，インデクスを使用します。この機能を，集合関数の高速処理機能といいます。

集合関数の高速処理機能については，「4.3.5　集合関数の高速処理機能」を参照してください。

(e)　インデクスを利用して列値を取得する

探索条件やソートの指定がない場合でも，検索する列をすべて含むインデクスが定義されているときは，列値の取り出しにインデクスが使用されます。この機能をキースキャンによる列値取得機能といいます。

キースキャンによる列値取得機能については，「4.3.6　キースキャンによる列値取得機能」を参照してください。

(2)　インデクスを定義すると逆効果になる場合

次に示す条件に当てはまる列にインデクスを定義すると，逆に検索性能が低下します。

更新頻度の高い列
データを追加，更新，および削除するときは，表に定義されているインデクスのデータも更新されるため，表に定義されているインデクス数が性能に影響を及ぼします。そのため，表に定義するインデクスは必要最小限にすることをお勧めします。

データの重複が多い列
データの重複が多い場合，ヒット件数が多くなるため，検索性能が低下します。

(3)　インデクスを定義しても効果が期待できない場合

次に示す条件に当てはまる列にインデクスを定義しても効果は期待できません。

検索条件に使用する回数が少ない列

データ量が少ない表の列

(4)　インデクスの定義が適切でない場合の問題点

インデクスの定義が適切でないと次に示す問題が発生することがあります。

インデクスを使用したヒット率の高い検索処理を行うと，リーフページから表への入出力回数がヒット件数と同数となるため，表の全データページ数（テーブルスキャン時の入出力回数）を大きく超えるおそれがあります。

インデクスを定義した列に対して頻繁に更新処理が行われると，インデクスデータを更新するためのオーバヘッドが発生します。

インデクスが効果的に使用されているかどうかは，アクセスパス情報で確認できます。アクセスパス情報については，「7.6　アクセスパス情報の表示」を参照してください。

3.3.2　単一列インデクスと複数列インデクスの使い分け

インデクスには，単一列インデクスと複数列インデクスがあります。一つの列から作成したインデクスを単一列インデクスといい，複数の列から作成したインデクスを複数列インデクスといいます。

単一列インデクスと複数列インデクスの使い分けについて，例を使って説明します。

＜この項の構成＞

(1)　単一列インデクスを定義した方がよいケース

(2)　複数列インデクスを定義した方がよいケース

(3)　複数列インデクスを使用するときの留意事項

(1)　単一列インデクスを定義した方がよいケース

一つの列をキーにして検索する場合は，単一列インデクスを定義してください。また，データのソート（ORDER BY句）に使用する列が1列の場合も，単一列インデクスを定義してください。

例えば，次のような検索を行う場合に，C1列に単一列インデクスを定義します。インデクスの定義例では，C1列に対して，単一列インデクスT1IX1を定義しています。

SQL例

SELECT * FROM "T1" WHERE "C1" = 1
SELECT * FROM "T1" ORDER BY "C1" ASC

インデクスの定義例

CREATE INDEX "T1IX1" ON "T1"("C1" ASC) IN DBAREA01

(2)　複数列インデクスを定義した方がよいケース

一つの列だけでは検索する行を十分に絞り込めないため，複数の列をキーとして検索する行を絞り込む場合は，複数列インデクスを定義してください。また，データのソート（ORDER BY句）に使用する列が複数の場合も，複数列インデクスを定義してください。

例えば，次のような検索を行う場合に，C1列とC2列に対して複数列インデクスを定義します。インデクスの定義例では，C1列とC2列に対して，複数列インデクスT1IX1を定義しています。

SQL例

SELECT * FROM "T1" WHERE "C1" = 1 AND "C2" = 'A'
SELECT * FROM "T1" ORDER BY "C1" ASC, "C2" ASC

インデクスの定義例

CREATE INDEX "T1IX1" ON "T1"("C1" ASC,"C2" ASC) IN DBAREA01

(3)　複数列インデクスを使用するときの留意事項

複数列インデクスを使用するときの留意事項について説明します。

(a)　探索条件によるデータの絞り込み範囲

複数列インデクスを使用して検索する行を絞り込む場合，WHERE句の探索条件の指定によって検索範囲の絞り込み方が異なります。

WHERE句の探索条件の指定と検索範囲の関係を次に示します。

インデクスの定義

CREATE INDEX "T1IX1" ON "T1"("C1" ASC,"C2" ASC,"C3" ASC) IN DBAREA01

WHERE句の探索条件と検索範囲

注※1

C2列に対する条件が=条件でないため，C3列に対する条件は検索範囲の絞り込みに使用されません。

注※2

C2列に対して条件指定がないため，C3列に対する条件は検索範囲の絞り込みに使用されません。

注※3

C1列に対する条件が=条件でないため，C2列とC3列に対する条件は検索範囲の絞り込みに使用されません。

注※4

インデクスの第一構成列に対して条件指定がないため，検索時にインデクスが使用されません。

ポイント

インデクス構成列の指定順序については，=条件を指定することが多い列を先に指定する方が検索範囲を小さくできます。

インデクスの第一構成列に条件が指定されていない場合，そのインデクスは使用されません。

(b)　データのソートとインデクスの関係

ソート（ORDER BY句）の指定によっては，インデクスの効果を十分に得られないことがあります。ソート（ORDER BY句）の指定順序と，インデクス構成列の指定順序を合わせると，データの並び替えをインデクスで代用できるため，ソート処理のオーバヘッドを削減できます。

次のようなインデクスを定義した場合を例に，データのソートとインデクスの関係を次の表に示します。

インデクスの定義

CREATE INDEX "T1IX1" ON "T1"("C1" ASC,"C2" ASC,"C3" ASC) IN DBAREA01
CREATE INDEX "T1IX2" ON "T1"("C4" ASC) IN DBAREA02

表3-2　データのソートとインデクスの関係

項番
データのソート
ソート処理のオーバヘッド削減

1

SELECT * FROM "T1"  ORDER BY "C1" ASC,"C2" ASC,"C3" ASC

○

2

SELECT * FROM "T1"  ORDER BY "C1" DESC,"C2" DESC,"C3" DESC

○※1

3

SELECT * FROM "T1"  ORDER BY "C1" DESC,"C2" ASC,"C3" ASC

×

4

SELECT * FROM "T1"  ORDER BY "C1" ASC,"C2" ASC

○※2

5

SELECT * FROM "T1"  ORDER BY "C1" ASC,"C2" ASC,"C3" ASC,"C4" ASC

×

6

SELECT * FROM "T1" WHERE "C1" > 0  ORDER BY "C1" ASC,"C2" ASC,"C3" ASC

○

7

SELECT * FROM "T1" WHERE "C4" > 0  ORDER BY "C1" ASC,"C2" ASC,"C3" ASC

×※3

（凡例）

○：データの並び替えをインデクスで代用できるため，ソート処理のオーバヘッドを削減できます。

×：データの並び替えをインデクスで代用できないため，ソート処理のオーバヘッドを削減できません。

注※1

昇順，降順の指定がすべて逆の場合，データの並び替えをインデクスで代用できるため，ソート処理のオーバヘッドを削減できます。

注※2

ORDER BY句の列の並びを含むインデクスであれば，インデクス構成列が多くても，データの並び替えをインデクスで代用できるため，ソート処理のオーバヘッドを削減できます。

注※3

WHERE句の指定によってインデクスT1IX2が優先して使用されるため，データの並び替えをインデクスで代用できません。そのため，ソート処理のオーバヘッドは削減できません。

3.3.3　ページ内の未使用領域の設定

インデクスデータの格納効率を上げる場合は，ページ内の未使用領域の設定を検討してください。

＜この項の構成＞

(1)　ページ内の未使用領域とは

(2)　ページ内の未使用領域を設定するメリット

(3)　ページ内の未使用領域に設定する値の目安

(1)　ページ内の未使用領域とは

ページ内の未使用領域とは，データインポート時にインデクスデータを格納しない領域のことです。

例えば，ページ内の未使用領域比率に20%を指定した場合，データのインポート時にインデクスページ内に20%の未使用領域を設定します。ページ内の未使用領域の概要を次の図に示します。

ページ内の未使用領域比率は，CREATE INDEX文のPCTFREE句で指定できます。

図3-3　ページ内の未使用領域の概要

説明

この図では，ページ内の未使用領域の比率を20%としています。

未使用領域比率は0～99%の範囲で指定でき，省略時は30%が仮定されています。

データのインポート時，未使用領域にインデクスデータは格納されません。

ページ内の未使用領域の指定が有効になるのは，データのインポート時だけです。データの追加，更新，削除時には未使用領域の指定は有効になりません。ただし，次に示す場合に限り，未使用領域の指定が有効になります。

行の追加または更新によって，最大キー値を格納しているインデクスページにインデクスページスプリットが発生した場合，新しく確保したページに対しては未使用領域の指定が有効になります。

■インデクスページスプリットとは

インデクスは，ページごとに管理するキーの範囲を決定しています。キー追加時に，本来そのキーを格納するためのインデクスページに空きがない場合，該当ページが管理しているキー群を二つに分割します。これをインデクスページスプリットといいます。インデクスページスプリットの例を次の図に示します。

図3-4　インデクスページスプリットの例

(2)　ページ内の未使用領域を設定するメリット

空き領域がないインデクスページにインデクスデータが追加されると，XDBはインデクスページスプリットを行って新規ページを確保し，インデクスデータを追加します。例えば，未使用領域比率を0%とした場合，行を追加したときにインデクスページスプリットが発生します。未使用領域を設定しておくと，行を追加したときに，その未使用領域にインデクスデータが格納されるため，インデクスページスプリットが発生しません。このように，ページ内の未使用領域を適切に設定すると，インデクスページスプリットのオーバヘッドを削減できます。

ページ内の未使用領域を設定するメリットを次の図に示します。

図3-5　ページ内の未使用領域を設定するメリット

(3)　ページ内の未使用領域に設定する値の目安

次のケースに当てはまる場合は，既定値（未使用領域比率30%）よりも小さな値を指定してください。

インデクスデータの格納効率を重視する場合

インデクスの増加量が予測できない場合

最大キー値を追加する頻度が高い場合

インデクスの増加量がキー値の範囲ごとに大きくばらつく場合

未使用領域の比率の目安となる計算式を次に示します。

計算式

ページ内の未使用領域の比率＝↑INS÷（INITROW＋INS）↑×100　　（単位：%）

変数の説明

INITROW：インポート時の表の行数

INS：将来予測される追加行数

3.4　DBエリアの設計

ここでは，DBエリアを設計するときの検討項目や，DBエリアのページサイズおよびセグメントサイズを決めるときの考慮点について説明します。

＜この節の構成＞

3.4.1　DBエリアを設計するときの検討項目と考慮点

3.4.2　ページサイズを決めるときの考慮点

3.4.3　セグメントサイズを決めるときの考慮点

3.4.4　DBエリアの共用メモリ面数を決めるときの検討項目

3.4.5　共用メモリの固定化

3.4.1　DBエリアを設計するときの検討項目と考慮点

DBエリアは共用メモリ上に確保されるため，データの格納効率が悪いと共用メモリをむだに使うことになります。データの格納効率を上げるには，ページサイズおよびセグメントサイズを正しい指針に基づいて設計する必要があります。

また，ページサイズおよびセグメントサイズが適切でないと，データへのアクセス効率が悪くなり，性能低下の原因となります。

ここでは，DBエリアを設計するときの検討項目と考慮点について説明します。

＜この項の構成＞

(1)　DBエリアを設計するときの検討項目

(2)　DBエリアを設計するときの考慮点

(1)　DBエリアを設計するときの検討項目

DBエリアを設計するときの検討項目を次に示します。

DBエリアを幾つ作成するか

どのDBエリアにどの表（インデクス）を格納するか

1ページのサイズをどうするか

1セグメントのサイズをどうするか

共用メモリ1面のサイズをどうするか

共用メモリ面数を幾つにするか

DBエリアが使用する共用メモリは固定できるサイズか

各検討項目の詳細については，次項以降で説明します。

DBエリアは，XDBサービス定義のeexdbareaオペランドで定義します。eexdbareaオペランドについては，「6.5　XDBサービス定義の作成」の「コマンド形式のオペランド」を参照してください。

(2)　DBエリアを設計するときの考慮点

DBエリアを設計するときの考慮点を次に示します。

表は表用DBエリアに，インデクスはインデクス用DBエリアに格納する必要があります。

一つのDBエリアに表とインデクスを混在して格納できません。

作業表用DBエリアは一つだけ作成します。二つ以上は作成できません。

ページサイズや，セグメントサイズなどを設計した上でDBエリアの容量見積もりを実施してください。

ユーザが作成するDBエリアは，表用DBエリア，インデクス用DBエリア，および作業表用DBエリアです。マスタディレクトリ用DBエリアとディクショナリ用DBエリアは，XDBの開始時に自動的に作成されます。このため，マスタディレクトリ用DBエリアとディクショナリ用DBエリアについては，ページサイズや，セグメントサイズなどを設計する必要はありません。容量見積もりだけを実施してください。

3.4.2　ページサイズを決めるときの考慮点

ページサイズを決めるときの考慮点をDBエリアの種類ごとに説明します。

なお，ページサイズは，XDBサービス定義のeexdbareaオペランドの-pオプションにバイト単位で指定します。

＜この項の構成＞

(1)　表用DBエリアの場合

(2)　インデクス用DBエリアの場合

(3)　作業表用DBエリアの場合

(1)　表用DBエリアの場合

表用DBエリアのページサイズを決めるときの考慮点を次に示します。

ページサイズは，基本行が格納できる長さが最低限必要となります。一つのDBエリアに複数の表を格納する場合は，表の中で最大の基本行が格納できる長さにしてください。基本行が格納できる長さがない場合，XDBの開始時にエラーとなり，XDBを開始できません。
基本行の長さの求め方については，「3.5(3)(b)データ長一覧」を参照してください。

1ページ中に格納できる最大行数は255行です。そのため，行長の合計に比べてページサイズが大き過ぎると，使用できないむだな領域が発生し，データの格納効率が悪くなります。
例えば，行長が100バイトのときに，1ページに格納できるデータは，最大「100バイト×255行＝25500バイト」となります。このとき，ページサイズを32768バイトとすると，「32768バイト－25500バイト＝7268バイト」の領域が，使用できないむだな領域になります。

(2)　インデクス用DBエリアの場合

ページ長は基本的に大きくしてください。インデクスを定義した列や，SQLの発行内容を考慮して最適なページ長を決定してください。

(3)　作業表用DBエリアの場合

作業表用DBエリアには，表とインデクスを一緒に格納するため，データページとインデクスページの両方の観点からページサイズを検討する必要があります。

作業表の構成列，および作業表に定義されるインデクスの構成列については，「4.3.4　作業表を作成するSQL」を参照してください。

3.4.3　セグメントサイズを決めるときの考慮点

セグメントサイズを決めるときの考慮点をDBエリアの種類ごとに説明します。

なお，セグメントサイズは，XDBサービス定義のeexdbareaオペランドの-sオプションにページ数単位（1セグメントを構成するページ数）で指定します。

＜この項の構成＞

(1)　表用DBエリアまたはインデクス用DBエリアの場合

(2)　作業表用DBエリアの場合

(1)　表用DBエリアまたはインデクス用DBエリアの場合

表用DBエリアまたはインデクス用DBエリアのセグメントサイズを決めるときの考慮点を次に示します。

セグメントサイズは，通常，10～20ページにします。

一つのセグメントには一つの表または一つのインデクスが格納されます。そのことを考慮してセグメントサイズを決めてください。
例えば，データ件数が少ない表またはインデクスを格納する場合は，セグメントサイズを1にして，むだな領域を作らないようにしてください。
（例）
ページ長が32768バイト，セグメントサイズが10ページのDBエリアに，1行しか格納しない表を格納する場合，9ページ分（294912バイト）が使われません。この場合，セグメントサイズを1ページにして，むだな領域を作らないようにします。

(2)　作業表用DBエリアの場合

作業表用DBエリアは，ほかのDBエリアと構造が異なり，セグメント単位ではなくページ単位で管理されています。そのため，作業表用DBエリアのセグメントサイズは指定できません（セグメントサイズについての設計を行う必要はありません）。

3.4.4　DBエリアの共用メモリ面数を決めるときの検討項目

表用DBエリアおよびインデクス用DBエリアの場合，ページサイズとセグメントサイズを決めたあとに，次に示す項目を決めます。

DBエリアの共用メモリ1面分のサイズ

XDBの開始時に確保する共用メモリ面数

共用メモリ面数の上限

これらの項目を決めると，DBエリアの初期サイズ，およびDBエリアの自動増分時の1回当たりの増加量が決まります。

DBエリアのページおよびセグメントと共用メモリ1面の関係を次の図に示します。

図3-6　DBエリアのページおよびセグメントと共用メモリ1面の関係

説明

この図の場合，XDBの開始時に確保する共用メモリ面数が2面で，共用メモリ面数の上限が5面になっています。

■共用メモリ1面分のサイズ

DBエリアの共用メモリ1面分のサイズは，DBエリアの自動増分時に増分する容量になります。DBエリアの共用メモリ1面分のサイズは，eexdbareaオペランドの-lオプションで指定します。

■XDBの開始時に確保する共用メモリ面数

XDBの開始時に確保する共用メモリ面数は，eexdbareaオペランドの-aオプションの第1引数で指定します。

■共用メモリ面数の上限

DBエリアとして確保できる共用メモリ面数の上限を指定できます。共用メモリ面数の上限は，eexdbareaオペランドの-aオプションの第2引数で指定します。

3.4.5　共用メモリの固定化

DBエリアが使用する共用メモリのページングによって性能が低下している場合，DBエリアが使用する共用メモリを固定化して，ページングの防止を検討してください。DBエリアが使用する共用メモリを固定化する場合は，xdb_memory_fixedオペランドにYを指定します。

ただし，マシンの実メモリサイズが小さい場合にDBエリアが使用する共用メモリを固定化すると，ほかの用途で使用している共用メモリでページングの発生回数が増加し，システム全体の性能が低下するおそれがあります。したがって，DBエリアが使用する共用メモリサイズや，ほかのプログラムが使用する共用メモリサイズ，およびマシンの実メモリサイズを考慮して，DBエリアが使用する共用メモリを固定化するかどうかを決めてください。

また，DBエリアが使用する共用メモリサイズによっては，共用メモリを固定化できる上限値（OSの上限値）を超えてしまい，xdb_memory_fixedオペランドだけでは，共用メモリを固定化できないことがあります。この場合，TP1/Server Baseのユーザサービス定義のsetrlimit_memlockオペランドでOSの上限値を変更してください。このオペランドを指定すると，共用メモリを固定化できるようになります。setrlimit_memlockオペランドについては，「6.4　TP1/Server Baseのユーザサービス定義の設定」の「set形式のオペランド」を参照してください。

3.5　表用DBエリアの容量見積もり

ここでは，表用DBエリアの容量見積もり方法について説明します。

＜この節の構成＞

(1)　表用DBエリアの容量見積もり計算式

(2)　表用DBエリアの総ページ数の計算式

(3)　格納ページ数の計算方法

(1)　表用DBエリアの容量見積もり計算式

表用DBエリアの容量は次に示す計算式から求めてください。

計算式

変数の説明

PGSZ：表用DBエリアのページ長（単位：バイト）

ASZ：表用DBエリアの共用メモリ1面分のサイズ（単位：バイト）

表用DBエリアの共用メモリ1面分のサイズについては，「3.4.4　DBエリアの共用メモリ面数を決めるときの検討項目」を参照してください。

(2)　表用DBエリアの総ページ数の計算式

表用DBエリアの総ページ数は次に示す計算式から求めてください。

計算式

変数の説明

PGSZ：表用DBエリアのページ長（単位：バイト）

SS：表用DBエリアのセグメントサイズ

bf：次に示す計算式から求めてください。

SG：表用DBエリアの総セグメント数（次に示す計算式から求めてください）

TS：表用DBエリアに格納されている表の総数

Bi：各表を格納するために必要な基本行用ページ数

Ri：各表を格納するために必要な分岐行用ページ数

　　Bi，Riについては，「(3)格納ページ数の計算方法」を参照してください。

(3)　格納ページ数の計算方法

格納ページ数の計算方法について説明します。

(a)　計算式中で使用する変数

計算式中で使用する変数を説明します。

a：表に格納する行の総数

PGSZ：表用DBエリアのページ長（単位：バイト）

pf：CREATE TABLE文のPCTFREE句で指定する未使用領域の比率（単位：%）

未使用領域の比率を指定しない場合は0%として計算してください。

作業表の場合は0%として計算してください。

ci：各列のデータ長（単位：バイト）

「表3-3　各データ型のデータ長の一覧」を参照し，各列のデータ長を求めて，すべての列の合計を求めてください。

vi：分岐行の列の平均データ長（単位：バイト）

VARCHAR型の列については，「表3-4　分岐行となる列のデータ長の一覧」を参照して求めてください。

vn：分岐行として管理される列の列数

VARCHAR型の列の数を求めます。

e：表に定義した列の総数

(b)　データ長一覧

計算式中で使用するデータ長は次の表から求めてください。また，分岐行となる列のデータ長は，「表3-4　分岐行となる列のデータ長の一覧」から求めてください。

表3-3　各データ型のデータ長の一覧

項番 | 分類 | データ型 | データ長（単位：バイト）
1 | 数データ | INTEGER | 4
2 | SMALLINT | 2
3 | DECIMAL(m,n)※ | ↓m÷2↓＋1
4 | 文字データ | CHARACTER(n) | n
5 | VARCHAR(n) | 7
6 | 時刻印データ | TIMESTAMP(p) | 7＋p÷2

（凡例）

m，n：正の整数

p：0，2，4，または6

注※

全体のけた数がmけたで，小数点以下のけた数がnけたの固定小数点数を示します。mを省略した場合は29が仮定されます。

表3-4　分岐行となる列のデータ長の一覧

項番 | 分類 | データ型 | データ長（単位：バイト）
1 | 文字データ | VARCHAR(n) | d

（凡例）

n：正の整数

d：実際のデータ長

(c)　変数Biの求め方

変数Biは次に示す計算式から求めてください。

計算式

変数Biの分母の括弧部は1ページに格納される行数であり，最小1，最大255となります。また，行長BLは次の計算式から求めてください。

計算式

注※

作業表の場合は，16＋2×eになります。

なお，次に示す計算式を満たすようにpfの値を決定してください。

計算式

(d)　変数Riの求め方

変数Riは次に示す計算式から求めてください。

計算式

3.6　インデクス用DBエリアの容量見積もり

ここでは，インデクス用DBエリアの容量見積もり方法について説明します。

＜この節の構成＞

(1)　インデクス用DBエリアの容量見積もり計算式

(2)　インデクス用DBエリアの総ページ数の計算式

(3)　インデクスの格納ページ数の計算方法

(1)　インデクス用DBエリアの容量見積もり計算式

インデクス用DBエリアの容量は次に示す計算式から求めてください。

計算式

変数の説明

PGSZ：インデクス用DBエリアのページ長（単位：バイト）

ASZ：インデクス用DBエリアの共用メモリ1面分のサイズ（単位：バイト）

インデクス用DBエリアの共用メモリ1面分のサイズについては，「3.4.4　DBエリアの共用メモリ面数を決めるときの検討項目」を参照してください。

注意

実行したSQLの種類と実行順序によっては，実行系よりも待機系の方がインデクス用DBエリアの容量が大きくなることがあります。そのため，インデクス用DBエリアの見積もりが適切でないと，インデクス用DBエリアの容量不足によって，待機系のXDBだけがプロセスダウンすることがあります。

(2)　インデクス用DBエリアの総ページ数の計算式

インデクス用DBエリアの総ページ数は次に示す計算式から求めてください。

計算式

変数の説明

PGSZ：インデクス用DBエリアのページ長（単位：バイト）

SS：インデクス用DBエリアのセグメントサイズ

bf：次に示す計算式から求めてください。

SG：インデクス用DBエリアの総セグメント数（次に示す計算式から求めてください）

IS：インデクス用DBエリアに格納されているインデクスの総数

IPi：各インデクスを格納するために必要なページ数

　　「(3)インデクスの格納ページ数の計算方法」を参照してください。

(3)　インデクスの格納ページ数の計算方法

インデクスの格納ページ数の計算方法について説明します。

(a)　計算式中で使用する変数

計算式中で使用する変数を説明します。

PGSZ：インデクス用DBエリアのページ長（単位：バイト）

pf：CREATE INDEX文のPCTFREE句で指定する未使用領域の比率（単位：%）

未使用領域の比率を指定しない場合は，30%で計算してください。

作業表のインデクスの場合は，0%で計算してください。

k：キー値の重複が255以下のキーの種類の個数

kn：キー値の重複が255以下のキーの重複数の平均値

dk：キー値の重複が256以上のキーの種類の個数

dkn：キー値の重複が256以上のキーの重複数の平均値

kl：DB格納キー長（単位：バイト）

「表3-5　インデクスのキー長一覧」によって算出された値をklbとし，次の計算式によって求めます

kl＝↑klb÷2↑×2

ただし，複数列インデクスのキー長klbは，「表3-5　インデクスのキー長一覧」の複数列インデクスの欄を基に全構成列のキー長を加算したものとなります。

(b)　インデクスのキー長一覧

計算式中で使用するインデクスのキー長の一覧を次の表に示します。

表3-5　インデクスのキー長一覧

項番 | 分類 | データ型 | キー長（単位：バイト）
単一列インデクス | 複数列インデクス
固定長※1 | 可変長※2
1 | 数データ | INTEGER | 4 | 4 | 4＋a
2 | SMALLINT | 2 | 2 | 2＋a
3 | DECIMAL（m,n）※3 | ↓m÷2↓＋1 | ↓m÷2↓＋1 | ↓m÷2↓＋1＋a
4 | 文字データ | CHARACTER（n） | n | n | n＋a
5 | VARCHAR（n） | d＋a | － | d＋a
6 | 時刻印データ | TIMESTAMP(p) | 7＋p÷2 | 7＋p÷2 | 7＋p÷2＋a

（凡例）

a：次に示すどれかの値

単一列インデクスの場合で，定義長が255バイト以下のときは1

単一列インデクスの場合で，定義長が256バイト以上のときは2

複数列インデクスの場合で，インデクスを構成する列の合計が255バイト以下のときは1

複数列インデクスの場合で，インデクスを構成する列の合計が256バイト以上のときは2

複数列インデクスを構成する列の長さについては，マニュアル「TP1/EE/Extended Data Cache SQLプログラミング」の「CREATE INDEX（インデクスの定義）」の「複数列インデクスを構成する列の長さ」を参照してください。

d：実際のデータ長

m，n：正の整数

p：0，2，4，または6

－：該当しません。

注※1

構成列が固定長の列だけのインデクスのデータ長を示します。構成列中にナル値を含むキーの場合には，全体のキー長を算出するときに，構成列数分のキー長を合計し，さらにインデクス構成列数を加算してください。

注※2

構成列に可変長の列を含むインデクスのデータ長を示します。全体のキー長を算出する際には，構成列数分のキー長の合計に，インデクスを構成する列の合計が255バイト以下のときは1を，256バイト以上のときは2を加算します。

複数列インデクスを構成する列の長さについては，マニュアル「TP1/EE/Extended Data Cache SQLプログラミング」の「CREATE INDEX（インデクスの定義）」の「複数列インデクスを構成する列の長さ」を参照してください。

注※3

全体のけた数がmけたで，小数点以下のけた数がnけたの固定小数点数を示します。mを省略した場合は29が仮定されます。

(c)　インデクスの格納ページ数

次に示す計算式から，1インデクスページ当たりの平均キー格納件数pkを求めてください。

計算式

次に，インデクスの格納ページ数を次に示す計算式から求めてください。

Piは計算式1に示す漸化式から求めます。Pn＝1になるまでPi＋1の計算式を繰り返し，その計算結果の総計を求めます。

Qは計算式2から算出します。

Rは，インデクスページごとにキーの重複数やキー長にばらつきがある場合には1.2～1.5とし，平均値近辺に収束している場合には1とします。

計算式1

計算式2

3.7　作業表用DBエリアの容量見積もり

ここでは，作業表用DBエリアの容量見積もり方法について説明します。

＜この節の構成＞

(1)　作業表用DBエリアの容量見積もり計算式

(2)　計算式から総ページ数を見積もる方法

(3)　TASKTM情報およびシステム統計情報から総ページ数を見積もる方法

(1)　作業表用DBエリアの容量見積もり計算式

作業表用DBエリアの容量は次に示す計算式から求めてください。

計算式

作業表用DBエリアの容量＝
　　　作業表用DBエリアの総ページ数×作業表用DBエリアのページ長　（単位：バイト）

作業表用DBエリアの総ページ数は，計算式から見積もる方法と，TASKTM情報およびシステム統計情報から見積もる二つの方法があります。それぞれの方法について，次に説明します。

(2)　計算式から総ページ数を見積もる方法

作業表用DBエリアの総ページ数は次に示す計算式から求めてください。

計算式

変数の説明

TS：同時に作成する作業表の総数

IS：同時に作成する作業表の総インデクス数

Bi：各表を格納するために必要な基本行用ページ数

Ri：各表を格納するために必要な分岐行用ページ数

　　Bi，Riについては，「3.5(3)格納ページ数の計算方法」を参照してください。

IPi：各インデクスを格納するために必要なページ数

　　「3.6(3)インデクスの格納ページ数の計算方法」を参照してください。

(3)　TASKTM情報およびシステム統計情報から総ページ数を見積もる方法

次に示す情報から，作業表用DBエリアの総ページ数を見積もってください。

TASKTM情報の「作業表確保最大ページ数」

システム統計情報の「作業表確保ページ数」

TASKTM情報およびシステム統計情報については，「7.3　統計情報の取得」を参照してください。

3.8　マスタディレクトリ用DBエリアの容量見積もり

マスタディレクトリ用DBエリアの容量は次に示す計算式から求めてください。

計算式

マスタディレクトリ用DBエリアの容量＝↓（444704＋a）÷4096↓×4096　（単位：バイト）

変数の説明

a：計算式を次に示します。

↓｛（8＋（88×（b＋10）））＋4095｝÷4096↓×4096

b：DBエリアの総数

3.9　ディクショナリ用DBエリアの容量見積もり

ディクショナリ用DBエリアの容量は次に示す計算式から求めてください。

計算式

ディクショナリ用DBエリアの容量＝↑a÷775↑×3276800　（単位：バイト）

変数の説明

a：ディクショナリ用DBエリアの総ページ数

ディクショナリ用DBエリアの総ページ数は，次に示す計算式から求めてください。

12＋↑b÷84↑＋↑b÷31920↑

b：ディクショナリ表の格納ページ数

ディクショナリ表の格納ページ数は，次に示す計算式A～計算式Cの合計値となります。

＜この節の構成＞

(1)　計算式A

(2)　計算式B

(3)　計算式C

(1)　計算式A

計算式

変数の説明

a：定義した表の総数

b：平均列名長（単位：バイト）

c：1表当たりの平均列数

d：平均スキーマ名長（単位：バイト）

e：平均表識別子長（単位：バイト）

(2)　計算式B

計算式

変数の説明

a：平均スキーマ名長（単位：バイト）

b：平均表識別子長（単位：バイト）

c：定義したインデクスの総数

d：平均インデクス識別子長（単位：バイト）

e：インデクスの平均構成列数

(3)　計算式C

計算式

変数の説明

a：DBエリアの総数

b：平均DBエリア名長（単位：バイト）

4.　性能向上策

この章では，SQLの処理性能を向上させる方法について説明します。

＜この章の構成＞

4.1　SQLプール機能

4.2　表定義プール機能

4.3　SQLの最適化

4.1　SQLプール機能

ここでは，SQLプール機能を使用してSQLの処理性能を向上する方法について説明します。

＜この節の構成＞

4.1.1　SQLプール機能とは

4.1.2　SQLプール機能を効果的に使うには

4.1.3　SQLプールサイズの見積もり

4.1.4　SQLプール機能の効果を確認する方法

4.1.1　SQLプール機能とは

SQLを実行する前に，XDBはSQLの解析処理を行います。この解析処理のことをSQLの前処理といい，SQLの前処理によって作成される情報をSQLの前処理結果といいます。前処理結果にはアクセスパスなどの情報が含まれています。

XDBは，一度作成した前処理結果をメモリ上に保存しておき，同じSQLが実行されたときに，保存していた前処理結果を再利用します。前処理結果を保存しておく領域をSQLプールといい，前処理結果を再利用する機能をSQLプール機能といいます。SQLプール機能を使用すると，SQLの前処理に掛かるオーバヘッドが削減され，SQLの処理性能が向上します。

SQLプールがいっぱいになった場合，SQLプールに保存されている前処理結果が掃き出されます。前処理結果はLRU方式で管理されているため，最も長い時間使われていない前処理結果が掃き出されます。

ただし，使用中の前処理結果はSQLプールから掃き出されません。このため，掃き出すことができる前処理結果がなかったり，掃き出しても必要な大きさのSQLプールが確保できなかったりした場合は，前処理結果を保存するためのメモリを動的に確保します。

SQLプール機能を使用する場合は，XDBサービス定義のxdb_sqlpool_sizeオペランドを指定してください。

なお，SQLプール機能では，スレッドごとにメモリを割り当てているため，スレッドごとに独立して動作します。

■SQLプール機能の対象となるSQL

SQLプール機能の対象となるSQLを次に示します。ほかのSQLはSQLプール機能の対象外となります。

SELECT文

INSERT文

UPDATE文

DELETE文

参考

SQLの種類に関係なく，前処理結果はいったんSQLプールに保存されます。前記のSQLの場合は，SQLプールに前処理結果が保存されたままとなりますが，前記以外のSQLの場合は，SQLの実行が完了するとSQLプールから前処理結果が削除されます。

4.1.2　SQLプール機能を効果的に使うには

SQLプール機能では，同じSQLが実行されたときに，保存していた前処理結果を再利用します。そのため，SQLプール機能を効果的に使うには，同じSQLと判定されるようにSQLをコーディングすることがポイントになります。同じSQLを実行する回数が多いほど，SQLの前処理を省略できる回数が多くなり，SQLプール機能の効果が出ます。

ここでは，XDBが行うSQLの判定処理とSQLのコーディングのポイントについて説明します。

＜この項の構成＞

(1)　XDBが行うSQLの判定処理

(2)　SQLのコーディングのポイント

(3)　SQLプール機能の効果が期待できないケース

(1)　XDBが行うSQLの判定処理

SQLを受け付けたときに，そのSQLが以前実行されたSQLと同じかどうかをXDBが判定します。XDBは，SQLのテキストを比較してSQLが同じかどうかを判定しています。SQLの構文が同じで，テキストの長さ，空白の位置や数などがすべて一致した場合に同じSQLと判定し，SQLプールに保存されている前処理結果を再利用します。

同じSQLと判定されるケースと，異なるSQLと判定されるケースの例を示します。なお，例題中の△は一つの空白を意味しています。

（例1）同じSQLと判定されるケース

SELECT△*△FROM△"T1"
SELECT△*△FROM△"T1"

（例2）異なるSQLと判定されるケース

SELECT△*△FROM△"T1"
SELECT△△*△FROM△"T1"

空白の数が異なるため，異なるSQLと判定されます。

(2)　SQLのコーディングのポイント

SQLのテキストの中には比較対象外となる部分があります。比較対象外の部分をうまく利用して，同じSQLと判定されるようにSQLをコーディングしてください。SQLのテキストのうち，比較対象外となる部分を次の表に示します。

表4-1　SQLのテキストのうち比較対象外となる部分

項番 | SQL文の種類 | 比較対象外となる部分
1 | SQL全般 | 埋め込み変数，標識変数
2 | DECLARE CURSOR | DECLARE カーソル名 CURSOR FOR
3 | 1行SELECT文 | INTO ：埋め込み変数 [：標識変数] [，：埋め込み変数 [：標識変数]]…

同じSQLと判定されるケースと，異なるSQLと判定されるケースの例を次に示します。

(a)　カーソル名が異なる場合の例

カーソル名が異なっていても同じSQLと判定されます。例を次に示します。

（例）同じSQLと判定されるケース

DECLARE△CR1△CURSOR△FOR△SELECT△*△FROM△"T1"
DECLARE△CR2△CURSOR△FOR△SELECT△*△FROM△"T1"

△は一つの空白を意味しています。

(b)　探索条件に埋め込み変数を指定する場合の例

探索条件に定数を指定し，その定数がSQLによって異なる場合は，異なるSQLと判定されます。この場合，探索条件に埋め込み変数を使用すると，同じSQLと判定されます。例を次に示します。

（例1）異なるSQLと判定されるケース

SELECT * FROM "T1" WHERE "C1"=1
SELECT * FROM "T1" WHERE "C1"=2

この場合，SQLのテキストが異なるため，異なるSQLと判定され，SQLプール機能が適用されません。

（例2）同じSQLと判定されるケース

X1=1;
SELECT * FROM "T1" WHERE "C1"=:X1
X2=2;
SELECT * FROM "T1" WHERE "C1"=:X2

埋め込み変数は比較対象外のため，同じSQLと判定され，SQLプール機能が適用されます。

(3)　SQLプール機能の効果が期待できないケース

SQLプール機能の効果が期待できないケースを次に示します。

実行するSQLの種類が多い場合
実行するSQLの種類が多いと，SQLプールに保存されている前処理結果が掃き出されることが多くなり，前処理結果を再利用する回数が少なくなります。この場合，前処理や，前処理結果の掃き出しによるオーバヘッドによって，処理性能が低下するおそれがあります。

カーソルのオープン中に同じSQLの別のカーソルをオープンする場合
最初にオープンしたカーソルについてはSQLプール機能が適用されますが，2番目以降にオープンしたカーソルで実行されるSQLは必ず前処理が発生するため，SQLプール機能が適用されません。また，2番目以降にオープンしたカーソルで実行されるSQLの前処理結果はSQLプールに格納されますが，カーソルをクローズしたときに削除されるため，再利用されません。

カーソルのオープン中に同じSQLの1行SELECT文を実行する場合
1行SELECT文は必ず前処理が発生するため，SQLプール機能が適用されません。また，1行SELECT文の前処理結果はSQLプールに格納されますが，SQLの処理完了時に削除されるため，再利用されません。

前処理結果を保存するためのメモリを動的に確保した場合
前処理結果を保存するためのメモリを動的に確保した場合，その前処理結果はSQLの処理完了時に削除されるため，再利用されません。

4.1.3　SQLプールサイズの見積もり

次に示す計算式からSQLプールサイズの概算値を見積もってください。ここで計算した値をXDBサービス定義のxdb_sqlpool_sizeオペランドに指定します。

計算式

変数の説明

a：SQLのアクセスパス情報サイズ

アクセスパス情報サイズは，SQL単位情報で確認できます。SQL単位情報については，「7.5.4　SQL単位情報に表示される項目」を参照してください。

b：SQLのテキスト長

c：スレッド数（処理スレッド数＋予備スレッド数）

n：頻繁に実行するSQLの数

SQLプール機能は，スレッドごとにメモリを割り当てて，スレッドごとに独立して動作します。そのため，前記の計算式から求めたSQLプールサイズはスレッドごとに等分されて割り当てられます。したがって，各スレッドに割り当てられるSQLプールサイズは次に示す大きさになります。

計算式

（ｄ÷ｅ）×1024　　（単位：バイト）

変数の説明

d：xdb_sqlpool_sizeオペランドの値

e：スレッド数（処理スレッド数＋予備スレッド数）

注意

各スレッドに割り当てられるSQLプールサイズが1024バイト以上になるようにしてください。各スレッドに割り当てられるSQLプールサイズが1023バイト以下の場合，SQLプール機能は動作しません。

4.1.4　SQLプール機能の効果を確認する方法

TP1/EEが取得するシステム統計情報を参照して，SQLプール機能の効果を確認してください。システム統計情報で確認する項目を次の表に示します。これらの情報を定期的に確認してSQLプール機能のチューニングを行ってください。

表4-2　システム統計情報で確認する項目（SQLプール機能の場合）

項番
システム統計情報で確認する項目
項目の内容
分析時の考え方と対処方法

1
SQLプールリクエスト回数
SQLプールを検索した回数です。
項番1～4の項目の数値を確認して，SQLプール機能が効果的に機能しているかを総合的に判断してください。
例えば，SQLプールリクエスト回数とSQLプールヒット回数を比べると，前処理結果がどの程度再利用されているかがわかります。

2
SQLプールヒット回数
SQLの前処理結果がSQLプールに保存されていたため，SQLの前処理が省略できた回数です。

3
SQLプール登録回数
SQLの前処理結果をSQLプールに保存した回数です。

4
SQLプール掃き出し回数
SQLプールに保存されている前処理結果を掃き出した回数です。
0でない場合は，必要に応じてSQLプールサイズを大きくしてください。

5
SQLプール使用サイズ
実際に使用されているSQLプールサイズです。スレッドごとのSQLプールサイズが表示されます（単位：バイト）。
見積もったSQLプールサイズと実際に使用されているSQLプールサイズを比較してください。その結果，見積もったSQLプールサイズが大き過ぎる場合は，SQLプールサイズを小さくするなどの対処をしてください。

6
SQLプール動的メモリ確保サイズ
SQLプールサイズが不足したため，前処理結果を保存するメモリを動的に確保したときのメモリサイズです（単位：バイト）。
0バイトの場合は問題ありません。0バイトでない場合は，必要に応じてSQLプールサイズを大きくしてください。

システム統計情報の取得方法については，「7.3.2　システム統計情報に出力されるXDBに関する情報」を参照してください。

4.2　表定義プール機能

ここでは，表定義プール機能を使用してSQLの処理性能を向上する方法について説明します。

＜この節の構成＞

4.2.1　表定義プール機能とは

4.2.2　表定義プールサイズの見積もり

4.2.3　表定義プールサイズが適切かどうか確認する方法

4.2.4　表定義情報の一括先読み

4.2.1　表定義プール機能とは

操作系SQLの前処理を行うときに，XDBはディクショナリ表にアクセスして，SQL中に指定されている表の表定義情報を作成します。表定義情報とは，表にアクセスするときに必要となる情報で，表の情報だけではなく，列やインデクスの情報なども含んでいます。

一度作成した表定義情報をメモリ上に保存しておき，同じ表定義情報が必要になったときに，保存していた表定義情報を再利用します。表定義情報を保存しておく領域を表定義プールといい，ディクショナリ表を検索して作成した表定義情報を格納し，必要に応じて再利用する機能を表定義プール機能といいます。表定義プール機能を使用すると，ディクショナリ表にアクセスして表定義情報を作成する必要がなくなるため，その分のオーバヘッドが削減され，SQLの処理性能が向上します。

表定義プールがいっぱいになった場合，表定義プールに保存されている表定義情報が掃き出されます。表定義情報はLRU方式で管理されているため，最も長い時間使われていない表定義情報が掃き出されます。

表定義プール機能を使用する場合は，XDBサービス定義のxdb_tabledefpool_sizeオペランドを指定してください。

参考

SQLの前処理時の処理の流れを次に示します。

SQL中に指定されている表の表定義情報が表定義プールに保存されているかどうかを検索します。

表定義情報が保存されている場合は，保存されている表定義情報を再利用します。この場合，ディクショナリ表へのアクセスは発生しません。

表定義情報が保存されていない場合は，ディクショナリ表にアクセスして表定義情報を作成し，表定義プールに保存します。
このとき，表定義プールがいっぱいの場合は，表定義プールに保存されている表定義情報を掃き出して空き領域を確保し，作成した表定義情報を保存します。

なお，使用中の表定義情報は表定義プールから掃き出されません。このため，掃き出すことができる表定義情報がなかったり，掃き出しても必要な大きさの表定義プールが確保できなかったりした場合は，その表定義情報は使用されたあとで保存されないため，再利用されません。

4.2.2　表定義プールサイズの見積もり

次に示す計算式から表定義プールサイズの概算値を見積もってください。ここで計算した値をXDBサービス定義のxdb_tabledefpool_sizeオペランドに指定します。

計算式

↑すべての表※の表定義情報のサイズ÷1024↑×1.2　　（単位：キロバイト）

注※

ユーザが定義した表のほかに，ディクショナリ表も含まれています。

1表当たりの表定義情報のサイズは，次に示す計算式から求めてください。

計算式

↑｛（160×ａ＋496×ｂ＋879）÷512｝×512↑　　（単位：バイト）

変数の説明

ａ：表の列数

ｂ：表に定義されているインデクス数

メモリ容量の制限などで，すべての表の表定義情報を保存できる表定義プールサイズを確保できない場合は，頻繁にアクセスする表の表定義情報を格納できるように見積もってください。

表定義プールにすべての表の表定義情報が格納できない場合，SQLの前処理時にディクショナリ表へのアクセスが発生するため，性能が低下するおそれがあります。

4.2.3　表定義プールサイズが適切かどうか確認する方法

TP1/EEが取得するシステム統計情報を参照して，表定義プール機能の効果を確認してください。次の表に示す項目を定期的に確認し，表定義プールサイズが適切かどうか確認して表定義プール機能のチューニングを行ってください。

表4-3　システム統計情報で確認する項目（表定義プール機能の場合）

項番
システム統計情報で確認する項目
項目の内容
分析時の考え方と対処方法

1
表定義情報取得要求回数
表定義情報の取得要求回数の累計です。
－

2
表定義情報取得要求エラー回数
存在しない表をSQL中に指定したときのエラー回数の累計です。
－

3
表定義プールヒット回数
表定義プールから表定義情報を再利用した回数の累計です。
表定義情報のヒット率※を計算してください。
表定義情報のヒット率が80%以下の場合は，表定義プールサイズを大きくすることを検討してください。

4
表定義プール情報掃き出し回数
表定義プールから表定義情報が掃き出された回数の累計です。
掃き出し回数が0の場合は問題ありません。
0以外の場合は，表定義プールサイズが不足しているおそれがあります。表定義プールサイズを大きめにとってXDBを稼働したあとに，「表定義プール表定義最大サイズ」を確認してください。

5
表定義プール表定義最大サイズ
表定義プールに保存されている表定義情報の合計長です（単位：バイト）。
「表定義プール表定義最大サイズ」と見積もった表定義プールサイズを比較してください。
表定義情報の合計長が，表定義プールサイズに比べて極端に小さい場合は，表定義プールサイズが大き過ぎて，むだな領域があると考えられます。この場合，表定義プールサイズを表定義情報の合計長に見合った大きさに修正してください。

（凡例）

－：特にありません。

注※

表定義情報のヒット率は次に示す計算式から求めます。

表定義情報のヒット率＝
（表定義プールヒット回数÷表定義情報取得要求回数）×100（単位：%）

システム統計情報の取得方法については，「7.3.2　システム統計情報に出力されるXDBに関する情報」を参照してください。

4.2.4　表定義情報の一括先読み

XDBの開始直後は，表定義プールに表定義情報が保存されていないため，操作系SQLが実行されると，必ず表定義情報の作成処理が行われます。したがって，XDBの開始直後は，表定義プール機能による性能向上が期待できません。

XDBの開始直後から表定義情報を再利用して，SQLの処理性能を向上したい場合は，表定義情報の一括先読みを行ってください。表定義情報の一括先読みとは，XDBの開始時に，ユーザが定義したすべての表とディクショナリ表の表定義情報を表定義プールに一括して読み込み，保存しておく機能です。表定義情報の一括先読みを行う場合は，XDBサービス定義のxdb_table_prereadオペランドにYを指定してください。

なお，表定義情報の一括先読みを使用する場合は，ユーザが定義したすべての表とディクショナリ表の表定義情報をすべて保存できる大きさの表定義プールが必要になります。

参考

表定義情報の一括先読みの実行時に，表定義プールサイズが不足していると，すべての表定義情報を表定義プールに保存できません。この場合，XDBは表定義プールに保存できるだけの表定義情報を保存し，その旨のメッセージを出力します。

4.3　SQLの最適化

ここでは，XDBが行っているSQLの最適化について説明します。

＜この節の構成＞

4.3.1　表の検索方式

4.3.2　表の結合方式

4.3.3　インデクスの優先順位

4.3.4　作業表を作成するSQL

4.3.5　集合関数の高速処理機能

4.3.6　キースキャンによる列値取得機能

4.3.1　表の検索方式

表の検索方式は全部で四つあります。各検索方式を順に説明します。

＜この項の構成＞

(1)　テーブルスキャン

(2)　インデクススキャン

(3)　キースキャン

(4)　行IDフェッチ

(1)　テーブルスキャン

テーブルスキャンとは，表が格納されているデータページをすべて参照し，データを取り出す方法です。探索条件が指定されていない場合や，インデクスが定義されていない場合に，テーブルスキャンが実行されます。テーブルスキャンの処理方式を次の図に示します。

図4-1　テーブルスキャンの処理方式

(2)　インデクススキャン

インデクススキャンとは，インデクスを使用してデータページからデータを取り出す方法です。インデクスで探索条件の評価を行う場合や，ソート処理をインデクスで代用する場合に，インデクススキャンが実行されます。インデクススキャンの処理方式を次の図に示します。

図4-2　インデクススキャンの処理方式

(3)　キースキャン

キースキャンとは，インデクスページを参照してデータを取り出す方法です。データページを参照しないで，インデクスページから列値を取り出すため，参照するページ数を削減できます。データを取り出すすべての列が，検索時に使用するインデクス構成列の場合に，キースキャンが実行されます。キースキャンの処理方式を次の図に示します。

図4-3　キースキャンの処理方式

(4)　行IDフェッチ

行の格納位置を示す値のことを行IDといいます。行IDフェッチとは，この行IDを使用してデータページからデータを取り出す方法です。SQL文の探索条件に行IDを指定する検索や，作業表を作成する検索の場合に，行IDフェッチが実行されます。行IDフェッチの処理方式を次の図に示します。

図4-4　行IDフェッチの処理方式

4.3.2　表の結合方式

XDBでは，表の結合検索はネストループジョインで行います。ネストループジョインとは，外表から1行ずつ行を取り出し，内表のそれぞれの行に突き合わせて，結合条件を満たす行を取り出す入れ子型のループ処理をする結合方式です。

内表の結合列にインデクスを定義したり，外表に条件を指定したりすると，行の突き合わせ回数を減らすことができます。

ネストループジョインの結合方式を次の図に示します。

図4-5　ネストループジョインの結合方式

参考

FROM句の指定順に外表，内表となります。

4.3.3　インデクスの優先順位

XDBでは，次の表に示すインデクスの優先順位に従って，検索時に使用するインデクスを決定しています。

なお，インデクスの優先順位が等しい場合や，同じ列に複数の条件が指定されている場合は，WHERE句で先に記述した条件を使用します。そのため，検索範囲を絞り込める条件をWHERE句で先に記述してください。

表4-4　インデクスの優先順位

優先順位
インデクスの内容
SQLの記述例

1
すべてのインデクス構成列に=条件が指定されているユニークインデクス

WHERE "C1" = 1

2
インデクスの第一構成列に=条件が指定されているインデクス

WHERE "C1" = 1

3
インデクスの第一構成列に条件が指定されているインデクス

WHERE "C1" >= 1

WHERE "C1" BETWEEN 1 AND 10

4
ソートに使用できるインデクス※1

SELECT * FROM "T1" ORDER BY "C1"

5
集合関数のCOUNT(*)，またはCOUNTに使用できるインデクス※2

SELECT COUNT(*) FROM "T1"

SELECT COUNT("C1") FROM "T1"

SELECT COUNT(DISTINCT "C1") FROM "T1"

6
データを取り出す列をすべて含むインデクス※3

SELECT "C1" FROM "T1"

インデクスを使用しない
否定の述語

WHERE "C1" <> 1

WHERE "C1" NOT BETWEEN 1 AND 10

論理演算子ORに含まれる列に定義されたインデクス

WHERE "C1" = 1 OR "C1" = 2

論理演算子NOTに含まれる列に定義されたインデクス

WHERE NOT "C1" = 1

注※1

ソートに対してインデクスを使用するケースについては，「3.3.1(1)インデクスの効果的な使い方」を参照してください。

注※2

集合関数に対してインデクスを使用するケースについては，「4.3.5　集合関数の高速処理機能」を参照してください。

注※3

インデクスを使用して列値を取り出すケースについては，「4.3.6　キースキャンによる列値取得機能」を参照してください。

参考

検索時に使用されたインデクスは，次に示すどちらかの方法で確認できます。

eexdbsqlコマンドの#SET OPT REPORTの実行結果

アクセスパス情報

eexdbsqlコマンドの#SET OPT REPORTについては，「10．運用コマンド」の「eexdbsql（SQLの実行）」の「■#SET OPT REPORT（インデクス情報，作業表情報の表示）」を参照してください。

アクセスパス情報については，「7.6　アクセスパス情報の表示」を参照してください。

検索時に使用されるインデクスの例を次に示します。

＜この項の構成＞

(1)　検索時に使用されるインデクスの例（その1）

(2)　検索時に使用されるインデクスの例（その2）

(3)　検索時に使用されるインデクスの例（その3）

(4)　検索時に使用されるインデクスの例（その4）

(5)　検索時に使用されるインデクスの例（その5）

(6)　検索時に使用されるインデクスの例（その6）

(7)　検索時に使用されるインデクスの例（その7）

(1)　検索時に使用されるインデクスの例（その1）

■表およびインデクスの定義

CREATE FIX TABLE "T1"("C1" INT,"C2" CHAR(10),"C3" INT,"C4" INT) IN DBAREA01
CREATE INDEX "T1IX1" ON "T1"("C1") IN DBAREA02
CREATE INDEX "T1IX2" ON "T1"("C2") IN DBAREA03

■SQL例

SELECT * FROM "T1" WHERE "C1"=1 AND "C2">'ABC'

この場合，検索時に使用されるインデクスはT1IX1です。インデクスT1IX1にはインデクスの優先順位2が適用され，インデクスT1IX2にはインデクスの優先順位3が適用されます。

(2)　検索時に使用されるインデクスの例（その2）

■表およびインデクスの定義

CREATE FIX TABLE "T2"("C1" INT,"C2" CHAR(10),"C3" INT,"C4" INT) IN DBAREA01
CREATE INDEX "T2IX1" ON "T2"("C1") IN DBAREA02
CREATE INDEX "T2IX2" ON "T2"("C2") IN DBAREA03

■SQL例

SELECT * FROM "T2" WHERE "C1"<=1 AND "C2">'ABC'

この場合，検索時に使用されるインデクスはT2IX1です。インデクスT2IX1とインデクスT2IX2には，インデクスの優先順位3が適用されます。そのため，WHERE句で先に記述した条件が優先されます。

(3)　検索時に使用されるインデクスの例（その3）

■表およびインデクスの定義

CREATE FIX TABLE "T3"("C1" INT,"C2" CHAR(10),"C3" INT,"C4" INT) IN DBAREA01
CREATE INDEX "T3IX1" ON "T3"("C1","C2") IN DBAREA02
CREATE INDEX "T3IX2" ON "T3"("C1","C3") IN DBAREA03

■SQL例

SELECT * FROM "T3" WHERE "C1"=1 AND "C2"='ABC' AND "C3">10

この場合，検索時に使用されるインデクスはT3IX1です。複数列インデクスの場合，インデクスの優先順位を第一構成列から順に比較していきます。この例では，第一構成列に対するインデクスの優先順位が等しいため，第二構成列に対するインデクスの優先順位が比較されます。

(4)　検索時に使用されるインデクスの例（その4）

■表およびインデクスの定義

CREATE FIX TABLE "T4"("C1" INT,"C2" CHAR(10),"C3" INT,"C4" INT) IN DBAREA01
CREATE INDEX "T4IX1" ON "T4"("C1","C2") IN DBAREA02
CREATE INDEX "T4IX2" ON "T4"("C1","C3") IN DBAREA03

■SQL例

SELECT * FROM "T4" WHERE "C1"=1

この場合，検索時に使用されるインデクスはT4IX1またはT4IX2です。検索時に使用したいインデクスがある場合は，使用したいインデクスの構成列に条件を付加して，インデクスの優先順位を調整してください。

(5)　検索時に使用されるインデクスの例（その5）

■表およびインデクスの定義

CREATE FIX TABLE "T5"("C1" INT,"C2" CHAR(10),"C3" INT,"C4" INT) IN DBAREA01
CREATE INDEX "T5IX1" ON "T5"("C1") IN DBAREA02
CREATE INDEX "T5IX2" ON "T5"("C2") IN DBAREA03

■SQL例

SELECT * FROM "T5" WHERE "C1"=1 ORDER BY "C2"

この場合，検索時に使用されるインデクスはT5IX1です。インデクスT5IX1にはインデクスの優先順位2が適用され，インデクスT5IX2にはインデクスの優先順位4が適用されます。

(6)　検索時に使用されるインデクスの例（その6）

■表およびインデクスの定義

CREATE FIX TABLE "T6"("C1" INT,"C2" CHAR(10),"C3" INT,"C4" INT) IN DBAREA01
CREATE INDEX "T6IX1" ON "T6"("C1","C2") IN DBAREA02
CREATE INDEX "T6IX2" ON "T6"("C3") IN DBAREA03

■SQL例

SELECT "C1","C2" FROM "T6"

この場合，検索時に使用されるインデクスはT6IX1です。インデクスT6IX1にはインデクスの優先順位6が適用され，インデクスT6IX2にはインデクスの優先順位が適用されません。

(7)　検索時に使用されるインデクスの例（その7）

■表およびインデクスの定義

CREATE FIX TABLE "T71"("C1" INT,"C2" CHAR(10),"C3" INT,"C4" INT) IN DBAREA01
CREATE INDEX "T71IX1" ON "T71"("C1") IN DBAREA02
CREATE INDEX "T71IX2" ON "T71"("C2") IN DBAREA03
CREATE FIX TABLE "T72"("C1" INT,"C2" CHAR(10),"C3" INT,"C4" INT) IN DBAREA04
CREATE INDEX "T72IX1" ON "T72"("C2") IN DBAREA05
CREATE INDEX "T72IX2" ON "T72"("C3") IN DBAREA06

■SQL例

SELECT * FROM "T71","T72"
 WHERE "T71"."C1">=1
   AND "T72"."C2"="T71"."C2" AND "T72"."C3"<=10

この場合，検索時に使用されるインデクスはT71IX1とT72IX1です。

XDBでは，FROM句に指定された順にネストループジョインを行います。そのため，外表に当たる表T71の検索では，条件「”T71”.”C1”>=1」だけが使用されます。内表に当たる表T72の検索では，条件「”T72”.”C2”=”T71”.”C2”」と「”T72”.”C3”<=10」が使用されます。

ポイント

インデクスの優先順位を利用すると，インデクスの定義を変更しないでもXDBが検索時に使用するインデクスを変更できます。XDBが検索時に使用するインデクスを変更する方法については，マニュアル「TP1/EE/Extended Data Cache SQLプログラミング」の「検索時に使用するインデクスを変更する方法」を参照してください。

4.3.4　作業表を作成するSQL

XDBでは，SQLを処理するときに，作業表用DBエリアに作業表を作成することがあります。作業表には，ソートしたデータが一時的に格納されます。このため，大量のデータをソートすると，作業表を作成する処理による負荷によって，処理性能が低下することがあります。

＜この項の構成＞

(1)　作業表を作成する要因となるSQLと作業表の作成を回避する方法

(2)　作業表の種類と構成列

(1)　作業表を作成する要因となるSQLと作業表の作成を回避する方法

作業表を作成する要因となるSQLと，作業表の作成を回避する方法を次の表に示します。

表4-5　作業表を作成する要因となるSQLと作業表の作成を回避する方法

項番 | 作業表が作成される要因となるSQL | 作業表が作成される目的 | 作業表の作成を回避する方法
1 | ORDER BY句の指定があるSQL | 検索結果のソート処理に使われます。 | ORDER BY句に指定している列にインデクスを定義してください。
2 | DISTINCT集合関数の指定があるSQL | 重複排除のためのソート処理に使われます。 | DISTINCT集合関数の引数列を第一構成列とするインデクスを定義してください。

参考

作業表が作成されているかどうかは，次に示すどちらかの方法で確認できます。

eexdbsqlコマンドの#SET OPT REPORTの実行結果

アクセスパス情報

eexdbsqlコマンドの#SET OPT REPORTについては，「10．運用コマンド」の「eexdbsql（SQLの実行）」の「■#SET OPT REPORT（インデクス情報，作業表情報の表示）」を参照してください。

アクセスパス情報については，「7.6　アクセスパス情報の表示」を参照してください。

(2)　作業表の種類と構成列

作業表用DBエリアには，作業表と作業表のインデクスが格納されます。作業表の構成列とインデクス構成列を次の表に示します。

表4-6　作業表の構成列とインデクス構成列

項番
作業表の種類
作業表の構成列
作業表のインデクス構成列

1
ORDER BY句の実行時に作成される作業表

ORDER BY句に指定した列

FROM句に指定した表の行ID

ORDER BY句に指定した列

2
DISTINCT集合関数の実行時に作成される作業表
DISTINCT集合関数の引数に指定した列
DISTINCT集合関数の引数に指定した列

作業表の定義では，構成列数や列の長さの合計などに制限があり，制限を超えるとSQLがエラーになります。構成列数や列の長さの合計などに関する制限については，マニュアル「TP1/EE/Extended Data Cache SQLプログラミング」の「CREATE TABLE（表の定義）」の「共通規則」を参照してください。

作業表のインデクスの定義では，インデクスキーの長さ（列の長さ）に制限があり，制限を超えるとSQLがエラーになります。インデクスキーの長さ，および制限については，マニュアル「TP1/EE/Extended Data Cache SQLプログラミング」の「CREATE INDEX（インデクスの定義）」の「共通規則」を参照してください。

4.3.5　集合関数の高速処理機能

集合関数の結果をインデクスページから求めることができます。インデクスページだけを参照してデータ件数を求めるため，データ件数を求める処理に掛かるオーバヘッドを削減できます。この機能を集合関数の高速処理機能といいます。

次のようにインデクスを定義した場合を例に，集合関数の指定と集合関数の高速処理機能の適用可否を次の表に示します。

インデクスの定義

CREATE INDEX "T1IX1" ON "T1"("C1" ASC,"C2" ASC) IN DBAREA01

表4-7　集合関数の指定と集合関数の高速処理機能の適用可否

項番
集合関数の指定
集合関数の高速処理機能の適用可否

1

SELECT COUNT(*) FROM "T1"

○

2

SELECT COUNT("C1") FROM "T1"

○

3

SELECT COUNT(DISTINCT "C1") FROM "T1"

○

4

SELECT COUNT("C2") FROM "T1"

×※1

5

SELECT COUNT("C1") FROM "T1"  WHERE "C1"<>1

×※2

6

SELECT COUNT(*) FROM "T1","T2"

×※3

（凡例）

○：集合関数の高速処理機能が適用されます。

×：集合関数の高速処理機能が適用されません。

注※1

集合関数の引数列がインデクスの第一構成列でない場合，集合関数の高速処理機能は適用されません。

注※2

検索時に使用するインデクスで評価できない条件が指定されている場合，集合関数の高速処理機能は適用されません。

注※3

表の結合検索を行う場合，集合関数の高速処理機能は適用されません。

4.3.6　キースキャンによる列値取得機能

探索条件やソートの指定がない場合でも，データを取り出すすべての列が，検索時に使用するインデクス構成列のときは，キースキャンが実行されて，インデクスページから列値を取り出します。この機能をキースキャンによる列値取得機能といいます。

キースキャンによる列値取得機能が適用されると，データページを参照しないで，インデクスページから列値を取り出すため，参照するページ数を削減できます。

5.　メモリ所要量

この章では，XDBが使用するメモリ所要量の求め方について説明します。

＜この章の構成＞

5.1　XDB用ワーク領域（XDBPOOL）の見積もり

5.2　更新バッファが使用するメモリの見積もり

5.3　TP1/EEプロセスで確保するメモリの見積もり

5.4　システムワーク領域の最大サイズの見積もり

5.5　更新ログの見積もり

5.1　XDB用ワーク領域（XDBPOOL）の見積もり

ここでは，XDB用ワーク領域（XDBPOOL）の見積もりについて説明します。

＜この節の構成＞

5.1.1　計算式で使用する変数

5.1.2　計算式

5.1.1　計算式で使用する変数

この節で説明している計算式で使用する変数を次の表に示します。

表5-1　計算式で使用する変数

項番
変数
説明

1
AFN
集合関数の数

2
ARN
DBエリアの個数

3
BON
論理演算数

4
BTN
BETWEEN述語の数

5
CLN
SQL文中に指定した列数

6
COLLEN
インデクスの第一構成列の定義長

7
CST
SQLに指定した定数の数

8
CTN
CURRENT_TIMESTAMPの数

9
DTS
データ型の指定数（定義系SQLの場合は列数）

10
EXN
SQL文中に指定した値式の数

11
HVN
埋め込み変数の数

12
ICL1
各インデクスについて次に示す計算を行った結果，その中の最大値

ICL1＝1718＋3×MAX（KL，256）＋IPL

KL：表に定義されているインデクスの中の最大キー長

インデクスのキー長については，「3.6(3)(b)インデクスのキー長一覧」を参照してください。

IPL：インデクス用DBエリアのページ長

13
ICL2
挿入列数

14
ICN
検索に使用するインデクスのインデクス構成列数

15
IDN
SQLに指定した識別子数

16
IUC
INSERT文に指定した列数またはUPDATE文に指定した列数

17
KL
計算対象の表に定義されているインデクスの中の最大キー長
インデクスのキー長については，「3.6(3)(b)インデクスのキー長一覧」を参照してください。

18
LFD
定義系SQL文記述ファイルのサイズ（単位：バイト）

19
LFE
エクスポート制御ファイルのサイズ（単位：バイト）

20
LFI
インポート制御ファイルのサイズ（単位：バイト）

21
LSQ
1トランザクション内でのSQLテキストの最大長

22
LUR
UPDATE対象行の行長（単位：バイト）
行長については，「3.5(3)(b)データ長一覧」を参照して求めてください。

23
MCL
列数が最も多い表の列数

24
MIX
定義しているインデクスが最も多い表のインデクス数

25
MXR
インポートする各表について次に示す計算を行った結果，その中の最大値

MXR＝1216＋288×TIN＋12×MXCI＋IOAICN＋MAX1

TIN：表に定義されているインデクス数

MXCI：インデクス構成列の列IDの最大値

IOAICN：次に示すIOAnについて，n＝ICNのときの値

ICN：検索に使用するインデクスのインデクス構成列数

n＝1，2，…，ICNに対して

IOAn＝↑（IOAn－1＋DTLn）÷4↑×4（ただし，IOA₀＝0）

DTLn（n＝1，2，…，インデクス構成列数）：インデクス構成列の定義長（単位：バイト）

列のデータ長については，「3.5(3)(b)データ長一覧」を参照して求めてください。

MAX1：インデクス構成列のうちでデータ長の最大値（単位：バイト）

26
NCOL
インデクス構成列数

27
NIX
インポートする表に定義されたインデクスの数の最大値

28
NN
ANDまたはOR条件数

29
NSQ
トランザクション内で同時にオープンするカーソル数

30
PDN
SQLに指定したNOT，OR，述語の総数

31
PL
計算対象の表に定義されているインデクスを格納するインデクス用DBエリアで，最大のページサイズ（単位：バイト）

32
PS
表用DBエリアのページサイズ（単位：バイト）

33
PSW
作業表用DBエリアのページサイズ（単位：バイト）

34
RID
DECIMAL型，TIMESTAMP型の数（ROWのINSERT，UPDATE時に加算します）

35
RIN
SQL中に指定したROWIDの数

36
RWN
SQL中に指定したROWの数

37
SCL
操作対象となる表の中で，列数の最大値

38
SCN
DBエリアの初期確保用の共用メモリ面数の合計値

39
SIX
操作対象となる表の中で，定義されているインデクス数の最大値

40
SLN
検索項目数

41
SQP
SQLプールサイズ（単位：キロバイト）
xdb_sqlpool_sizeオペランドの値を代入してください。

42
SUB
更新バッファの容量
「5.2　更新バッファが使用するメモリの見積もり」を参照してください。

43
TBN
操作対象となる表の数

44
TCN
表の列数

45
TCNV
表の中のVARCHAR型の列数

46
TDP
表定義情報プールサイズ（単位：キロバイト）
xdb_tabledefpool_sizeオペランドの値を代入してください。

47
TIN
表に定義されているインデクス数

48
TM
処理スレッド数＝thread_noオペランドの値＋reserve_thread_noオペランドの値
ただし，reserve_start_pce_no＝0の場合は，reserve_thread_noオペランドの値は加算しません。
これらのオペランドは，TP1/EEサービス定義のオペランドです。

49
TRL
定義した表の行長の最大値（単位：バイト）
行長については，「3.5(3)(b)データ長一覧」を参照して，各列のデータ長を求めて，それを基に求めてください。

50
UCL
更新列数

51
VCL
VARCHAR型の埋め込み変数のデータ長（単位：バイト）

52
VR1
SQLごとの埋め込み変数の数

53
WCL
1SQLの作業表の列数の合計値

54
WIN
1SQL内の作業表の構成列数の合計

55
WIX
1SQL内の作業表のインデクス数

56
WNP
作業表が確保する最大ページ数－14（単位：ページ）
作業表が確保する最大ページ数については，「3.7　作業表用DBエリアの容量見積もり」を参照して求めてください。

57
WTN
1SQL内の作業表の数

58
XM
インデクスが定義されていない場合は0，インデクスが定義されている場合は次に示す計算式から求めてください。
XM＝PL＋3×KL＋1601＋インデクス構成列中のVARCHAR型の列定義長の合計

5.1.2　計算式

XDB用ワーク領域（XDBPOOL）の見積もり式を次に示します。

ここで求めた値をXTCサービス定義（メモリ関連定義）のmemory_xdb_area_sizeオペランドに指定してください。memory_xdb_area_sizeオペランドについては，マニュアル「TP1/EE/Extended Transaction Controller 使用の手引」を参照してください。

計算式

memory_xdb_area_sizeオペランドの指定値＝
　　　MAX（計算式A，計算式B，計算式C，計算式D，計算式E，計算式F）

変数の説明

計算式A：実行系を開始するときに必要なメモリ所要量

計算式B：実行系の稼働中に必要なメモリ所要量

計算式C：実行系を終了するときに必要なメモリ所要量

計算式D：待機系を開始するときに必要なメモリ所要量

計算式E：待機系の稼働中に必要なメモリ所要量

計算式F：待機系を終了するときに必要なメモリ所要量

＜この項の構成＞

(1)　計算式A

(2)　計算式B

(3)　計算式C

(4)　計算式D

(5)　計算式E

(6)　計算式F

(1)　計算式A

計算式A（単位：バイト）＝10961684＋3080×TM＋（4097×TDP）÷4
＋1200×SQP＋160×MCL＋496×MIX
＋↓｛（8＋（88×（ARN＋10）））＋4095｝÷4096↓×4096
＋131072×↓（SCN÷4096）↓＋ICL1＋MXR＋LFD＋LFI＋LFE
＋↑TRL÷32768↑×32768＋34520×NIX

(2)　計算式B

計算式B（単位：バイト）＝計算式B1＋Σ1（計算式B2）

(a)　計算式B1

計算式B1（単位：バイト）＝
10561966＋4232×TM＋（4097×TDP）÷4＋1200×SQP＋131072×↓（SCN÷4096）↓

(b)　計算式B2

計算式B2（単位：バイト）＝
28630＋｛MAX2（B2P）｝×1.05
＋MAX｛0，（Σ2（B2S））×1.05－（SQP÷TM）×819｝
＋MAX2｛Σ3（560＋192×VR1＋Σ4（VCL＋2））｝
＋16560×TBN＋16×SCL＋16×SIX＋MAX2｛Σ3（352＋56×WCL）｝
＋MAX2｛Σ3（328＋16×WIX）｝＋320×NSQ＋LSQ＋SUB＋Σ2（B2H）

(c)　計算式B2P

計算式B2P（単位：バイト）＝776＋32×IUC＋24×CLN＋16×IDN＋16×VR1

(d)　計算式B2S

計算式B2S（単位：バイト）＝
259＋8×BON＋158×SLN＋8×TBN＋16×IUC＋16×EXN＋32×CLN
＋Σ5（データ長＋2）＋Σ6（データ長＋8）＋Σ7（データ長＋1）
＋392×TBN＋Σ8（160×TCN＋496×TIN）＋64×ICN＋624×WTN＋272×WIN
＋168×CLN＋120×ICL2＋64×UCL＋112×RWN＋104×RIN＋200×AFN
＋72×HVN＋64×CTN＋24×CST＋Σ9（データ長＋3）＋112×IDN
＋40×PDN＋12×DTS＋16×BTN＋16×RID

(e)　計算式B2H

計算式B2H（単位：バイト）＝B2HS＋B2HI＋B2HU＋B2HD＋B2HW
B2HS：SELECT文に関する見積もり項目
B2HI：INSERT文に関する見積もり項目
B2HU：UPDATE文に関する見積もり項目
B2HD：DELETE文に関する見積もり項目
B2HW：作業表に関する見積もり項目

B2HS＝1408＋COLLEN＋KL＋16×NCOL＋10×NN
B2HI＝1024＋PS＋8×TCN＋12×TCNV＋XM
B2HU＝1496＋PS＋COLLEN＋KL＋16×NCOL＋10×NN＋2×PS＋12×TCNV＋XM
B2HD＝472＋COLLEN＋KL＋16×NCOL＋10×NN＋PS＋XM
B2HW＝2152＋48×WTN＋76×WIX＋｛1096＋（8×PSW）｝×（↑WNP÷128↑）
＋｛（8×PSW）＋832｝｝×｛（↑WNP÷8↑）―（↑WNP÷128↑）｝
＋COLLEN＋KL＋16×NCOL＋10×NN＋8×TCN＋12×TCNV＋XM

(f)　変数の説明

Σ1：同時に実行するトランザクションごとに計算を行い，その合計値を求めてください。

Σ2：トランザクション内の各SQLについて計算し，合計してください。

Σ3：カーソルを複数同時にオープンする場合など，同時に実行するSQLがある場合は合計を求めてください。

Σ4：SQLに指定したVARCHAR型の埋め込み変数について合計を求めてください。

MAX2：トランザクション内で実行するSQLについてそれぞれ算出し，最大の値を代入してください。

B2P：計算式B2Pを参照してください。

B2S：計算式B2Sを参照してください。

B2H：SQL実行時のSQLごとの見積もり（計算式B2Hを参照してください）

Σ5：SQLに指定した列について合計を求めてください。データ長については，「表5-2　データ長の計算式」を参照してください。

Σ6：検索項目と埋め込み変数のデータ型について合計を求めてください。データ長については，「表5-2　データ長の計算式」を参照してください。

Σ7：INSERT文の挿入列，またはUPDATE文の更新列の合計を求めてください。データ長については，「表5-2　データ長の計算式」を参照してください。

Σ8：SQLに指定された表について合計を求めてください。ただし，表定義情報の一括先読みによって，すべての表定義情報が表定義情報プール領域に保存されている場合は0とします。

Σ9：SQL中の各定数について合計を求めてください。データ長については，「表5-2　データ長の計算式」を参照してください。

表5-2　データ長の計算式

項番 | 分類 | データ型 | データ長
1 | 数データ | INTEGER | 4
2 | SMALLINT
3 | DECIMAL(m,n) | ↓m÷2↓＋1
4 | 文字データ | CHAR(n) | n
5 | VARCHAR(n) | ↓（n＋5）÷4↓×4
6 | 時刻印データ | TIMESTAMP(p) | 7＋↑p÷2↑
7 | 行データ | ROWID | 12

（凡例）

m，n：正の整数

p：0，2，4，または6

(3)　計算式C

計算式C（単位：バイト）＝12147055＋3080×TM＋（4097×TDP）÷4
＋1200×SQP＋131072×↓（SCN÷4096）↓

(4)　計算式D

計算式D（単位：バイト）＝10618882＋3080×TM＋（4097×TDP）÷4＋1200×SQP
＋160×MCL＋496×MIX＋131072×↓（SCN÷4096）↓＋LFE

(5)　計算式E

計算式E（単位：バイト）＝11118767＋3080×TM＋（4097×TDP）÷4＋1200×SQP
＋131072×↓（SCN÷4096）↓＋LUR＋56×TCN＋PL＋3×KL

(6)　計算式F

計算式F（単位：バイト）＝ 計算式C

5.2　更新バッファが使用するメモリの見積もり

更新バッファが使用するメモリ所要量は，次に示す計算式から求めてください。

計算式

更新バッファが使用するメモリ所要量（単位：バイト）＝
　　　↑（64＋表更新情報の容量＋行更新情報の総容量）÷228728↑×262144

＜この節の構成＞

(1)　表更新情報の容量

(2)　行更新情報の総容量

(3)　行更新情報の容量

(1)　表更新情報の容量

表更新情報の容量は，次に示す計算式から求めてください。

計算式

表更新情報の容量（単位：バイト）＝↑TBL÷16↑×256＋TBL×8448

変数の説明

TBL：トランザクション中の更新表数

(2)　行更新情報の総容量

行更新情報の総容量は，次に示す計算式から求めてください。

計算式

変数の説明

TBL：トランザクション中の更新表数

(3)　行更新情報の容量

行更新情報の容量は，次に示す計算式から求めてください。

計算式

行更新情報の容量（単位：バイト）＝
　　　（64＋36×IDX）×（INS＋DEL）＋（72＋36×IDX＋行長※）×UPD

変数の説明

IDX：表に定義されているインデクス数

INS：トランザクション中のINSERT回数

UPD：トランザクション中のUPDATE回数

DEL：トランザクション中のDELETE回数

注※

「3.5(3)(b)データ長一覧」を参照して，行長を求めてください。

5.3　TP1/EEプロセスで確保するメモリの見積もり

ここで求めた値をTP1/EEサービス定義（メモリ関連定義）のmax_mem_sizeオペランドの指定値（TP1/EEプロセスで確保するメモリの最大サイズ）に加算してください。max_mem_sizeオペランドについては，マニュアル「TP1/Server Base Enterprise Option 使用の手引」を参照してください。

計算式

max_mem_sizeオペランドに加算する値（単位：バイト）＝
　　　28672＋4096×（Ｔ＋tpc＋8）＋512×ARN＋XTS

変数の説明

この計算式で使用する変数を次に示します。

項番
変数
説明

1
T
スレッド数：
thread_noオペランドの値＋reserve_thread_noオペランドの値＋recover_thread_noオペランドの値＋send_thread_noオペランドの値＋1

2
tpc
trn_tran_process_countオペランドの値

3
ARN
eexdbareaオペランドの指定数

4
XTS
XDBトレース情報の管理領域サイズ：
216＋｛（128＋XBS×1024）×XBN｝＋128×XFN＋128＋XBS×1024＋（64＋XES×1024）×TA
XDBトレース情報の管理領域サイズは，xdb_trace_outオペランドの指定値に関係なく確保されます。

5
XBS
XDBトレース情報をスタックするバッファサイズ（xdb_trace_buffer_sizeオペランドの値）

6
XBN
XDBトレース情報をスタックするバッファの面数（xdb_trace_buffer_numberオペランドの値）

7
XFN
XDBトレース情報ファイルの世代数（xdb_trace_file_numberオペランドの値）

8
XES
一時バッファ領域のサイズ（xdb_trace_entry_sizeオペランドの値）

9
TA
総スレッド数：
8＋TS＋TR＋TM＋TV＋TL＋TK＋TN＋TX＋TU＋TF＋TP＋TH＋TJ＋TT

10
TF
MCP受信スレッド数：
TFts＋TFtc＋TFu

11
TFts
MCP受信スレッド数（TCP Server）：
eemcpcn定義コマンドの-yオプションにmode=serverを指定したときの，-r ipaddrと-r portnoの組み合わせの数
ただし，-r hostnameを指定した場合は，IPアドレス変換後の値とポート番号との組み合わせのなかで，ユニークな組み合わせの数となります。

12
TFtc
MCP受信スレッド数（TCP Client）：
eemcpcn定義コマンドの-yオプションにmode=clientを一つ以上指定している場合は1，それ以外の場合は0

13
TFu
MCP受信スレッド数（UDP）：
eemcple定義コマンドのUDP用定義を一つ以上指定している場合は1，それ以外の場合は0

14
TH
系監視スレッド：
xtc_use=Yの場合は1，Nの場合は0

15
TJ
XDBトレーススレッド：
xdb_use=Yの場合は1，Nの場合は0

16
TK
統計情報スレッド数：
trb_stc_use=Yの場合は1，Nの場合は0

17
TL
rap受信スレッド数：
rap_listen_portオペランドを指定した場合は1，省略した場合は0

18
TM
処理スレッド数：
thread_noオペランドの値＋reserve_thread_noオペランドの値
ただし，reserve_start_pce_no=0の場合は，reserve_thread_noオペランドの値を加算する必要はありません。

19
TN
ネームスレッド数：
name_use=Yの場合は1，Nの場合は0

20
TP
UDP受信スレッド数：

xtc_use=Yの場合は，myudprcvdef定義コマンドに指定したポート番号の数＋clgrpdef定義コマンドに指定したポート番号の数

xtc_use=Nの場合は0

ただし，cluster_mode=Nの場合は，clgrpdef定義コマンドに指定したポート番号の数を加算する必要はありません。

21
TR
受信スレッド数：
mysvgdef定義コマンドに指定した「ホスト名：ポート番号」の組み合わせ数

22
TS
送信スレッド数：

xtc_use=Yの場合はsend_thread_noオペランドの値

xtc_use=Nの場合で，かつrpc_cmtsend_retry=Yのときは1，Nのときは0

23
TT
PPトレーススレッド：
mcp_use=Yの場合は1，Nの場合は0

24
TV
回復スレッド数：
recover_thread_noオペランドの値

25
TX
転送スレッド数：

name_useオペランドの値がYで，かつrpc_loadbalanceまたはrpc_transfer_othersvgオペランドの値のどちらかがYの場合は1

それ以外の場合は0

26
TU
rapクライアントスレッド数：
eesvgdef定義コマンドの-tオプションにRAP指定がある場合は1，ない場合は0

注

変数の説明文中には，TP1/EEサービス定義のオペランドとMCPのMCP構成定義のオペランドがあります。TP1/EEサービス定義については，マニュアル「TP1/Server Base Enterprise Option 使用の手引」を参照してください。MCP構成定義については，マニュアル「TP1/EE/Message Control Extension 使用の手引」を参照してください。

5.4　システムワーク領域の最大サイズの見積もり

システムワーク領域の最大サイズ（system_work_sizeオペランドに加算する値）の見積もり式を次に示します。

計算式

system_work_sizeオペランドに加算する値（単位：バイト）＝A×B

変数の説明

A：eexdbsqlコマンドの電文長

Ａ＝100＋92＋SL＋OL

B：Ａの値が4096バイトを超えるeexdbsqlコマンドの同時実行数

SL：eexdbsqlコマンドで実行するSQL文の最大長（単位：バイト）

OL：eexdbsqlコマンドの-oオプションで指定する出力ファイルの名称長（単位：バイト）

「A：eexdbsqlコマンドの電文長」の値が4097バイト以上になる場合に，ここで求めた値をTP1/EEサービス定義（メモリ関連定義）のsystem_work_sizeオペランドの指定値（システムワーク領域最大サイズ）に加算してください。system_work_sizeオペランドについては，マニュアル「TP1/Server Base Enterprise Option 使用の手引」を参照してください。

5.5　更新ログの見積もり

1トランザクション当たりの更新ログの容量は，次に示す計算式から求めてください。

計算式

変数の説明

NI：INSERTした行数

NU：UPDATEした行数

ND：DELETEした行数

Lk：k番目にINSERTした行の行長

Mk：k番目にUPDATEした行の行長

6.　環境設定

この章では，XDBの環境設定について説明します。

＜この章の構成＞

6.1　環境設定手順

6.2　インストール前の確認

6.3　XDBのインストール

6.4　TP1/Server Baseのユーザサービス定義の設定

6.5　XDBサービス定義の作成

6.6　定義系SQL文記述ファイルの作成（表およびインデクスの定義）

6.7　インポート制御ファイルおよびエクスポート制御ファイルの作成

6.8　入力データファイルの準備

6.1　環境設定手順

XDBの環境設定手順を次の図に示します。

図6-1　XDBの環境設定手順

注意

実行系も待機系も，同じ手順で環境設定を行ってください。

また，XDBサービス定義の指定内容についても，実行系と待機系を同じにしてください。

各項目の作業詳細については，次節以降で説明します。

6.2　インストール前の確認

ここでは，XDBをインストールする前に確認が必要な項目について説明します。

＜この節の構成＞

6.2.1　カーネルパラメタの調整

6.2.1　カーネルパラメタの調整

DBエリアを設計した結果，指定値を見直す必要があるカーネルパラメタを次の表に示します。

表6-1　指定値を見直す必要のあるカーネルパラメタ

項番
名称
内容

1
SHMALL
このパラメタには，システム全体の共用メモリページ数の上限を指定します。
DBエリアが使用する共用メモリページ数以上の値を指定する必要があります。DBエリアが自動増分するときの増加分も考慮して指定してください。共用メモリページ数がこのパラメタの指定値を超えた場合，ENOSPCで上位にエラーを返します。

2
SHMMNI
このパラメタには，システム全体の共用メモリセグメント数の上限を指定します。
DBエリアが使用する共用メモリセグメント数以上の値を指定する必要があります。XDBは，DBエリアの初期確保時に，初期確保共用メモリ面数※1分の共用メモリセグメントを確保します。さらに，DBエリアを自動増分するたびに一つの共用メモリセグメントを確保します。そのため，増加分を考慮した値を指定してください。共用メモリセグメント数がこのパラメタの指定値を超えた場合，ENOSPCで上位にエラーを返します。

3
SHMMAX
このパラメタには，共用メモリセグメントの大きさの上限をバイト単位で指定します。
共用メモリ1面分の確保サイズ※2がいちばん大きいDBエリアのサイズ以上の値を指定する必要があります。共用メモリ1面分の確保サイズがいちばん大きいDBエリアのサイズより小さい値を指定した場合は，EINVALでプロセスが終了します。

4
SHMMIN
このパラメタには，共用メモリセグメントの大きさの下限をバイト単位で指定します。
共用メモリ1面分の確保サイズ※2がいちばん小さいDBエリアのサイズより小さい値を指定する必要があります。共用メモリ1面分の確保サイズがいちばん小さいDBエリアのサイズ以上の値を指定した場合は，EINVALでプロセスが終了します。

注※1

初期確保共用メモリ面数は，XDBサービス定義のeexdbareaオペランドの-aオプションで指定します。

注※2

共用メモリ1面分の確保サイズは，XDBサービス定義のeexdbareaオペランドの-lオプションで指定します。

6.3　XDBのインストール

XDBのインストール方法については，リリースノートを参照してください。

XDBのインストール後のディレクトリ構成については，マニュアル「TP1/EE/Extended Transaction Controller 使用の手引」の「インストールディレクトリとファイル」を参照してください。

なお，XDBをインストールすると，XDBのサンプルUAPもインストールされます。サンプルUAPのディレクトリ構成については，マニュアル「TP1/EE/Extended Data Cache SQLプログラミング」を参照してください。

6.4　TP1/Server Baseのユーザサービス定義の設定

XDBを使用する場合，TP1/Server Baseのユーザサービス定義にここで説明するオペランドを指定する必要があります。

＜この節の構成＞

形式

オペランドの説明

形式

putenv形式のオペランド

〔putenv EEXDBDEFFILE　XDBサービス定義ファイル名〕

set形式のオペランド

〔set setrlimit_memlock = メモリ固定上限値〕

オペランドの説明

putenv形式のオペランド

●EEXDBDEFFILE　XDBサービス定義ファイル名

　　～〈識別子〉

XDBサービス定義を記述したファイル名を指定します。

XDBサービス定義については，「6.5　XDBサービス定義の作成」を参照してください。

set形式のオペランド

●setrlimit_memlock = メモリ固定上限値

プロセスの起動時に，setrlimitシステムコールでRLIMIT_MEMLOCKのソフトリミット，ハードリミットを指定値で設定します。

指定できる値の範囲は，setrlimitシステムコールで指定できる値の範囲と同じです。

注意

このオペランドはユーザサービス単位で指定しますが，マシン内で使用するすべての共用メモリのサイズを合計した値を指定してください。

6.5　XDBサービス定義の作成

XDBサービス定義でXDBの実行環境を設定します。テキストエディタを使用してXDBサービス定義を作成します。XDBサービス定義の記述形式は，TP1/EEのシステム定義の記述形式と同じです。記述形式については，マニュアル「TP1/Server Base Enterprise Option 使用の手引」を参照してください。

XDBサービス定義を作成したあと，eexdbdefchkコマンドを実行して，XDBサービス定義の指定内容が妥当かどうかをチェックしてください。

＜この節の構成＞

形式

オペランドの説明

注意事項

形式

set形式のオペランド

〔set xdb_memory_fixed = Y | N〕
〔set xdb_memory_terminate_remove = Y | N〕
〔set xdb_schema_definition_file = "定義系SQL文記述ファイル名"〕
〔set xdb_start_import_control_file = "インポート制御ファイル名"〕
〔set xdb_stop_export_control_file = "エクスポート制御ファイル名"〕
〔set xdb_trace_out= Y | N〕
〔set xdb_trace_file_size = XDBトレース情報ファイルのサイズ〕
〔set xdb_trace_file_number = XDBトレース情報ファイルの世代数〕
〔set xdb_trace_buffer_size = XDBトレース情報をスタックするバッファサイズ〕
〔set xdb_trace_buffer_number = XDBトレース情報をスタックするバッファの面数〕
〔set xdb_trace_entry_size = 一時バッファ領域サイズ〕
〔set xdb_sql_trace_out = Y｜N〕
〔set xdb_sql_param_trace = NO｜IN｜OUT｜INOUT〕
〔set xdb_sql_accesspath_out = Y｜N〕
〔set xdb_sql_text_size = SQL文の出力サイズの上限〕
〔set xdb_sql_param_size = パラメタトレース情報の出力サイズの上限〕
〔set xdb_tabledefpool_size = 表定義プールサイズ〕
〔set xdb_table_preread = Y | N〕
〔set xdb_sqlpool_size = SQLプールサイズ〕
〔set xdb_lang = 文字コード〕
〔set xdb_forward_time_limit = DB転送制限時間〕
〔set xdb_import_work_directory = インポート時の作業ディレクトリ〕
〔set xdb_wtor_interval_time = eetrbwtorコマンド実行待ちメッセージ出力間隔〕
〔set xdb_default_service_mem_size = 初期確保時のXDBスレッド領域サイズ〔，追加確保時のXDBスレッド領域サイズ〕〕

コマンド形式のオペランド

｛｛eexdbarea -n DBエリア名
         〔-t DBエリア種別〕
         〔-a 初期確保共用メモリ面数〔，最大確保共用メモリ面数〕〕
         〔-l 共用メモリ1面分の確保サイズ〕
         〔-p ページサイズ〕
         〔-s セグメントサイズ〕
         〔-m 警告メッセージ出力タイミング1，警告メッセージ出力タイミング2〕
        ｝｝
｛｛eexdbsrv -s サービス名
         〔-m 初期確保時のXDBスレッド領域サイズ
         〔，追加確保時のXDBスレッド領域サイズ〕〕
        ｝｝

オペランドの説明

XDBサービス定義の各オペランドについて説明します。

set形式のオペランド

●xdb_memory_fixed = Y | N

　　～《N》

DBエリアが使用する共用メモリをメモリ上に固定するかどうかを指定します。

Y：

DBエリアが使用する共用メモリをメモリ上に固定します。Yを指定すると，DBエリアが使用する共用メモリのページングによる性能低下を防げます。

DBエリアが使用する共用メモリをメモリ上に固定する場合は，「3.4.5　共用メモリの固定化」を参照してください。

N：

DBエリアが使用する共用メモリをメモリ上に固定しません。実メモリの大きさによっては，DBエリア以外で使用している共用メモリのページングが発生し，性能に影響を及ぼすことがあります。

注意

このオペランドにYを指定する場合は，setrlimit_memlockオペランドを指定してください。setrlimit_memlockオペランドについては，「6.4　TP1/Server Baseのユーザサービス定義の設定」の「set形式のオペランド」を参照してください。

●xdb_memory_terminate_remove = Y | N

　　～《N》

XDBの正常終了時，DBエリアが使用する共用メモリを解放するかどうかを指定します。

Y：

DBエリアが使用する共用メモリを解放します。

N：

DBエリアが使用する共用メモリを解放しません。

次に示す理由によって，通常はXDBの正常終了時に共用メモリを解放しません。

次回のXDBの開始時にDBエリアを作成するための共用メモリが確保できなくなるのを防ぐため

異常終了時に共用メモリの内容を障害情報として取得できるようにするため

このため，できる限り共用メモリを解放しないでください。

●xdb_schema_definition_file = "定義系SQL文記述ファイル名"

　　～〈パス名〉((1～510文字))

表およびインデクスの定義文（CREATE TABLE文，CREATE INDEX文）を記述した定義系SQL文記述ファイルの名称を絶対パス名で指定します。

XDBの開始時，XDBはこのオペランドに指定した定義系SQL文記述ファイルを読み込んで表およびインデクスを作成します。定義系SQL文記述ファイルについては，「6.6　定義系SQL文記述ファイルの作成（表およびインデクスの定義）」を参照してください。

●xdb_start_import_control_file = "インポート制御ファイル名"

　　～〈パス名〉((1～510文字))

インポート制御ファイルの名称を絶対パス名で指定します。

XDBは，XDBの開始時にインポート制御ファイルの指定に従ってインポート処理を実行します。インポート制御ファイルについては，「6.7　インポート制御ファイルおよびエクスポート制御ファイルの作成」の「インポート制御ファイルの作成」を参照してください。

注意

このオペランドを省略した場合，XDBの開始時にインポート処理は行われません。

●xdb_stop_export_control_file = "エクスポート制御ファイル名"

　　～〈パス名〉((1～510文字))

エクスポート制御ファイルの名称を絶対パス名で指定します。

XDBは，XDBの終了時にエクスポート制御ファイルの指定に従ってエクスポート処理を実行します。エクスポート制御ファイルについては，「6.7　インポート制御ファイルおよびエクスポート制御ファイルの作成」の「エクスポート制御ファイルの作成」を参照してください。

注意

このオペランドを省略した場合，XDBの終了時にエクスポート処理は行われません。

●xdb_trace_out = Y | N

　　～《N》

XDBトレース情報を取得するかどうかを指定します。XDBトレース情報については，「7.4　XDBトレース情報の取得」を参照してください。

Y：

XDBトレース情報を取得します。

N：

XDBトレース情報を取得しません。

●xdb_trace_file_size = XDBトレース情報ファイルのサイズ

　　～〈符号なし整数〉((800～4000000))《40000》（単位：キロバイト）

XDBトレース情報ファイルの容量をキロバイト単位で指定します。ここで指定した値が1ファイル当たりの容量になります。

なお，このオペランドの指定値は，次に示す条件を満たすようにしてください。

xdb_trace_file_size＞xdb_trace_buffer_size＞xdb_trace_entry_size
＞xdb_sql_text_size，xdb_sql_param_size

XDBトレース情報ファイルの容量見積もりについては，「7.4.2(2)XDBトレース情報量の見積もり」を参照してください。

●xdb_trace_file_number = XDBトレース情報ファイルの世代数

　　～〈符号なし整数〉((3～100))《3》

XDBトレース情報ファイルの世代数を指定します。

$DCDIR/spool/dceeinf/xdbディレクトリ下に，このオペランドで指定した数のXDBトレース情報ファイルが作成されます。

●xdb_trace_buffer_size = XDBトレース情報をスタックするバッファサイズ

　　～〈符号なし整数〉((400～20000))《400》（単位：キロバイト）

XDBトレース情報をスタックするバッファサイズをキロバイト単位で指定します。XDBトレース情報はファイルに出力する前に一度メモリ上にため込んだあと，ファイルに出力しています。そのため，このオペランドの値を小さくし過ぎると，XDBトレース情報のファイルへの出力回数が増えるため，性能が低下することがあります。

このオペランドは，ほかのオペランドの指定値によって指定できる値の範囲が決まります。オペランド間の指定値の関係については，xdb_trace_file_sizeオペランドの説明を参照してください。

●xdb_trace_buffer_number = XDBトレース情報をスタックするバッファの面数

　　～〈符号なし整数〉((3～200))《3》

XDBトレース情報をスタックするバッファをメモリ上に何面確保するかを指定します。

●xdb_trace_entry_size = 一時バッファ領域サイズ

　　～〈符号なし整数〉((40～10000))《40》（単位：キロバイト）

XDBトレース情報をスレッド単位で格納する一時バッファ領域のサイズをキロバイト単位で指定します。

スレッド単位で取得したXDBトレース情報の大きさが，xdb_trace_entry_sizeの値を超える場合，XDBトレース情報は取得されません。

このオペランドは，ほかのオペランドの指定値によって指定できる値の範囲が決まります。オペランド間の指定値の関係については，xdb_trace_file_sizeオペランドの説明を参照してください。

●xdb_sql_trace_out = Y｜N

　　～《N》

SQLトレース情報およびSQL単位情報を出力するかどうかを指定します。SQLトレース情報およびSQL単位情報については，「7.5　SQLトレース情報，パラメタトレース情報，およびSQL単位情報の表示」を参照してください。

Y：

SQLトレース情報およびSQL単位情報を出力します。

N：

SQLトレース情報およびSQL単位情報を出力しません。

このオペランドは，xdb_trace_outオペランドにYを指定した場合に有効となります。

●xdb_sql_param_trace = NO｜IN｜OUT｜INOUT

　　～《NO》

パラメタトレース情報を出力するかどうかを指定します。パラメタトレース情報については，「7.5.3　パラメタトレース情報に表示される項目」を参照してください。

NO：

パラメタトレース情報を出力しません。

IN：

パラメタトレース情報を出力します。入力用パラメタ情報だけを出力します。

OUT：

パラメタトレース情報を出力します。検索データ情報だけを出力します。

INOUT：

パラメタトレース情報を出力します。入力用パラメタ情報および検索データ情報の両方を出力します。

このオペランドは，xdb_trace_outオペランドにYを指定した場合に有効となります。

●xdb_sql_accesspath_out = Y｜N

　　～《N》

アクセスパス情報を出力するかどうかを指定します。アクセスパス情報については，「7.6　アクセスパス情報の表示」を参照してください。

Y：

アクセスパス情報を出力します。

N：

アクセスパス情報を出力しません。

このオペランドは，xdb_trace_outオペランドにYを指定した場合に有効となります。

なお，xdb_sql_trace_outオペランドにNを指定，または省略した場合，アクセスパス情報に加えてSQLのテキストも出力します。

●xdb_sql_text_size = SQL文の出力サイズの上限

　　～〈符号なし整数〉((4096～300000))《4096》（単位：バイト）

SQLトレース情報に出力する，SQLのテキストの出力サイズの上限をバイト単位で指定します。上限を超えた部分については，切り捨てられます。

このオペランドは，ほかのオペランドの指定値によって指定できる値の範囲が決まります。オペランド間の指定値の関係については，xdb_trace_file_sizeオペランドの説明を参照してください。

●xdb_sql_param_size = パラメタトレース情報の出力サイズの上限

　　～〈符号なし整数〉((4～32008))《256》（単位：バイト）

パラメタトレース情報の出力サイズの上限をバイト単位で指定します。上限を超えた部分のパラメタトレース情報は切り捨てられます。

パラメタトレース情報については，「7.5.3　パラメタトレース情報に表示される項目」を参照してください。

このオペランドは，xdb_trace_outオペランドにYを指定し，xdb_sql_param_traceオペランドにNO以外を指定した場合に有効となります。

このオペランドの指定値を大きくすると，出力する情報量が増えます。そのため，XDBトレース情報ファイルのサイズ（xdb_trace_file_sizeオペランドの指定値）も大きくする必要があります。

このオペランドは，ほかのオペランドの指定値によって指定できる値の範囲が決まります。オペランド間の指定値の関係については，xdb_trace_file_sizeオペランドの説明を参照してください。

●xdb_tabledefpool_size = 表定義プールサイズ

　　～〈符号なし整数〉((0～51200))《500》（単位：キロバイト）

表定義情報を格納する表定義プールサイズをキロバイト単位で指定します。

0を指定した場合は，表定義プール機能は使用できません。

表定義プールサイズの見積もり式については，「4.2.2　表定義プールサイズの見積もり」を参照してください。

●xdb_table_preread = Y | N

　　～《N》

XDBの開始時に表定義情報の一括先読みをするかどうかを指定します。

Y：

XDBの開始時に表定義情報の一括先読みをします。

N：

XDBの開始時に表定義情報の一括先読みをしません。

表定義情報の一括先読みについては，「4.2.4　表定義情報の一括先読み」を参照してください。

●xdb_sqlpool_size = SQLプールサイズ

　　～〈符号なし整数〉((0，40～1000000))《0》（単位：キロバイト）

SQLプールサイズをキロバイト単位で指定します。

0を指定した場合は，SQLプール機能を使用できません。また，40より小さい値を指定した場合には，40が指定されたと仮定されます。

SQLプール機能については，「4.1　SQLプール機能」を参照してください。

●xdb_lang = 文字コード

　　～《SJIS》

XDBで使用するデータの文字コード種別を指定します。指定できる文字コードを次に示します。

SJIS：

シフトJIS

TP1/Server Baseのシステム共通定義の環境変数LANGで指定する文字コードと，xdb_langオペランドで指定する文字コードを合わせてください。文字コードの設定が異なると，メッセージテキスト中の可変部分が正しく出力されないことがあります。

●xdb_forward_time_limit = DB転送制限時間

　　～〈符号なし整数〉((1～65535))《1800》（単位：秒）

XDB開始時のインポート処理で，実行系から待機系にインポートデータを転送する制限時間を秒単位で指定します。指定した制限時間を超えてもインポートデータの転送が完了しない場合，待機系は開始されません。

●xdb_import_work_directory = インポート時の作業ディレクトリ

　　～〈パス名〉((1～400文字))

インポート処理時に作成される一時ファイルを格納する作業ディレクトリを指定します。

ディレクトリに指定できる文字の規則，および作成される一時ファイルの容量については，「10．運用コマンド」の「eexdbimport（表データのインポート）」の-wオプションを参照してください。

●xdb_wtor_interval_time = eetrbwtorコマンド実行待ちメッセージ出力間隔

　　～〈符号なし整数〉((0～60))《5》（単位：分）

ファイルの出力障害によってeetrbwtorコマンドの実行待ちとなっている間，KFSB56208-Qメッセージを出力する間隔を分単位で指定します。

0を指定した場合は，ファイルの出力障害の発生時に一度だけ，KFSB56208-Qメッセージが出力されます。

●xdb_default_service_mem_size = 初期確保時のXDBスレッド領域サイズ〔，追加確保時のXDBスレッド領域サイズ〕

初期確保時のXDBスレッド領域サイズ：

～〈符号なし整数〉((1～4194303))《256》（単位：キロバイト）

追加確保時のXDBスレッド領域サイズ：

～〈符号なし整数〉((1～4194303))《256》（単位：キロバイト）

XDBのサービスで確保するXDBスレッド領域の初期確保サイズと追加確保サイズのデフォルト値を指定します。

eexdbsrvオペランドに指定しないサービスについては，このオペランドの指定値が適用されます。

TP1/EEサービス定義のユーザサービス関連定義で指定する次の表に示すトランザクションを実行するUAPについては，このオペランドの指定値が適用されます。

表6-2　xdb_default_service_mem_sizeオペランドの指定値が適用されるトランザクション

項番 | トランザクション種別 | トランザクション名称
1 | MI | 初期化トランザクション
2 | ME | 終了トランザクション
3 | E1 | エラートランザクション1
4 | E2 | エラートランザクション2
5 | E3 | エラートランザクション3
6 | E4 | エラートランザクション4
7 | ES | エラートランザクションS
8 | ER | エラートランザクションR
9 | UI | 実行系連絡トランザクション

■XDBスレッド領域とは

トランザクション処理を行うメモリ領域のことをXDBスレッド領域といいます。XDBスレッド領域はトランザクション単位に確保されます。

トランザクションの開始時に，初期確保時のXDBスレッド領域サイズに指定した大きさのXDBスレッド領域が確保され，この領域を使用してトランザクション処理が行われます。トランザクションの処理中に，初期確保したXDBスレッド領域が不足した場合，追加確保時のXDBスレッド領域サイズに指定した大きさのXDBスレッド領域が追加確保されます。

XDBスレッド領域の追加確保時に，追加確保時のXDBスレッド領域サイズに指定した大きさのXDBスレッド領域サイズよりも大きなサイズの領域が必要になった場合は，そのサイズのXDBスレッド領域を動的に確保します。

■XDBスレッド領域サイズの見積もり

XDBスレッド領域の追加確保が発生すると，トランザクションの処理性能が低下する原因になります。そのため，基本的にはXDBスレッド領域の追加確保が発生しないように，XDBスレッド領域サイズを見積もってください。XDBスレッド領域サイズの見積もりについては，「5.1.2(2)(b)計算式B2」を参照してください（計算式B2がXDBスレッド領域サイズの見積もり式です）。

XDBスレッド領域は，トランザクションの開始時に一括して確保されるため，XDBスレッド領域の見積もりが正しく行われていない状態で，トランザクションが多重実行された場合，メモリ不足が発生するおそれがあります。この場合，XDBスレッド領域の追加確保が発生しますが，この追加確保処理でメモリ不足が発生するとトランザクションがエラーになります。

■XDBスレッド領域サイズのチューニング

XDBスレッド領域サイズを正しく見積もった場合，基本的にはXDBスレッド領域の追加確保は発生しませんが，確保した領域のフラグメンテーションなどによって追加確保が発生することがあります。そのため，TASKTM情報に出力される次に示す情報を参照して，XDBスレッド領域サイズのチューニングを定期的に行ってください。

XDB_スレッド領域追加確保回数（XDBスレッド領域の追加確保が発生した回数）

XDB_スレッド領域最大使用サイズ（トランザクションの処理中に実際に使用されたXDBスレッド領域のサイズ）

TASKTM情報については，「7.3.1　TASKTM情報に出力されるXDBに関する情報」を参照してください。

XDBスレッド領域サイズのチューニング方法を次に示します。

「XDB_スレッド領域最大使用サイズ＜初期確保時のXDBスレッド領域サイズ」で，かつXDB_スレッド領域追加確保回数が0回の場合
トランザクション処理が最も良い状態で行われているため，XDBスレッド領域サイズのチューニングは必要ありません。

「XDB_スレッド領域最大使用サイズ＞初期確保時のXDBスレッド領域サイズ」で，かつXDB_スレッド領域追加確保回数が1回以上の場合
XDBスレッド領域サイズが不足しています。XDBスレッド領域サイズを見積もり直して，初期確保時のXDBスレッド領域サイズを大きくしてください。

「XDB_スレッド領域最大使用サイズ＜初期確保時のXDBスレッド領域サイズ」で，かつXDB_スレッド領域追加確保回数が1回以上の場合
XDBスレッド領域でフラグメンテーションが発生したため，XDBスレッド領域の追加確保が発生した可能性があります。初期確保時のXDBスレッド領域サイズを大きくすると，XDBスレッド領域の追加確保が解消される可能性があります。それでもXDBスレッド領域の追加確保が発生する場合は，4のチューニングを検討してください。

2または3のチューニングを実施したが，XDBスレッド領域の追加確保が発生している場合
XDBスレッド領域の初期確保時にメモリ不足が発生し，追加確保したXDBスレッド領域でトランザクション処理が行われている可能性があります。メモリ見積もりを再度行い，XTCサービス定義（メモリ関連定義）のmemory_xdb_area_sizeおよびmemory_xdb_limit_sizeオペランドの指定値を見直してください。

コマンド形式のオペランド

●eexdbarea

｛｛eexdbarea  -n DBエリア名
        〔-t DBエリア種別〕
        〔-a 初期確保共用メモリ面数〔，最大確保共用メモリ面数〕〕
        〔-l 共用メモリ1面分の確保サイズ〕
        〔-p ページサイズ〕
        〔-s セグメントサイズ〕
        〔-m 警告メッセージ出力タイミング1，警告メッセージ出力タイミング2〕
         ｝｝

DBエリアを定義します。定義するDBエリアの数だけこのオペランドを指定します。DBエリアについては，「2.2　表およびインデクスの格納領域（DBエリア）」を参照してください。

-n DBエリア名

～〈DBエリア名〉((1～30文字))

DBエリア名を指定します。

DBエリア名に指定できる文字列は，英数字，ハイフン（-），および下線（_）です。ただし，先頭の文字は必ず英字にする必要があります。

なお，DBエリア名にEDMST（マスタ用DBエリアの名称）およびEDDIC（ディクショナリ用DBエリアの名称）は指定できません。

また，DBエリア名を重複して指定した場合，一つ目の指定だけが有効となり，二つ目以降の指定は無効となります。

-t DBエリア種別

～《DATA》

DBエリアの種別を指定します。

このオプションを省略した場合はDATAが仮定されます。

DATA：

このDBエリアを表用DBエリアとして使用する場合に指定します。表用DBエリアは一つ以上定義する必要があります。

INDEX：

このDBエリアをインデクス用DBエリアとして使用する場合に指定します。

WORK：

このDBエリアを作業表用DBエリアとして使用する場合に指定します。作業用DBエリアは必ず一つ定義してください。二つ以上は定義できません。

なお，DBエリア種別にWORKを指定した場合は，DBエリア名（-nオプション）とページサイズ（-pオプション）の指定だけが有効となり，そのほかのオプションの指定はシステムが決定します（指定しても無視されます）。

-a 初期確保共用メモリ面数〔，最大確保共用メモリ面数〕

DBエリアの初期確保共用メモリ面数，および最大確保共用メモリ面数を指定します。

初期確保共用メモリ面数：

～〈符号なし整数〉((1～65535))《1》

XDBの開始時に確保する共用メモリ面数を指定します。

XDBの開始時に確保する共用メモリサイズは次のようになります。

初期確保共用メモリ面数×共用メモリ1面分の確保サイズ（-lオプションの指定値）

このオプションを省略した場合，XDBの開始時に確保される共用メモリ面数は1面になります。

最大確保共用メモリ面数：

～〈符号なし整数〉((1～65535))

DBエリアが使用する共用メモリ面数の上限を指定します。

この指定を省略した場合，上限が設定されていないとしてXDBは処理を行います。

なお，最大確保共用メモリ面数には，初期確保共用メモリ面数より大きな値を指定してください。

（例）このオプションに-a 2,10を指定した場合

XDBの開始時に共用メモリ面数2面を確保します。DBエリアが自動増分するときに，共用メモリ面数を1面ずつ増やしていきますが，10面が上限となり，11面以上は取得されません。

-l 共用メモリ1面分の確保サイズ

～〈符号なし整数〉((3200～2415919103))《3200》（単位：キロバイト）

DBエリアが使用する共用メモリ1面のサイズをキロバイト単位で指定します。

DBエリアが自動増分する場合，共用メモリ面数を1面ずつ増やしていくため，このオプションで指定したサイズが増分するときのサイズになります。

-p ページサイズ

～〈符号なし整数〉((4096～32768))《32768》（単位：バイト）

DBエリアのページサイズをバイト単位で指定します。ページサイズは2048の倍数で指定します。2048の倍数でない場合は，XDBが2048の倍数になるように切り上げます。例えば，8000を指定した場合，8192が指定されたと仮定されます。

-s セグメントサイズ

～〈符号なし整数〉((1～80))《10》（単位：ページ）

1セグメント当たりのページ数を指定します。

例えば，このオプションに20を指定した場合，1セグメントは20ページで構成されます。

-m 警告メッセージ出力タイミング1，警告メッセージ出力タイミング2

～〈符号なし整数〉

このオペランドは，-aオプションに最大確保共用メモリ面数が指定された場合に有効となります。このオペランドは共用メモリ面数で指定します。

共用メモリを追加確保した面数が，このオペランドの指定値を超えた場合は，メッセージが出力されます。このオプションを省略した場合は，共用メモリを追加確保したメッセージだけが出力されます。

次に示す条件を満たすように，各オペランドの値を指定してください。

初期確保共用メモリ面数＜警告メッセージ出力タイミング1＜警告メッセージ出力タイミング2
＜最大確保共用メモリ面数

eexdbareaオペランドの指定例を次に示します。

eexdbarea -n DBDATA01¥
         -t DATA¥
         -a 10,50¥
         -l 3200¥
         -p 32768¥
         -s 10¥
         -m 40,45

eexdbarea -n DBINDX01¥
         -t INDEX¥
         -a 5,20¥
         -l 3200¥
         -p 32768¥
         -s 10¥
         -m 15,18

eexdbarea -n DBWORK01¥
         -t WORK¥
         -p 32768

●eexdbsrv

｛｛eexdbsrv -s サービス名
           〔-m 初期確保時のXDBスレッド領域サイズ
           〔，追加確保時のXDBスレッド領域サイズ〕〕
          ｝｝

XDBのサービスで確保するXDBスレッド領域の初期確保サイズと追加確保サイズを指定します。

-s サービス名

～〈識別子〉((1～31文字))

対象とするサービスの名称を指定します。TP1/EEサービス定義のserviceオペランドで指定しているサービス名を指定してください。

同じサービス名を指定した場合，二つ目以降の指定は無視されます。

ここで指定した以外のサービスについては，xdb_default_service_mem_sizeオペランドの指定値に従って動作します。

-m 初期確保時のXDBスレッド領域サイズ〔，追加確保時のXDBスレッド領域サイズ〕

初期確保時のXDBスレッド領域サイズ：

～〈符号なし整数〉((1～4194303))（単位：キロバイト）

追加確保時のXDBスレッド領域サイズ：

～〈符号なし整数〉((1～4194303))（単位：キロバイト）

-sオプションに指定したサービスで確保するXDBスレッド領域の初期確保サイズと追加確保サイズを指定します。

XDBスレッド領域，およびXDBスレッド領域のチューニング方法については，xdb_default_service_mem_sizeオペランドの説明を参照してください。

eexdbsrvオペランドを省略した場合，または-mオプションに指定する項目を省略した場合に確保されるXDBスレッド領域サイズを次の表に示します。

表6-3　eexdbsrvオペランドを省略した場合，または-mオプションに指定する項目を省略した場合に確保されるXDBスレッド領域サイズ

項番 | eexdbsrvオペランドの指定 | -mオプションの指定 | 確保されるXDBスレッド領域サイズ
初期確保サイズの指定 | 追加確保サイズの指定 | 初期確保されるXDBスレッド領域サイズ | 追加確保されるXDBスレッド領域サイズ
1 | なし | なし | なし | a | b
2 | あり | なし | なし | a | b
3 | あり | なし | c | b
4 | あり | あり | c | d

（凡例）

a：xdb_default_service_mem_sizeオペランドの初期確保時のXDBスレッド領域サイズ

b：xdb_default_service_mem_sizeオペランドの追加確保時のXDBスレッド領域サイズ

c：eexdbsrvオペランドの初期確保時のXDBスレッド領域サイズ

d：eexdbsrvオペランドの追加確保時のXDBスレッド領域サイズ

注意事項

XDBサービス定義に関する注意事項を次に示します。

XDBサービス定義ファイルは，環境変数DCCONFPATHまたはDCUAPCONFPATHで指定したディレクトリに格納してください。環境変数DCCONFPATHまたはDCUAPCONFPATHについては，マニュアル「OpenTP1 運用と操作」の「OpenTP1管理者の環境設定」を参照してください。

環境変数EEXDBDEFFILEで指定したXDBサービス定義ファイル名と，DCCONFPATHまたはDCUAPCONFPATHで指定したXDBサービス定義ファイルの絶対パス名との文字列の合計は，1023文字以下になるようにしてください。

環境変数DCCONFPATH，およびDCUAPCONFPATHの両方が指定されていて，両方のディレクトリにXDBサービス定義ファイルが格納されている場合は，DCCONFPATHに指定されたディレクトリ下のXDBサービス定義ファイルが有効になります。

環境変数DCCONFPATH，およびDCUAPCONFPATHの両方が指定されていて，DCCONFPATHに指定されたディレクトリ下にXDBサービス定義ファイルが格納されていない，またはこのファイルのオープンに失敗した場合は，DCUAPCONFPATHに指定したディレクトリ下のXDBサービス定義ファイルが有効になります。

環境変数DCCONFPATH，およびDCUAPCONFPATHの両方が定義されていて，両方のディレクトリにXDBサービス定義ファイルが格納されていない，またはこれらのファイルのオープンに失敗した場合は，XDBを開始できません。

6.6　定義系SQL文記述ファイルの作成（表およびインデクスの定義）

XDBを開始する前に，CREATE TABLE文およびCREATE INDEX文を記述した定義系SQL文記述ファイルを作成しておきます。

定義系SQL文記述ファイルに記述されたSQLに従って，XDBの開始時に表やインデクスが定義されます。

＜この節の構成＞

(1)　記述形式

(2)　記述規則

(3)　記述例

(4)　注意事項

(1)　記述形式

定義系SQL文記述ファイルには，CREATE TABLE文およびCREATE INDEX文を記述します。CREATE TABLE文およびCREATE INDEX文の記述形式については，マニュアル「TP1/EE/Extended Data Cache SQLプログラミング」を参照してください。

(2)　記述規則

定義系SQL文記述ファイルの記述規則について次に示します。

注釈を記述できます。注釈とする行の先頭に「#COMMENT」を付与し，注釈の末尾にセミコロン（;）を記述してください。注釈の形式を次に示します。

#COMMENT 注釈;

一つの定義文は，複数行にわたって記述できます。

定義文を複数行にわたって記述する場合，記述途中には注釈を記述できません。

定義文の末尾には必ず改行を入れてください。

文字コードはシフトJISで記述してください。

SQL文の末尾にはセミコロン（;）を付与してください。

SQL文および注釈の末尾にあるセミコロン（;）の後ろから改行までは注釈として扱われます。

ファイルサイズの上限は2147483647バイトとなります。

(3)　記述例

定義系SQL文記述ファイルの記述例を次に示します。

#COMMENT Table Definition;
CREATE FIX TABLE "INSHOKU"
   ("SID" INT,
    "TEL_NO" CHAR(10),
    "POST_CODE" CHAR(7),
    "ADDRESS" CHAR(300))
    IN DBAREA01;

(4)　注意事項

定義系SQL文記述ファイルの作成に関する注意事項を次に示します。

定義系SQL文記述ファイルに記述したSQLは，記述した順番に処理されるため，表とインデクス定義の記述順序に注意してください。例えば，表定義よりもその表のインデクス定義を先に記述するとエラーとなります。

定義系SQL文記述ファイルに記述したSQLの文法に誤りがあった場合，XDBは開始されません。

XDBの稼働中は表またはインデクスを定義できません。

6.7　インポート制御ファイルおよびエクスポート制御ファイルの作成

XDBを開始する前に，インポート制御ファイルおよびエクスポート制御ファイルを作成しておきます。

ここでは，インポート制御ファイルおよびエクスポート制御ファイルの作成方法について説明します。

＜この節の構成＞

記述規則

インポート制御ファイルの作成

エクスポート制御ファイルの作成

記述規則

インポート制御ファイルおよびエクスポート制御ファイル共通の記述規則を次に示します。

注釈を記述できます。注釈とする行の先頭に「#COMMENT」を付与し，注釈の末尾にセミコロン（;）を記述してください。注釈の形式を次に示します。

#COMMENT 注釈;

一つの制御文は，複数行にわたって記述できます。

制御文を複数行にわたって記述する場合，記述途中には注釈を記述できません。

制御文の末尾には必ず改行を入れてください。

文字コードはシフトJISで記述してください。

空白およびタブを指定した場合，その項目は省略と見なされます。また，指定項目前後の空白やタブは無視されます。空白およびタブを指定した場合の指定例を次に示します。

T1=”/tmp/inputdb.dat”,△,<タブ文字>”@”,,,

二重引用符（"）を指定する場合は，二重引用符を2個連続で記述してください。例えば，囲み文字に二重引用符を指定する場合は，連続した2個の二重引用符をさらに二重引用符で囲み「""""」と指定します。

一つの指定項目は，同一行内に記述してください。

入力データファイル名，またはエクスポートファイル名のあとの指定項目をすべて省略する場合は，ファイル名に続くコンマ（,）も省略できます。

ファイルサイズの上限は2147483647バイトとなります。

インポート制御ファイルの作成

XDBの開始時，インポート制御ファイルの指定に従って，共用メモリ上の表にデータがインポートされます。インポート制御ファイルには，どの表にどの入力データファイルを読み込むかという情報を定義します。

形式

｛｛処理対象表識別子＝入力データファイル名〔,
　　　　　　　　　　　〔囲み文字〕,
　　　　　　　　　　　〔区切り文字〕,
　　　　　　　　　　　〔ソートバッファサイズ〕,
　　　　　　　　　　　〔処理経過メッセージの出力契機間隔〕,
　　　　　　　　　　　〔一時ファイルを作成するディレクトリパス名〕〕｝｝

●処理対象表識別子

　　～〈識別子〉

データをインポートする表の表識別子を指定します。

なお，インポート制御ファイル中に指定する処理対象表識別子は，重複しないようにしてください。重複して指定した場合，エラーになります（KFSB66054-Eメッセージが出力されます）。

●入力データファイル名

　　～〈パス名〉((1～510文字))

入力データファイル名を絶対パス名で指定します。

この項目を指定するときの規則を次に示します。

入力データファイル名は，二重引用符（"）で囲んで指定してください。

パス名として指定できる文字は，英数字，スラッシュ（/），ピリオド（.），下線（_），#，@，~，コロン（:），および半角空白です。パス名にこれら以外の文字列が含まれている場合は，そのパス名をこの項目に指定できません。

パス名に全角文字が含まれている場合，そのパス名をこの項目に指定できません。

●囲み文字

　　～〈文字列〉《"》

入力データファイル中の列データを囲む文字を指定します。この指定を省略した場合は，囲み文字として二重引用符（"）が仮定されます。

この項目を指定するときの規則を次に示します。

囲み文字は，二重引用符（"）で囲んで指定してください。

次に示す文字は指定できません。
・2バイト以上の文字列
・マルチバイト文字
・半角空白
・タブ
・アスタリスク（*）
・区切り文字と同じ文字

●区切り文字

　　～〈文字列〉《,》

入力データファイル中の列データ区切る文字を指定します。この指定を省略した場合は，区切り文字としてコンマ（,）が仮定されます。

この項目を指定するときの規則を次に示します。

区切り文字は，二重引用符（"）で囲んで指定してください。

次に示す文字は指定できません。
・2バイト以上の文字列
・マルチバイト文字
・英大文字（A～Z），英小文字（a～z），数字（0～9）
・アスタリスク（*）
・二重引用符（"）
・下線（_）
・囲み文字と同じ文字

●ソートバッファサイズ

　　～〈符号なし整数〉((128～2097152))《1024》（単位：キロバイト）

インデクスの作成処理で使用するソートバッファサイズをキロバイト単位で指定します。

●処理経過メッセージの出力契機間隔

　　～〈符号なし整数〉((0～1000))《0》（単位：1000行）

TP1/EEのメッセージログに出力する処理経過メッセージの出力契機間隔を1000行単位で指定します。例えば，1を指定すると，インポート処理が1000行終わるごとにTP1/EEのメッセージログに処理経過メッセージが出力されます。0を指定した場合は，処理経過メッセージは出力されません。

●一時ファイルを作成するディレクトリパス名

　　～〈パス名〉((1～400文字))

一時ファイルを作成するディレクトリ名を絶対パス名で指定します。パス名の最後のスラッシュ（/）は指定しないでください。

この指定を省略した場合は，次の優先順位でディレクトリが決定されます。

XDBサービス定義のxdb_import_work_directoryオペランドで指定したディレクトリ

TP1/EEプロセスのカレントワーキングディレクトリ

この項目を指定するときの規則を次に示します。

パス名は二重引用符（"）で囲んで指定してください。

パス名として指定できる文字は，英数字，スラッシュ（/），ピリオド（.），下線（_），#，@，~，コロン（:），および半角空白です。パス名にこれら以外の文字列が含まれている場合は，そのパス名をこの項目に指定できません。

パス名に全角文字が含まれている場合，そのパス名をこの項目に指定できません。

このディレクトリ下に作成される一時ファイルの見積もり式を次に示します。

作成される一時ファイル | 計算式
インデクス情報ファイル | D＋S＋MAX（B₁，B₂，…，Bn，80×b）

変数の説明

D：次の計算式で求めます。

n：インポートする表に定義されているインデクス数

di：インデクスのキー長

「3.6(3)(a)計算式中で使用する変数」の「DB格納キー長」の計算式を参照してください。

b：行データを格納する件数

e：0

ただし，eexdbimportコマンド（-dオプションを省略）実行時の一時ファイルの見積もりの場合は，表の既存の行数としてください。

S：インデクスをキー順にソートするための作業ファイルの容量

次の計算式で求めます。

Ｓ＝（D＋4×（b＋e））×2

Bi：インデクス作成時に作成するファイルの容量

次の計算式で求めます。

Bi＝（di＋3）×（P1＋P2）＋12

P1：リーフページ数

P2：インデクス段数が2段目の上位ページ数

P1は「3.6(3)(c)インデクスの格納ページ数」の計算式1から，P2は同じ計算式1のPiから算出してください。

記述例

インポート制御ファイルの記述例を次に示します。

#COMMENT 入力データファイル名以降の項目を省略;
T1="/tmp/inputdb.dat"

#COMMENT 複数行にわたって記述;
T2="/home/xdbuser/tmp/table_a.dat",
  "|",
  "$",
   256,
   1,
  "/home/xdbuser/tmp"

注意事項

インポート制御ファイルの指定項目に誤りがあった場合は，エラーメッセージを出力したあと，誤りのあった項目の処理をスキップし，インポート処理を続行します。

エクスポート制御ファイルの作成

XDBの終了時，エクスポート制御ファイルの指定に従って，共用メモリ上の表データをエクスポートファイルにエクスポートします。エクスポート制御ファイルには，どの表をどのエクスポートファイルに出力するかという情報を定義します。

注意

XDBサービス定義のxdb_stop_export_control_fileオペランド（エクスポート制御ファイルのパス名を指定したオペランド）に指定したファイルのディレクトリを，XDBを開始する前に実行系と待機系の両方に作成し，書き込みができる状態にしておいてください。

形式

｛｛処理対象表識別子＝エクスポートファイル名〔,
　　　　　　　　　　　〔囲み文字〕,
　　　　　　　　　　　〔区切り文字〕,
　　　　　　　　　　　〔処理経過メッセージの出力契機間隔〕〕｝｝

エクスポートファイルは表ごとに作成されるため，エクスポートする表の数だけ，上記の指定項目を記述してください。

●処理対象表識別子

　　～〈識別子〉

エクスポートの対象とする表の表識別子を指定します。

●エクスポートファイル名

　　～〈パス名〉((1～510文字))

出力先のエクスポートファイル名を絶対パス名で指定します。

なお，エクスポート制御ファイル中に指定するエクスポートファイル名は，重複しないようにしてください。

この項目を指定するときの規則を次に示します。

エクスポートファイル名は，二重引用符（"）で囲んで指定してください。

パス名として指定できる文字は，英数字，スラッシュ（/），ピリオド（.），下線（_），#，@，~，コロン（:），および半角空白です。パス名にこれら以外の文字列が含まれている場合は，そのパス名をこの項目に指定できません。

パス名に全角文字が含まれている場合，そのパス名をこの項目に指定できません。

●囲み文字

　　～〈文字列〉《"》

エクスポートファイル中に出力される列データを囲む文字を指定します。この指定を省略した場合は，囲み文字として二重引用符（"）が仮定されます。

CHARACTER型およびTIMESTAMP型のデータは，ここで指定した文字列に囲まれます。例を次に示します。

（例）囲み文字に ' を指定した場合

'hitachi'

この項目を指定するときの規則を次に示します。

囲み文字は，二重引用符（"）で囲んで指定してください。

次に示す文字は指定できません。
・2バイト以上の文字列
・マルチバイト文字
・半角空白
・タブ
・アスタリスク（*）
・区切り文字と同じ文字列

●区切り文字

　　～〈文字列〉《,》

エクスポートファイル中に出力される列データを区切る文字を指定します。この指定を省略した場合は，区切り文字としてコンマ（,）が仮定されます。

列データは，ここで指定した文字列で区切られます。例を次に示します。

（例）-s , を指定した場合

'hitachi',5,'database'

この項目を指定するときの規則を次に示します。

区切り文字は，二重引用符（"）で囲んで指定してください。

次に示す文字は指定できません。
・2バイト以上の文字列
・マルチバイト文字
・英大文字（A～Z），英小文字（a～z），数字（0～9）
・アスタリスク（*）
・二重引用符（"）
・下線（_）
・囲み文字と同じ文字列

●処理経過メッセージの出力契機間隔

　　～〈符号なし整数〉((0～1000))《0》（単位：1000行）

TP1/EEのメッセージログに出力する処理経過メッセージの出力契機間隔を1000行単位で指定します。例えば，1を指定すると，エクスポート処理が1000行終わるごとに，TP1/EEのメッセージログに処理経過メッセージが出力されます。0を指定した場合は，処理経過メッセージは出力されません。

記述例

エクスポート制御ファイルの記述例を次に示します。

#COMMENT エクスポートファイル名以降の項目を省略;
T1="/tmp/outputdb.dat"

#COMMENT 複数行にわたって記述;
T2="/home/xdbuser/tmp/table_b.dat",
  "|",
  "¥",
  1

注意事項

エクスポート制御ファイルの指定項目に誤りがあった場合は，エラーメッセージを出力したあと，誤りのあった項目の処理をスキップし，エクスポート処理を続行します。

6.8　入力データファイルの準備

XDBを開始する前に，共用メモリ上のDBエリアに読み込むための表データを格納したファイルを準備します。このファイルを入力データファイルといいます。

エクスポートファイルをそのまま入力データファイルとして使用できます。

ここでは，入力データファイルの形式とエクスポートファイルの形式について説明します。

＜この節の構成＞

6.8.1　入力データファイルの形式

6.8.2　エクスポートファイルの形式

6.8.1　入力データファイルの形式

入力データファイルはCSV形式で作成します。ここでは，入力データファイルの作成規則について説明します。

＜この項の構成＞

(1)　入力データファイルの入力形式

(2)　規則

(3)　データの記述形式

(1)　入力データファイルの入力形式

数データも文字で記述してください。XDBが，データをXDBの内部形式に変換して格納するため，XDB以外のシステムのデータも利用できます。

(2)　規則

ファイルの1行に対して，表の1行のデータを記述してください。行の終わりには改行（NL）または復帰改行（CR/NL）を記述してください。

入力データの1行の最大長は512メガバイトです。512メガバイトを超えると，ファイル入力エラーとなります。

EOF制御文字は記述できません。

列データと列データの間は，区切り文字で区切ってください。この区切り文字をインポート制御ファイルの区切り文字に指定します。

CHARACTER型およびTIMESTAMP型のデータは，囲み文字で囲んでください。この囲み文字をインポート制御ファイルの囲み文字に指定します。

囲み文字を指定する場合は，区切り文字と囲み文字を連続して指定してください。区切り文字と囲み文字の間に半角空白があると，半角空白はデータとして扱われるため，囲み文字の指定エラーになったり，囲み文字を含むデータが格納されたりすることがあります。

囲み文字と同じ値をデータとして扱う場合は，その囲み文字を2個連続で記述してください。例えば，アポストロフィ（'）が囲み文字の場合は，連続した2個のアポストロフィをアポストロフィで囲み「''''」と記述してください。

入力データは，XDBサービス定義のxdb_langオペランドで指定した文字コードで記述してください。

(3)　データの記述形式

囲み文字を二重引用符（"）とした場合の，各データ型に対する列データの記述形式を次の表に示します。

表6-4　列データの記述形式

項番
データ型
列データの記述形式

1
数データ
INTEGER※1,※2
数値を文字で記述します。
マイナスには，"－"符号を付けます。
小数点は，整数．小数で記述します。

整数（例：-1234，…，0，…，1234）

小数点（例：-1.56，…，0，…，1.56）

2
DECIMAL※3，※2

3
時刻印データ
TIMESTAMP※4
"YYYY-MM-DD hh:mm:ss〔.nn…n〕"の形式で，文字，または前後を囲み文字で囲んである文字で記述します。
（例：2008-07-08△11:03:58，"2008-07-08△11:03:58.12"）
年（YYYY），月（MM），日（DD）をハイフン（-）で結び，半角空白（△）を含め，時（hh），分（mm），秒（ss）をコロン（:）で結びます。そのときに，年（YYYY），月（MM），日（DD），時（hh），分（mm），秒（ss）がけた数に満たない場合は，足りないけた数分だけ左側に0を補ってください。
小数秒精度を表現する場合，秒（ss）と小数秒（nn…n）の間を，ピリオド（.）で結びます。小数秒精度を省略し，ピリオドだけを指定すると，小数秒精度が0のデータとして処理されます。小数部が定義したけた数に満たない場合は0が仮定され，長ければ切り捨てられます。小数秒精度が7以上の場合はエラーとなります。

4
文字データ
CHARACTER※5
文字，または前後を囲み文字で囲んである文字で記述します。
文字は左詰めで記述してください。
（例：abcdef，ABCDEF，"abcdef"，"ABCDEF"）

注※1

INTEGERに対して，小数点を持つデータは記述できません。記述した場合はエラーとなります。

注※2

データ中の半角空白，およびタブは削除されます。

注※3

DECIMALに対して，入力データの小数部のけたが多い場合は切り捨てられます。ただし，33文字以上のデータ（半角空白，タブを除く），または整数部と小数部の数字の合計が30文字以上（整数部の前0を除く）入力された場合はエラーとなります。

注※4

TIMESTAMP型の小数秒部のけた数を指定した場合の格納方法を次に示します。

注※5

入力データが定義長に満たない場合は，半角空白が残り部分に格納されます。

6.8.2　エクスポートファイルの形式

XDBの終了時や，eexdbexportまたはeexdbexttblコマンドの実行時，エクスポートファイルが作成されます。このエクスポートファイルは，次回XDBの開始時に，CSV形式の入力データファイルとして使用できます。

エクスポートファイルの形式に関する規則を次に示します。

データは文字データで出力されます。

表の1行に対して，ファイルの1行として出力されます。行の終わりには改行文字が出力されます。

列データと列データの間には，エクスポート制御ファイルで指定した区切り文字が入ります。

CHARACTER型およびTIMESTAMP型のデータは，エクスポート制御ファイルで指定した囲み文字で囲まれて出力されます。

出力データの1行の最大長は，512メガバイトです。行長には囲み文字も含まれます。512メガバイトを超えると，エラーとなります。

7.　運用

この章では，XDBの運用方法について説明します。

＜この章の構成＞

7.1　運用項目一覧

7.2　XDBの開始と終了

7.3　統計情報の取得

7.4　XDBトレース情報の取得

7.5　SQLトレース情報，パラメタトレース情報，およびSQL単位情報の表示

7.6　アクセスパス情報の表示

7.7　表またはインデクスの追加手順

7.1　運用項目一覧

XDBの運用項目一覧を次の表に示します。

表7-1　XDBの運用項目一覧

項番
運用項目
参照先

1
定期運用

XDBの開始

XDBの終了

「7.2　XDBの開始と終了」

2
チューニング情報およびトラブルシュート情報の取得
統計情報の取得
「7.3　統計情報の取得」

3
XDBトレース情報の取得

「7.4　XDBトレース情報の取得」

「7.5　SQLトレース情報，パラメタトレース情報，およびSQL単位情報の表示」

「7.6　アクセスパス情報の表示」

4
非定期運用

表またはインデクスの追加

表またはインデクスの定義の変更

「7.7　表またはインデクスの追加手順」

7.2　XDBの開始と終了

ここでは，XDBの開始および終了方法について説明します。

＜この節の構成＞

7.2.1　XDBの開始

7.2.2　XDBの終了

7.2.1　XDBの開始

XDBは，TP1/EEの開始処理の延長で開始されます。そのため，開始方法の詳細については，マニュアル「TP1/EE/Extended Transaction Controller 使用の手引」の「CLサーバでのXTCの開始」を参照してください。

■XDB開始時の処理

XDBの開始時，次の処理が実行されます。

実行系と待機系のXDBサービス定義の突き合わせ処理
実行系と待機系のXDBサービス定義の次に示すオペランドの指定値が同じかどうかをチェックします。
・xdb_lang
・eexdbarea
その結果，実行系と待機系の指定値が異なる場合，待機系のXDBを開始しません。このとき，2台構成でCLサーバを開始するかどうかは，XTCサービス定義のクラスタ連携関連定義のstandby_start_error_switchオペランドの指定に従います。standby_start_error_switchオペランドについては，マニュアル「TP1/EE/Extended Transaction Controller 使用の手引」を参照してください。

データベースの作成と格納データの待機系への転送処理
実行系の共用メモリ上に，DBエリア，表，およびインデクスを作成し，データをインポートします。
待機系には，実行系のDBエリア全体の内容が転送され，実行系と同じデータベースが作成されます。

7.2.2　XDBの終了

XDBは，TP1/EEの終了処理の延長で終了します。そのため，終了方法の詳細については，マニュアル「TP1/EE/Extended Transaction Controller 使用の手引」の「CLサーバでのXTCの終了」を参照してください。

■XDB終了時の処理

表用DBエリア内のデータをエクスポートファイルに出力します。この処理は実行系だけで行われます。待機系では行われません。

7.3　統計情報の取得

XDBに関する統計情報は，TP1/EEが取得するTASKTM情報とシステム統計情報に出力されます。ここでは，TASKTM情報とシステム統計情報に出力されるXDBに関する情報について説明します。

TASKTM情報およびシステム統計情報は，XDBのチューニングを行うときに利用します。

＜この節の構成＞

7.3.1　TASKTM情報に出力されるXDBに関する情報

7.3.2　システム統計情報に出力されるXDBに関する情報

7.3.1　TASKTM情報に出力されるXDBに関する情報

TP1/EEが取得するTASKTM情報にXDBに関する情報が出力されます。TP1/EEのTASKTM情報に出力されるXDBに関する情報を次の表に示します。

TASKTM情報の取得方法，およびTASKTM情報の表示方法については，マニュアル「TP1/Server Base Enterprise Option 使用の手引」を参照してください。

表7-2　TASKTM情報に出力されるXDBに関する情報

項番
TASKTM情報に出力されるXDBに関する情報
単位

表示形式
内容

1
XDB_SQL実行時間
SQLの実行時間が表示されます。
マイクロ秒

2
XDB_処理行数
検索行数が表示されます。※1，※2
行

3
XDB_更新行数
更新行数が表示されます。
行

4
XDB_参照系SQL実行回数
検索系SQLの実行回数が表示されます。※1，※3，※4，※5
回

5
XDB_更新系SQL実行回数
更新系SQLの実行回数が表示されます。※4，※6
回

6
作業表作成回数
作業表の作成回数が表示されます。
回

7
作業表削除回数
作業表の削除回数が表示されます。
回

8
作業表確保最大ページ数
作業表で確保した最大ページ数が表示されます。
ページ

9
ページ要求回数
ページ要求回数が表示されます。
回

10
XDB_COMMIT処理時間
COMMIT処理時間が表示されます。
TP1/EEのプロセス中でXDBのCOMMIT処理が実行されます。この情報には，XDBで要したCOMMIT処理時間が表示されます。
マイクロ秒

11
XDB_COMMIT排他待ち時間
COMMIT処理での排他待ち時間が表示されます。
マイクロ秒

12
更新バッファ長
更新バッファの長さが表示されます。
バイト

13
XDB_状態
他COMMITとの衝突によるROLLBACKの実行有無が表示されます。
－

14
XDB_スレッド領域追加確保回数
XDBのサービスによって，トランザクションの処理中にXDBスレッド領域が追加確保された回数が表示されます。
回

15
XDB_スレッド領域最大使用サイズ
XDBのサービスによって，トランザクションの処理中に実際に使用されたXDBスレッド領域の最大サイズが表示されます。
バイト

（凡例）

－：該当しません。

注※1

1行SELECT文（1行検索）の場合は，エラーでも数えられることがあります。

注※2

1行SELECT文（1行検索）の場合は，2行として数えられることがあります。

注※3

OPEN，FETCH，CLOSEの実行時に数えられます。1行SELECT文（1行検索）の場合は，OPEN，FETCH，CLOSEの各実行回数分が数えられます。

注※4

SQLがエラーとなった場合は数えられません。

注※5

1行SELECT文（1行検索）の場合は，4回として数えられることがあります。

注※6

INSERT文，UPDATE文，DELETE文の実行時に数えられます。

7.3.2　システム統計情報に出力されるXDBに関する情報

TP1/EEが取得するシステム統計情報にXDBに関する情報が出力されます。TP1/EEのシステム統計情報に出力されるXDBに関する情報を次の表に示します。

システム統計情報の取得方法，およびシステム統計情報の表示方法については，マニュアル「TP1/Server Base Enterprise Option 使用の手引」を参照してください。

表7-3　TP1/EEのシステム統計情報に出力されるXDBに関する情報

項番
システム統計情報に出力されるXDBに関する情報
説明

1
更新バッファ長
トランザクションが取得する更新バッファのサイズ（単位：バイト）の最大値・最小値・平均値が出力されます。
また，コミットおよびロールバックの回数が出力されます。

2
共有メモリ面数※1
DBエリアが使用している共用メモリの面数の最大値が出力されます。

3
共有メモリ合計長※1
DBエリアが使用している共用メモリの合計サイズ（単位：バイト）の最大値が出力されます。

4
SQLプール機能に関する統計情報※2
SQLプールリクエスト回数
SQLプールで前処理結果が検索された回数が出力されます。

5
SQLプールヒット回数
SQLの前処理結果がSQLプールに保存されていたため，SQLの前処理が省略できた回数が出力されます（SQLの前処理結果が再利用された回数の累計です）。

6
SQLプール登録回数
SQLの前処理結果がSQLプールに保存された回数が出力されます。

7
SQLプール掃き出し回数
SQLプールから保存されている前処理結果が掃き出された回数が出力されます。

8
SQLプール使用サイズ
実際に使用されているSQLプールサイズ（単位：バイト）の最大値・最小値・平均値が出力されます。
なお，出力される情報は，スレッドごとのSQLプールサイズです。
スレッドごとに割り当てられるSQLプールサイズについては，「4.1.3　SQLプールサイズの見積もり」を参照してください。
また，SQLプールの使用量に変動があった回数※3が表示されます。

9
SQLプール動的メモリ確保サイズ
SQLプールサイズが不足したため，前処理結果を保存するメモリが動的に確保されたときのメモリサイズ（単位：バイト）の最大値・最小値・平均値が出力されます。
また，SQLプールが不足して，動的に領域を確保した回数が出力されます。

10
表定義プール機能に関する統計情報※4
表定義情報取得要求回数
表定義情報の取得要求回数の累計が出力されます。

11
表定義情報取得要求エラー回数
存在しない表をSQL中に指定したときのエラー回数の累計が出力されます。

12
表定義プールヒット回数
表定義プールから表定義情報を再利用した回数の累計が出力されます。

13
表定義プール情報掃き出し回数
表定義プールから表定義情報が掃き出された回数の累計が出力されます。

14
表定義プール表定義最大サイズ
表定義プールに保存されている表定義情報の合計長（単位：バイト）の最大値が出力されます。

15
作業表確保ページ数
作業表で確保したページ数の最大値が出力されます。

注※1

この統計情報を基にDBエリアの容量チューニングを行います。詳細については，「3.4.4　DBエリアの共用メモリ面数を決めるときの検討項目」を参照してください。

注※2

この統計情報を基にSQLプール機能のチューニングを行います。詳細については，「4.1.4　SQLプール機能の効果を確認する方法」を参照してください。

注※3

SQLプール内に前処理結果がなかったために，SQLの前処理を行ったときにカウントされます。

トランザクション終了時に，再利用できない前処理結果を削除した場合，削除された前処理結果の個数分カウントされます。

注※4

この統計情報を基に表定義プール機能のチューニングを行います。詳細については，「4.2.3　表定義プールサイズが適切かどうか確認する方法」を参照してください。

7.4　XDBトレース情報の取得

ここでは，XDBトレース情報の取得方法について説明します。

＜この節の構成＞

7.4.1　XDBトレース情報とは

7.4.2　XDBトレース情報を取得するための準備

7.4.3　XDBトレース情報の表示方法

7.4.1　XDBトレース情報とは

XDBは，SQLの処理状況の履歴を取得しています。この履歴情報の総称をXDBトレース情報といいます。XDBでは，XDBトレース情報として次に示す情報を取得しています。

SQLトレース情報

パラメタトレース情報

SQL単位情報

アクセスパス情報

これらの情報は，SQLのチューニングを行うときや，エラーとなったSQLを特定するときに利用します。SQLトレース情報，パラメタトレース情報，およびSQL単位情報の詳細については，「7.5　SQLトレース情報，パラメタトレース情報，およびSQL単位情報の表示」を参照してください。アクセスパス情報の詳細については，「7.6　アクセスパス情報の表示」を参照してください。

＜この項の構成＞

(1)　XDBトレース情報の出力先

(2)　XDBトレース情報ファイルの世代管理

(3)　XDBトレース情報ファイルのバックアップ

(1)　XDBトレース情報の出力先

XDBトレース情報を出力するファイルをXDBトレース情報ファイルといいます。XDBトレース情報ファイルは次に示すディレクトリ下に作成されます。

$DCDIR/spool/dceeinf/xdb

このディレクトリ下に，XDBサービス定義のxdb_trace_file_numberオペランドで指定した数のXDBトレース情報ファイルが作成されます。

ファイル名は，「サービスグループ名xdbxxx」となります。xxxは3けたの数字です。

例えば，サービスグループ名がsvrで，xdb_trace_file_numberオペランドに3を指定した場合，$DCDIR/spool/dceeinf/xdbディレクトリ下に次に示す名称のXDBトレース情報ファイルが作成されます。

svrxdb001

svrxdb002

svrxdb003

(2)　XDBトレース情報ファイルの世代管理

XDBトレース情報ファイルがいっぱいになった場合，ほかのXDBトレース情報ファイルにXDBトレース情報を出力します。

例えば，svrxdb001，svrxdb002，svrxdb003という三つのXDBトレース情報ファイルがある場合，svrxdb001がいっぱいになったら，svrxdb002にXDBトレース情報を出力します。svrxdb002がいっぱいになったら，svrxdb003に出力します。そして，svrxdb003がいっぱいになった場合，先頭に戻ってsvrxdb001にXDBトレース情報を出力します（svrxdb001を上書きします）。

なお，XDBトレース情報ファイルの1ファイルの容量は，XDBサービス定義のxdb_trace_file_sizeオペランドで指定します。

(3)　XDBトレース情報ファイルのバックアップ

XDBトレース情報ファイルの出力先が切り替わったとき（スワップしたとき）に，KFSB85400-Iメッセージが出力されます。このメッセージが出力されたときに，スワップ元のXDBトレース情報ファイルのバックアップを取得することをお勧めします。

なお，現用のXDBトレース情報ファイル（XDBトレース情報が出力されているXDBトレース情報ファイル）のバックアップを取得すると，XDBトレース情報が正しく表示されないことがあります。そのため，現用のXDBトレース情報ファイルのバックアップは取得しないでください。

また，現用のXDBトレース情報ファイルを移動または削除しないでください。

7.4.2　XDBトレース情報を取得するための準備

XDBトレース情報を取得する場合は，次に示す準備作業が必要になります。

取得する情報を選択する

出力されるXDBトレース情報量を見積もる

＜この項の構成＞

(1)　取得する情報の選択

(2)　XDBトレース情報量の見積もり

(1)　取得する情報の選択

XDBトレース情報を取得するには，XDBサービス定義のxdb_trace_outオペランドにYを指定します。また，次に示すオペランドで取得する情報を選択します。

xdb_sql_trace_out=Y
SQLトレース情報およびSQL単位情報を取得する場合に指定します。

xdb_sql_param_trace=IN，OUT，またはINOUT
パラメタトレース情報を取得する場合に指定します。

xdb_sql_accesspath_out=Y
アクセスパス情報を取得する場合に指定します。

(2)　XDBトレース情報量の見積もり

取得する情報が決まると，出力されるXDBトレース情報量が決まります。XDBトレース情報量の見積もり式を次に示します。この計算結果を基に，XDBトレース情報ファイルの1ファイルの容量と世代数を決めてください。1ファイルの容量はxdb_trace_file_sizeオペランドに，世代数はxdb_trace_file_numberオペランドに指定します。

計算式

変数の説明

a：TP1/EEのユーザサービス関連定義のserviceオペランドに指定したサービス名の数

n：XDBトレース情報を取得するトランザクション数

T：トランザクションごとのXDBトレース情報の容量（計算式を次に示します）

SQLトレース情報の容量＋SQL単位情報の容量＋パラメタトレース情報の容量＋アクセスパス情報の容量

各情報の容量計算式は，(a)以降で説明しています。

(a)　SQLトレース情報の容量見積もり

SQLトレース情報の容量見積もり式を次に示します。

計算式

変数の説明

a：オペレーション実行回数

n：SQLの発行回数

■オペレーション実行回数の数え方

該当するトランザクション内のオペレーション実行回数を数えてください。

検索系SQLの場合：SQL発行回数1に対して，FETCH回数＋3回と数えます。

更新系SQLの場合：SQL発行回数1に対して，2回と数えます。

■SQLの発行回数の数え方

該当するトランザクション内のSQL発行回数を数えてください。

検索系SQLの場合：

カーソルを使用した検索では，カーソルオープンからカーソルクローズまでを1回と数えます。

1行SELECT文は発行のたびに1回と数えます。

更新系SQLの場合：

INSERT文，UPDATE文，DELETE文は，発行のたびに1回と数えます。

(b)　SQL単位情報の容量見積もり

SQL単位情報の容量見積もり式を次に示します。

計算式

変数の説明

a：オペレーション実行回数

n：SQLの発行回数

(c)　パラメタトレース情報の容量見積もり

パラメタトレース情報の容量見積もり式を次に示します。

計算式

変数の説明

a：SQLの発行回数

b：1SQL中の入力データ数

c：FETCH実行回数

d：1SQL中の検索データ数

変数情報量：計算式を次に示します。

100＋（128×↑MIN（32008，入力データまたは検索データの実データ長）÷16↑）

(d)　アクセスパス情報の容量見積もり

アクセスパス情報の容量見積もり式を次に示します。

計算式

注※

SQLのテキスト長は，xdb_sql_accesspath_out=Y，xdb_sql_trace_out=Nの場合に加算します。

変数の説明

n：SQLの発行回数

1SQLごとのアクセスパス情報量：計算式を次に示します。

1300×SQL中に指定した表の数＋130×WHERE句に指定した述語の数＋1600

7.4.3　XDBトレース情報の表示方法

XDBトレース情報は，次に示すどれかのコマンドで表示できます。

eexdbedコマンド

eexdbdumpコマンド

eetrbtbldumpコマンド

＜この項の構成＞

(1)　eexdbedコマンドで表示する場合

(2)　eexdbdumpコマンドで表示する場合

(3)　eetrbtbldumpコマンドで表示する場合

(1)　eexdbedコマンドで表示する場合

XDBトレース情報ファイルを入力情報にしてeexdbedコマンドを実行すると，XDBトレース情報を表示できます。表示形式については，「10．運用コマンド」の「eexdbed（XDBトレース情報の表示）」を参照してください。

なお，直近のXDBトレース情報を表示したい場合は，eexdbfputコマンドを実行して，バッファ上にあるXDBトレース情報をXDBトレース情報ファイルに出力してください。そのあとで，eexdbedコマンドを実行してください。

参考

出力されたXDBトレース情報は，いったんバッファ上に格納されます。バッファがいっぱいになったときに，バッファ上のXDBトレース情報がXDBトレース情報ファイルに出力されます。そのため，eexdbfputコマンドを実行しないと，XDBトレース情報ファイルに直近のXDBトレース情報が格納されません。

なお，このときに使用するバッファの大きさは，XDBサービス定義のxdb_trace_buffer_sizeオペランドで指定できます。

(2)　eexdbdumpコマンドで表示する場合

XDBのプロセスダウンが発生した場合，TP1/EEはコアダンプをコアファイルに出力します。このコアファイルを入力情報にしてeexdbdumpコマンドを実行すると，XDBトレース情報を表示できます。

表示形式は，eexdbedコマンドと同じです。表示形式については，「10．運用コマンド」の「eexdbed（XDBトレース情報の表示）」を参照してください。

(3)　eetrbtbldumpコマンドで表示する場合

TP1/EEのeetrbtbldumpコマンドで，XDBトレース情報を表示できます。eetrbtbldumpコマンドについては，マニュアル「TP1/Server Base Enterprise Option 使用の手引」を参照してください。

7.5　SQLトレース情報，パラメタトレース情報，およびSQL単位情報の表示

ここでは，SQLトレース情報，パラメタトレース情報，およびSQL単位情報の表示方法と，各情報に出力される項目について説明します。

＜この節の構成＞

7.5.1　SQLトレース情報，パラメタトレース情報，およびSQL単位情報の表示方法

7.5.2　SQLトレース情報に表示される項目

7.5.3　パラメタトレース情報に表示される項目

7.5.4　SQL単位情報に表示される項目

7.5.5　留意事項

7.5.1　SQLトレース情報，パラメタトレース情報，およびSQL単位情報の表示方法

XDBは，実行されたSQLの履歴情報を取得しています。この履歴情報は，SQLトレース情報，パラメタトレース情報，およびSQL単位情報として，eexdbedコマンドで表示できます。SQLのチューニングを行うときや，エラーとなったSQLを特定するときにこれらの情報を利用してください。

なお，これらの情報を表示するには，XDBトレース情報を取得している必要があります。詳細については，「7.4　XDBトレース情報の取得」を参照してください。

また，eexdbedコマンド以外のコマンドでもこれらの情報を表示できます。表示方法については，「7.4.3　XDBトレース情報の表示方法」を参照してください。

7.5.2　SQLトレース情報に表示される項目

SQLトレース情報に表示される項目を次の表に示します。

表7-4　SQLトレース情報に表示される項目

項番
表示される項目
説明

1
サービス名
サービス名が表示されます。

2
UAP開始時刻
UAPの開始時刻がyyyy/mm/dd hh:mm:ss mmm.mmmの形式で表示されます。

3
UAP実行ステータス
UAP実行時のサーバとの接続状態が表示されます。次に示す情報が表示されます。

CNCTNO：コネクト通番

CNCTHDL：コネクションハンドル

4
UAPのスレッドID
IFA番号とスレッドIDが表示されます。

5
SQLカウンタ
SQL受付順の順次カウンタが表示されます。
同じオペレーションで，SQLCODEやSQLWARNを個別に取得した場合は，SQLカウンタが同一の情報が，複数出力されることがあります。

6
オペレーションコード
オペレーションコードには，次に示す情報が表示されます。

CC：カーソルのクローズ

ED：SQL実行（実行準備と実行）

EX：SQL実行，またはカーソルのオープン

FT：FETCH

PR：SQL実行準備

一つのSQLに対して，複数のオペレーションコードが表示されます。SQL文とオペレーションコードの対応については，「表7-5　SQL文とオペレーションコードの対応」を参照してください。

7
文ハンドル番号
SQLとの対応を確認するための番号が表示されます。

8
SQLCODE
SQLCODEが表示されます。

9
SQLWARN
発生した警告情報が表示されます。警告フラグが設定されているものには'W'を，設定されていないものには空白が表示されます。表示例を次に示します。

（例1）SQLWARN3とSQLWARN6が発生した場合

警告情報の内容

[図データ]
表示内容

 'W△△W△△W△△△△△△△△△'
　（凡例）△：空白

（例2）警告がない場合

警告情報の内容

[図データ]
表示内容

 '△△△△△△△△△△△△△△△△'
　（凡例）△：空白

10
SQL実行要求受け付け時刻
SQLの実行要求受け付け時刻がyyyy/mm/dd hh:mm:ss mmm.mmmの形式で表示されます。

11
SQL実行要求終了時刻
SQLの実行要求終了時刻がyyyy/mm/dd hh:mm:ss mmm.mmmの形式で表示されます。

12
SQL文
オペレーションコードがPRまたはEDの場合に，SQLのテキストが表示されます。

XDBサービス定義のxdb_sql_text_sizeオペランドに指定したサイズ分まで，SQLのテキストが表示されます。

*SQL*のあとにSQLのテキストが表示されます。

オペレーションコードPR，EDがエラーの場合も，SQLのテキストが表示されます。

埋め込み変数が含まれる場合は，埋め込み変数の部分が？に置き換えられて表示されます。ただし，1行SELECT文のINTO句は表示されません。

カーソルを使用した検索の場合，カーソルのオープンに対応するオペレーションコードPRのあとに，SQLのテキストが表示されます。このとき，DECLARE カーソル名 CURSOR FOR の部分は表示されません。

SQL文中に表示できない文字（シフトJISとして不当な文字）がある場合でも，SQLのテキストとして表示されます。

13
パラメタトレース情報
パラメタトレース情報が表示されます。表示される内容については，「7.5.3　パラメタトレース情報に表示される項目」を参照してください。

14
SQL実行時間
SQLの実行時間がマイクロ秒単位でhh:mm:ss mmm.mmmの形式で表示されます。

表7-5　SQL文とオペレーションコードの対応

項番
SQL
オペレーションコード
備考

1
CLOSE
CC
－

2
DELETE
PR，EX
埋め込み変数の指定がある場合に出力されます。

3
ED
埋め込み変数の指定がない場合に出力されます。

4
FETCH
FT
－

5
INSERT
PR，EX
埋め込み変数の指定がある場合に出力されます。

6
ED
埋め込み変数の指定がない場合に出力されます。

7
OPEN
PR，EX
－

8
SELECT
PR，EX，FT，FT，…，CC
EX後にエラーが発生した場合，CCを出力します。ただし，暗黙的にトランザクションが取り消された場合は，CCは出力されません。

9
1行SELECT
PR，EX，FT，FT，CC
最初のFTで取り出すデータがない場合は，2番目のFTは出力されません。
EX後にエラーが発生した場合，CCを出力します。ただし，暗黙的にトランザクションが取り消された場合は，CCは出力されません。

10
UPDATE
PR，EX
埋め込み変数の指定がある場合に出力されます。

11
ED
埋め込み変数の指定がない場合に出力されます。

（凡例）

－：該当しません。

7.5.3　パラメタトレース情報に表示される項目

パラメタトレース情報に表示される項目を次の表に示します。

表7-6　パラメタトレース情報に表示される項目

項番
表示される項目
説明

1
NO
パラメタ番号が表示されます。SQL文中に指定した順に1から番号が割り当てられます。

2
COD
データ型のコードが表示されます。詳細については，「表7-7　COD，LENに出力される値」を参照してください。

3
LEN
データの長さが表示されます。詳細については，「表7-7　COD，LENに出力される値」を参照してください。

4
IND
標識変数の値が表示されます。

5
DATA
データ（ダンプ形式）が表示されます。
「表7-7　COD，LENに出力される値」のCODに対応するデータ型の形式で出力されます。各データ型のデータ形式については，マニュアル「TP1/EE/Extended Data Cache SQLプログラミング」の「データ型」を参照してください。
ROWに対応するパラメタの場合は，データの先頭から行長分出力されます。

表7-7　COD，LENに出力される値

項番
データ型
COD
LEN

1
INTEGER
f1
4

2
DECIMAL(m,n)
e5
m,n

3
SMALLINT
f5
2

4
CHARACTER(n)
c5
n

5
VARCHAR(n)
c1
n

6
TIMESTAMP(p)
7d

pが0の場合：7

pが2の場合：8

pが4の場合：9

pが6の場合：10

7
ROWID
4d
12

8
ROW※
45
対応する行の長さ

（凡例）

m，n：正の整数

p：0，2，4，または6

注※

SQL文中に指定したROWに対応するパラメタのことです。

なお，パラメタトレース情報の出力サイズの上限をXDBサービス定義のxdb_sql_param_sizeオペランド（省略値は256バイト）で指定できます。上限を超えた部分のパラメタトレース情報は切り捨てられます。

＜この項の構成＞

(1)　パラメタトレース情報の出力例

(1)　パラメタトレース情報の出力例

パラメタトレース情報の出力例を次に示します。

(a)　INSERT文の場合の出力例

*SQL*
INSERT INTO TBL01(C1,C2) VALUES(?,?)
 :
*INPRM* NO=    1 COD=f1 LEN=         4 IND=         0
       DATA=64 00 00 00                                       *d...            *
*INPRM* NO=    2 COD=c5 LEN=        10 IND=         0
       DATA=61 61 61 62 62 62 63 63 63 20                     *aaabbbccc       *
 :

説明

INTEGERおよびCHAR(10)のデータをINSERT文で挿入する場合のパラメタトレース情報の出力例です。変数の指定順に出力されます。xdb_sql_param_trace=OUTを指定した場合は出力されません。

*INPRM*は入力パラメタ情報です。挿入値に指定した変数の情報が出力されます。

VARCHAR型の場合，DATAの先頭2バイトはデータ長領域となります。実データ長＋データ長領域のサイズ分出力されます。ただし，実データ長が-1以下または定義長を超えている場合は，定義長＋データ長領域のサイズ分出力されます。

標識変数がマイナス値の場合は，"DATA="まで表示されます。

同じデータの出力が2行以上続く場合は，"--- SAME x LINES ---"が出力されます（xは省略した行数）。

(b)　検索の場合の出力例

*SQL*SELECT * FROM TBL01 WHERE C1=?
 :
*INPRM* NO=    1 COD=f1 LEN=         4 IND=         0
       DATA=64 00 00 00                                       *d...            *
 :
*OUTPM* NO=    1 COD=f1 LEN=         4 IND=         0
       DATA=64 00 00 00                                       *d...            *
*OUTPM* NO=    2 COD=c5 LEN=        10 IND=         0
       DATA=61 61 61 62 62 62 63 63 63 20                     *aaabbbccc       *
 :

説明

OPEN文およびFETCH文を使用して検索する場合の，パラメタトレース情報の出力例です。

*INPRM*は入力パラメタ情報です。WHERE句に指定した変数の情報が出力されます。

*OUTPM*は検索データ情報です。FETCH文で取得した検索データの情報が出力されます。

FETCH文のSQLCODEが0以外の場合，検索データのパラメタトレース情報は出力されません。

xdb_sql_param_trace=OUTを指定した場合，入力パラメタ情報は出力されません。また，xdb_sql_param_trace=INを指定した場合，検索データ情報は出力されません。

7.5.4　SQL単位情報に表示される項目

SQL単位情報に表示される項目を次に示します。

処理行数

作業表作成回数

作業表削除回数

アクセスパス情報サイズ※1

表定義情報サイズ※1，※2

注※1

SQLプール機能によってSQLの前処理結果が再利用された場合は0が表示されます。

注※2

アクセスパス情報の生成時に確保した表定義情報のサイズです。

SQL単位情報の表示形式については，「10．運用コマンド」の「eexdbed（XDBトレース情報の表示）」を参照してください。

7.5.5　留意事項

SQLトレース情報およびSQL単位情報取得時の留意事項を次に示します。

SQLエラーや警告情報がSQLトレース情報に出力される場合，XDBはSQLCODEまたはSQLWARNを個別に取得することがあります。この場合，SQLトレース情報に，SQL実行要求受け付け時刻，SQL実行要求終了時刻，およびSQL実行時間が出力されません。例えば，次の場合に，これらの情報が出力されません。

1行SELECT文で検索結果が2行以上になった場合

SQL連絡領域のSQLWARN3に警告フラグ'W'が設定された場合

なお，この場合，SQL単位情報とアクセスパス情報は出力されません。

コミットまたはロールバックに対応するSQLトレース情報とSQL単位情報は出力されません。

7.6　アクセスパス情報の表示

ここでは，アクセスパス情報の表示方法と，アクセスパス情報に出力される項目について説明します。

＜この節の構成＞

7.6.1　アクセスパス情報の表示方法

7.6.2　アクセスパス情報に表示される項目

7.6.3　アクセスパス情報の表示例

7.6.1　アクセスパス情報の表示方法

XDBは，SQLの実行時，SQLを解析して，データベースへの最適なアクセスパスを決めています。SQLごとのアクセスパス情報をeexdbedコマンドで表示できます。SQLおよびインデクスのチューニングを行うときにアクセスパス情報を利用してください。

なお，アクセスパス情報を表示するには，XDBトレース情報を取得している必要があります。詳細については，「7.4　XDBトレース情報の取得」を参照してください。

また，eexdbedコマンド以外のコマンドでもアクセスパス情報を表示できます。表示方法については，「7.4.3　XDBトレース情報の表示方法」を参照してください。

7.6.2　アクセスパス情報に表示される項目

アクセスパス情報は次に示す処理ごとに表示されます。

問合せ指定処理

行の挿入処理

行の更新処理

行の削除処理

作業表の作成処理

作業表への行挿入処理

＜この項の構成＞

(1)　問合せ指定処理に関するアクセスパス情報

(2)　行の挿入処理に関するアクセスパス情報

(3)　行の更新処理に関するアクセスパス情報

(4)　行の削除処理に関するアクセスパス情報

(5)　作業表の作成処理に関するアクセスパス情報

(6)　作業表への行挿入処理に関するアクセスパス情報

(1)　問合せ指定処理に関するアクセスパス情報

問合せ指定処理に関するアクセスパス情報は，表の結合を行わない場合と，表の結合が行われた場合とで異なります。それぞれの表示項目について説明します。

(a)　表の結合を行わない場合

問合せ指定処理に関するアクセスパス情報（表の結合を行わない場合）を次に示します。

# Select process
# Table search methods
 schema name           = aa....aa
 table name            = bb....bb
 correlation name      = cc....cc
 index name            = dd....dd
 index type            = ee....ee
 list number           = ff....ff
 scan type             = gg....gg
 search direction      = hh....hh
 search condition[ 1]  = ii....ii
   :
 search condition[ n]  = ii....ii
 key condition         = jj....jj
 row data condition    = kk....kk
 set function          = ll....ll

説明

aa....aa
検索対象表のスキーマ名が表示されます。
作業表の場合は，* WORK SCHEMA *が表示されます。

bb....bb
検索対象表の表識別子が表示されます。
作業表の場合は，* WORK TABLE *が表示されます。

cc....cc
相関名が表示されます。
相関名が指定されていない場合は，この項目は表示されません。

dd....dd
検索時に使用されたインデクスのインデクス識別子が表示されます。
検索時にインデクスが使用されない場合は，* NONE *が表示されます。
作業表に定義されたインデクスが使用された場合は，* WORK INDEX *が表示されます。

ee....ee
検索時に使用されたインデクスのインデクス種別が表示されます。
検索時にインデクスが使用されない場合は，この項目は表示されません。
B-TREE INDEX：ユニーク属性のないインデクス
UNIQUE B-TREE INDEX：ユニーク属性のあるインデクス

ff....ff
作業表の通番が表示されます。
作業表以外の場合は，この項目は表示されません。

gg....gg
表の検索方式が表示されます。
TABLE SCAN：テーブルスキャン
SINGLE INDEX SCAN：単一列インデクスのインデクススキャン
SINGLE KEY SCAN：単一列インデクスのキースキャン
MULTI INDEX SCAN：複数列インデクスのインデクススキャン
MULTI KEY SCAN：複数列インデクスのキースキャン
ROWID FETCH：行IDフェッチ

hh....hh
インデクスの検索方向が表示されます。
検索時にインデクスが使用されない場合は，この項目は表示されません。
ASC：昇順に検索
DESC：降順に検索

ii....ii
インデクスの検索範囲を指示する条件が表示されます（インデクスの構成列順に表示されます）。
すべてのインデクス構成列にインデクスの検索範囲を指示する条件がない場合は，この項目は表示されません。
[ = ]：比較述語の=
[ > ]：比較述語の>
[ < ]：比較述語の<
[ >= ]：比較述語の>=
[ <= ]：比較述語の<=
[ BETWEEN ]：BETWEEN述語
[ RANGE ]：二つの比較述語を組み合わせた範囲条件
RANGEには次のものがあります。

項番 | 組み合わせる条件 | 説明
1 | 列<=Xと列<Yの組み合わせ | X<=列<Y
2 | <条件と<=条件の組み合わせ | X<列<=Y
3 | <条件と<条件の組み合わせ | X<列<Y

* NONE *：該当するインデクス構成列に，インデクスの検索範囲を指示する条件がない場合は，* NONE *が表示されます。

jj....jj
インデクスのキー値に対して評価する条件が表示されます。
インデクスのリーフページに格納されたキー値に対して評価する条件がない場合は，この項目は表示されません。
[ = ]：比較述語の=
[ > ]：比較述語の>
[ < ]：比較述語の<
[ >= ]：比較述語の>=
[ <= ]：比較述語の<=
[ <> ]：比較述語の<>
[ BETWEEN ]：BETWEEN述語
[ NOT BETWEEN ]：NOT BETWEEN述語
[ RANGE ]：二つの比較述語を組み合わせた範囲条件
RANGEには次のものがあります。

項番 | 組み合わせる条件 | 説明
1 | 列<=Xと列<Yの組み合わせ | X<=列<Y
2 | <条件と<=条件の組み合わせ | X<列<=Y
3 | <条件と<条件の組み合わせ | X<列<Y

[ OR ]：OR条件
論理演算子のORの中に含まれる述語は表示されません。
[ NOT ]：NOT条件
論理演算子のNOTの中に含まれる述語は表示されません。

kk....kk
行の列値に対して評価する条件がある場合は，EXISTENCEが表示されます。
行の列値に対して評価する条件がない場合は，この項目は表示されません。

ll....ll
インデクスから集合関数の結果を求める場合は，ACCELERATIONが表示されます。
集合関数の結果をインデクスから求めない場合は，この項目は表示されません。

(b)　表の結合が行われた場合

問合せ指定処理に関するアクセスパス情報（表の結合が行われた場合）を次に示します。

# Select process
# Table join methods
# Nested-loop join (outer table)
# Table search methods
  :
# Nested-loop join (inner table)
# Table search methods
  :

説明

# Nested-loop join (outer table)
これ以降に，ネストループジョインの外表の検索に関する情報が表示されます。

# Nested-loop join (inner table)
これ以降に，ネストループジョインの内表の検索に関する情報が表示されます。

# Table search methods部分に表示される情報ついては，「(a)表の結合を行わない場合」を参照してください。

参考

XDBは，表の結合をネストループジョインで行います。

(2)　行の挿入処理に関するアクセスパス情報

行の挿入処理に関するアクセスパス情報を次に示します。

# Insert process
# Insert table information
 schema name           = aa....aa
 table name            = bb....bb

説明

aa....aa
挿入対象表のスキーマ名が表示されます。

bb....bb
挿入対象表の表識別子が表示されます。

(3)　行の更新処理に関するアクセスパス情報

行の更新処理に関するアクセスパス情報を次に示します。

# Update process
# Update table information
 schema name           = aa....aa
 table name            = bb....bb

説明

aa....aa
更新対象表のスキーマ名が表示されます。

bb....bb
更新対象表の表識別子が表示されます。

(4)　行の削除処理に関するアクセスパス情報

行の削除処理に関するアクセスパス情報を次に示します。

# Delete process
# Delete table information
 schema name           = aa....aa
 table name            = bb....bb

説明

aa....aa
削除対象表のスキーマ名が表示されます。

bb....bb
削除対象表の表識別子が表示されます。

(5)　作業表の作成処理に関するアクセスパス情報

作業表の作成処理に関するアクセスパス情報を次に示します。

# Create work table process
# Create table information
 schema name           = aa....aa
 table name            = bb....bb [ cc....cc columns ]
 index name            = dd....dd [ ee....ee columns ]
 index type            = ff....ff
 list type             = gg....gg
 list number           = hh....hh

説明

aa....aa
* WORK SCHEMA *が表示されます。

bb....bb
* WORK TABLE *が表示されます。

cc....cc
作業表の構成列数が表示されます。

dd....dd
* WORK INDEX *が表示されます。

ee....ee
作業表に作成されるインデクスの構成列数が表示されます。

ff....ff
インデクスの種別が表示されます。
B-TREE INDEX：ユニーク属性のないインデクス

gg....gg
作業表の種別が表示されます。
GROUP：DISTINCT集合関数の処理を行うための作業表
ORDER：ORDER BY句の処理を行うための作業表

hh....hh
作業表の通番が表示されます。

(6)　作業表への行挿入処理に関するアクセスパス情報

作業表への行挿入処理に関するアクセスパス情報を次に示します。

# Insert work table process
# Insert table information
 schema name           = aa....aa
 table name            = bb....bb
 list number           = cc....cc
# Get insert data
# Table search methods                .....※1
     :
または
# Insert work table process
# Insert table information
 schema name           = aa....aa
 table name            = bb....bb
 list number           = cc....cc
# Get insert data
# Table join methods                  .....※2
     :

注※1

# Table search methods部分に表示される情報ついては，「(1)(a)表の結合を行わない場合」を参照してください。

注※2

# Table join methods部分に表示される情報については，「(1)(b)表の結合が行われた場合」を参照してください。

説明

aa....aa
* WORK SCHEMA *が表示されます。

bb....bb
* WORK TABLE *が表示されます。

cc....cc
作業表の通番が表示されます。

7.6.3　アクセスパス情報の表示例

アクセスパス情報の表示例を次に示します。

＜この項の構成＞

(1)　SELECT文のアクセスパス情報の表示例

(2)　SELECT文（ORDER BY句の指定あり）のアクセスパス情報の表示例

(3)　INSERT文のアクセスパス情報の表示例

(4)　UPDATE文のアクセスパス情報の表示例

(5)　DELETE文のアクセスパス情報の表示例

(1)　SELECT文のアクセスパス情報の表示例

次に示すSQLのアクセスパス情報の表示例を次に示します。

SQLの例

SELECT * FROM "T1" WHERE "C1"=10

アクセスパス情報の表示例

******* ACCESS PATH *******
# Select process
# Table search methods
 schema name           = XDBUSER
 table name            = T1
 index name            = T1IX1
 index type            = B-TREE INDEX
 scan type             = SINGLE INDEX SCAN
 search direction      = ASC
 search condition[ 1]  = [=]

(2)　SELECT文（ORDER BY句の指定あり）のアクセスパス情報の表示例

次に示すSQLのアクセスパス情報の表示例を次に示します。

SQLの例

SELECT * FROM "T1" WHERE "C1">=10 ORDER BY "C2" ASC

アクセスパス情報の表示例

******* ACCESS PATH *******
# Create work table process
# Create table information
 schema name           = * WORK SCHEMA *
 table name            = * WORK TABLE * [ 2 columns ]
 index name            = * WORK INDEX * [ 1 columns ]
 index type            = B-TREE INDEX
 list type             = ORDER
 list number           = 1

# Insert work table process
# Insert table information
 schema name           = * WORK SCHEMA *
 table name            = * WORK TABLE *
 list number           = 1
# Get insert data
# Table search methods
 schema name           = XDBUSER
 table name            = T1
 index name            = T1IX1
 index type            = B-TREE INDEX
 scan type             = SINGLE INDEX SCAN
 search direction      = ASC
 search condition[1]   = [>=]

# Select process
# Table search methods
 schema name           = * WORK SCHEMA *
 table name            = * WORK TABLE *
 index name            = * WORK INDEX *
 index type            = B-TREE INDEX
 list number           = 1
 scan type             = SINGLE INDEX SCAN
 search direction      = ASC
# Table search methods
 schema name           = XDBUSER
 table name            = T1
 index name            = * NONE *
 scan type             = ROWID FETCH

説明

# Create work table process以下は，ORDER BY句の指定によって，作業表を作成する処理に関する情報です。

# Insert work table process以下は，作業表に行を挿入する処理に関する情報です。

# Select process以下は，最終的な検索結果を求める処理に関する情報です。

(3)　INSERT文のアクセスパス情報の表示例

次に示すSQLのアクセスパス情報の表示例を次に示します。

SQLの例

INSERT INTO "T1" VALUES(10,'ABC',1)

アクセスパス情報の表示例

******* ACCESS PATH *******
# Insert process
# Insert table information
 schema name           = XDBUSER
 table name            = T1

(4)　UPDATE文のアクセスパス情報の表示例

次に示すSQLのアクセスパス情報の表示例を次に示します。

SQLの例

UPDATE "T1" SET "C2"='XYZ' WHERE "C1"=10

アクセスパス情報の表示例

******* ACCESS PATH *******
# Select process
# Table search methods
 schema name           = XDBUSER
 table name            = T1
 index name            = T1IX1
 index type            = B-TREE INDEX
 scan type             = SINGLE KEY SCAN
 search direction      = ASC
 search condition[1]   = [=]

# Update process
# Update table information
 schema name           = XDBUSER
 table name            = T1

説明

# Select process以下は，更新する行を特定する処理に関する情報です。

# Update process以下は，行を更新する処理に関する情報です。

(5)　DELETE文のアクセスパス情報の表示例

次に示すSQLのアクセスパス情報の表示例を次に示します。

SQLの例

DELETE FROM "T1" WHERE "C1"=10

アクセスパス情報の表示例

******* ACCESS PATH *******
# Select process
# Table search methods
 schema name           = XDBUSER
 table name            = T1
 index name            = T1IX1
 index type            = B-TREE INDEX
 scan type             = SINGLE KEY SCAN
 search direction      = ASC
 search condition[1]   = [=]

# Delete process
# Delete table information
 schema name           = XDBUSER
 table name            = T1

説明

# Select process以下は，削除する行を特定する処理に関する情報です。

# Delete process以下は，行を削除する処理に関する情報です。

7.7　表またはインデクスの追加手順

表またはインデクスを追加する手順を次に示します。

手順

XDBが稼働中の場合，XDBをいったん終了します。

追加する表またはインデクスを格納するDBエリアの設計および容量見積もりを行います。

XDBサービス定義を修正します。新規DBエリアに表またはインデクスを格納する場合は，eexdbareaオペランドを追加してください。既存DBエリアに表またはインデクスを格納する場合は，eexdbareaオペランドの指定値を変更してください。

定義系SQL文記述ファイルを修正します。追加する表またはインデクスのCREATE TABLE文，CREATE INDEX文を記述してください。

インポート制御ファイルおよびエクスポート制御ファイルを修正します。追加する表に対応する制御文を記述してください。

追加する表の入力データファイルを準備します。

XDBを開始します。

また，必要に応じて次に示す項目を見直してください。

カーネルパラメタの設定値

メモリ所要量

表定義プールサイズ

参考

表またはインデクスの定義を変更する場合も同じ手順になります。

8.　チューニング

この章では，チューニングで使用する情報と，チューニングの際に確認する項目について説明します。

＜この章の構成＞

8.1　チューニングの手順

8.2　DBエリアの格納効率に関するチューニング

8.3　インデクス性能に関するチューニング

8.4　SQLに関するチューニング

8.1　チューニングの手順

ここでは，チューニングの考え方とチューニングで使用する情報について説明します。

＜この節の構成＞

(1)　チューニングの考え方

(2)　チューニングで使用する情報

(1)　チューニングの考え方

データベースをチューニングするには，処理性能の観点からチューニングを進める必要があります。しかし，処理性能の向上だけを考えると，マシンのメモリ容量が不足することがあります。このため，処理性能，マシンのメモリ容量のバランスを考えてチューニングを行う必要があります。

(2)　チューニングで使用する情報

チューニングで使用する情報を次の表に示します。

表8-1　チューニングで使用する情報

項番
チューニングで使用する情報
説明

1
データベースの物理解析情報
DBエリアの格納効率に関するチューニングを行うときに使用します。eexdbstaコマンドで取得できます。
出力される情報については，「10．運用コマンド」の「eexdbsta（データベースの状態解析）」を参照してください。

2
データベースの論理解析情報
DBエリアの格納効率に関するチューニングや，インデクスに関するチューニングを行うときに使用します。eexdbstaコマンドで取得できます。
出力される情報については，「10．運用コマンド」の「eexdbsta（データベースの状態解析）」を参照してください。

3
TASKTM情報
SQLに関するチューニングを行うときに使用します。出力される情報については，「7.3.1　TASKTM情報に出力されるXDBに関する情報」を参照してください。

4
システム統計情報
SQLに関するチューニングを行うときに使用します。出力される情報については，「7.3.2　システム統計情報に出力されるXDBに関する情報」を参照してください。

8.2　DBエリアの格納効率に関するチューニング

ここでは，DBエリアの格納効率に関するチューニングについて説明します。

＜この節の構成＞

8.2.1　表用DBエリアの格納効率に関するチューニング

8.2.2　インデクス用DBエリアの格納効率に関するチューニング

8.2.1　表用DBエリアの格納効率に関するチューニング

eexdbstaコマンドで，データベースの物理解析情報と論理解析情報を取得してください。取得した情報を基に，次の表に示す項目を確認してチューニングを実施してください。

表8-2　表用DBエリアの格納効率に関するチューニングで確認する項目

項番
確認項目
原因
対策

1
表の未使用領域が多いため，データの格納効率が低下していないか
行の追加や削除が頻繁に行われたため，使用されていないむだな領域が発生しています。
セグメントの再利用の適用を検討してください。すでにセグメントの再利用を適用している場合は，セグメントの再利用契機の指定を見直してください。セグメントの再利用については，「3.2.2　セグメントの再利用の設定」を参照してください。

2
DBエリアの使用率が低く，将来のデータ量の増加を見越してもDBエリアの容量をむだに割り当てていないか
次に示すどちらかの原因が考えられます。

DBエリアの容量見積もりが適切でなく，DBエリアの容量が大き過ぎます。

DBエリアの自動増分によってDBエリアの容量を拡張したあと，データ量が減少しています。

DBエリアの初期サイズおよび増分サイズを見直してください。

3
表オプションの表の未使用領域指定分（CREATE TABLE文のPCTFREE句）を除いても，未使用領域が大きくないか
DBエリアのページサイズが大き過ぎて，1ページ内の最大格納行数（255行）を超えた行数を格納できる大きさになっている可能性があります。
DBエリアのページサイズを小さくしてください。1ページ内の最大格納行数は255行です。それに見合うページサイズを設定してください。
ページサイズの目安については，「3.4.2　ページサイズを決めるときの考慮点」を参照してください。

4
表オプションの表の未使用領域指定分（CREATE TABLE文のPCTFREE句）を除いても，基本行用セグメント中の未使用領域が大きくないか
ページサイズが，行長の倍数＋40になっていないため，ページ内に行を格納できないむだな領域が発生している可能性があります。
ページサイズが，行長の倍数＋40となるように変更してください。

8.2.2　インデクス用DBエリアの格納効率に関するチューニング

eexdbstaコマンドで，データベースの論理解析情報を取得してください。取得した情報を基に，次の表に示す項目を確認してチューニングを実施してください。

表8-3　インデクス用DBエリアの格納効率に関するチューニングで確認する項目

項番
確認項目
原因
対策

1
行IDリストページの未使用領域が大きくないか
256個以上重複したキー値が多いため，行IDリストページが大量に作成されたと考えられます。
インデクスの定義を変更するなどして，キー値の重複数を255個以下にしてください。
また，インデクス用DBエリアのページサイズを小さくすると，ある程度の効果があります。

8.3　インデクス性能に関するチューニング

eexdbstaコマンドで，データベースの論理解析情報を取得してください。取得した情報を基に，次の表に示す項目を確認してチューニングを実施してください。

表8-4　インデクスに関するチューニングで確認する項目

項番 | 確認項目 | 原因 | 対策
1 | 行IDリストページの使用領域が多くないか※ | 256個以上重複したキー値が多いため，インデクスを使用した検索処理で絞り込みが十分に機能していない可能性があります。 | インデクスの定義を変更するなどして，キー値の重複数を255個以下にしてください。できれば，ユニークインデクスにしてください。

注※

インデクス用DBエリアについて出力された情報を確認してください。

8.4　SQLに関するチューニング

TASKTM情報およびシステム統計情報を基に，次の表に示す項目を確認してチューニングを実施してください。

表8-5　SQLに関するチューニングで確認する項目

項番
確認項目
原因
対策

1
検索行数または更新行数に対して，ページ要求回数が多くないか
インデクスで検索対象とする行が絞り込まれていないことが考えられます。
表にインデクスが定義されていない場合は，インデクスの定義を検討してください。表にインデクスが定義されている場合は，インデクス構成列に対して，検索対象とする行を絞り込む条件を指定することを検討してください。検索時に使用されるインデクスについては，「3.3.1(1)(c)データをソートするときに使う」および「4.3　SQLの最適化」を参照してください。

2
作業表が作成されていないか
ソート処理を行うときに作業表が作成されています。
ソート処理を代用するためのインデクスを定義することを検討してください。ソート処理とインデクスの関係については，「3.3　インデクスの設計」を参照してください。
また，作業表を作成するSQLについては，「4.3.4　作業表を作成するSQL」を参照してください。

3
表定義プールのヒット率が低いため，表定義プールから掃き出された表定義情報の数が多くないか
SQLの前処理で必要な表定義情報が表定義プールに保存されていないため，表定義プールから表定義情報が掃き出されていることが考えられます。
表定義プールサイズ（xdb_tabledefpool_sizeオペランドの指定値）を大きくすることを検討してください。表定義プールサイズの見積もりについては，「4.2.2　表定義プールサイズの見積もり」を参照してください。

4
SQLプールのヒット率が低く，SQLプールから掃き出されたSQLの前処理結果の数が多くないか
SQLプール機能を効果的に使用していない可能性があります。
発行するSQLの種類が多く，それらのSQLが順番に循環して発行されているため，掃き出しと保存が繰り返されていることが考えられます。
次に示す対処をしてください。

構文が同じSQLの，SQLテキストの長さ，空白の位置や数などが一致しているかを見直してください。

SQLプールサイズ（xdb_sqlpool_sizeオペランドの指定値）を大きくすることを検討してください。

詳細については，「4.1　SQLプール機能」を参照してください。

5
SQLプールの動的確保が発生していないか
SQLプールが不足していると考えられます。
SQLプールの動的確保によって保存されたSQLの前処理結果は，再利用対象になりません。SQLプールサイズ（xdb_sqlpool_sizeオペランドの指定値）を大きくすることを検討してください。
SQLプールサイズの見積もりについては，「4.1.3　SQLプールサイズの見積もり」を参照してください。

9.　トラブルシュート

この章では，トラブルシュート情報の一覧と実行系孤立状態になったときの対処方法について説明します。

＜この章の構成＞

9.1　トラブルシュート情報の一覧

9.2　実行系孤立状態になったときの対処方法

9.1　トラブルシュート情報の一覧

障害が発生した場合，次の表に示すトラブルシュート情報を参照して，障害の原因を調査してください。

表9-1　トラブルシュート情報の一覧

項番
トラブルシュート情報の種類
説明
出力先

1
SQLトレース情報
SQLのトレース情報が出力されます。出力する情報をXDBサービス定義で選択できます。SQLで問題が発生した場合にこの情報を参照してください。
$DCDIR/spool/dceeinf/xdb/サービスグループ名xdbxxx

2
syslog
syslogfileに出力されます。この情報からXDBの稼働状況がわかります。
/etc/syslog.confに定義された出力先になります。

3
メッセージログ
この情報からXDBの稼働状況がわかります。
$DCDIR/spool/dceeinf/log/サービスグループ名xxx

4
標準出力または標準エラー出力
TP1/Server Baseはコンソールを持たないデーモンプロセスのため，標準出力・標準エラー出力の出力先は，TP1/Server Baseで設定した出力先に従います。そのため，特別なメッセージ出力機構を持たないUAPの出力内容を参照できます。
TP1/Server Baseで設定する出力先については，マニュアル「OpenTP1 運用と操作」の「標準出力ファイルに関する運用」を参照してください。
デフォルトは/tmp/betran.logとなります。prcoutシェルで任意の場所に出力できます。

（凡例）

xxx：3けたの数字

■トラブルシュート情報を取得するコマンド

障害が発生した場合，TP1/EEのeerasgetコマンドまたはTP1/Server Baseのdcrasgetコマンドでトラブルシュート情報を取得してください。eerasgetまたはdcrasgetコマンドを実行すると，その延長で自動的にXDBのトラブルシュート情報を取得するeexdbrasgetコマンドが実行されます。

XDBのトラブルシュート情報には，DBエリアの内容も含まれるため，出力ファイルの容量が大きくなるので注意が必要です。詳細については，「10．運用コマンド」の「eexdbrasget（保守資料の取得）」を参照してください。

eerasgetコマンドについては，マニュアル「TP1/Server Base Enterprise Option 使用の手引」を，dcrasgetコマンドについては，マニュアル「OpenTP1 運用と操作」を参照してください。

なお，TP1キャッシュ機能に関する障害が発生した場合は，マニュアル「TP1/EE/Extended Transaction Controller 使用の手引」を参照して対処してください。

次節以降では，XDB固有の対処が必要な障害についてだけ，対処方法を説明しています。

9.2　実行系孤立状態になったときの対処方法

実行系孤立状態になった場合，XDBはメモリダンプをメモリダンプファイルに出力して停止します。メモリダンプが出力されたあとに，次に示すコマンドを実行して，メモリダンプファイルから表データを抽出し，エクスポートファイルに出力してください。

eexdbexttbl -f メモリダンプファイル名〔-k 囲み文字〕〔-s 区切り文字〕処理対象表識別子
エクスポートファイル名

表データの抽出は表ごとに行います。そのため，表データを抽出する必要がある表の数だけ，このコマンドを実行する必要があります。

eexdbexttblコマンドについては，「10．運用コマンド」の「eexdbexttbl（メモリダンプファイルからの表データの抽出）」を参照してください。

注意

複数の表に対してeexdbexttblコマンドを実行する場合は，表ごとに異なるエクスポートファイル名を指定してください。同じエクスポートファイル名を指定すると，前のエクスポートファイルが上書きされてしまいます。

■メモリダンプファイルの出力先

メモリダンプファイルの出力先を次に示します。

ディレクトリ名：$DCDIR/spool/dceeinf/hamdump

ファイル名：サービスグループ名_ノードID_ランID_CL通番_xdb_コミット通番
ランID：16進数8けた固定
CL通番：16進数16けた固定
コミット通番：16進数16けた固定

注意

メモリダンプファイルの容量は，全DBエリアの合計と同じ大きさになるため，メモリダンプの出力が途中で失敗しないようにディスク容量を見積もってください。

なお，実行系孤立状態になったときは，マニュアル「TP1/EE/Extended Transaction Controller 使用の手引」の「実行系孤立状態になった場合の対処」を参照してください。

10.　運用コマンド

この章では，XDBの運用コマンドについて説明します。

＜この章の構成＞

運用コマンドの一覧

eetrbwtor（メッセージへの応答）

eexdbdefchk（XDBサービス定義のチェック）

eexdbdump（コアファイルからのXDBトレース情報の表示）

eexdbed（XDBトレース情報の表示）

eexdbexport（表データのエクスポート）

eexdbexttbl（メモリダンプファイルからの表データの抽出）

eexdbfput（XDBトレース情報のファイルへの出力）

eexdbimport（表データのインポート）

eexdbmemdmp（メモリダンプの出力）

eexdbrasget（保守資料の取得）

eexdbshmrm（共用メモリの解放）

eexdbsql（SQLの実行）

eexdbsta（データベースの状態解析）

運用コマンドの一覧

XDBの運用コマンドの一覧を次の表に示します。

表10-1　XDBの運用コマンド一覧

項番 | 機能 | 運用コマンド名 | オフライン | オンライン | API | 実行系 | 待機系
1 | 環境設定 | XDBサービス定義のチェック | eexdbdefchk | ○ | ○ | × | ○ | ○
2 | データのインポート・エクスポート | 表データのエクスポート | eexdbexport | × | ○ | × | ○ | ×
3 | メモリダンプファイルからの表データの抽出 | eexdbexttbl | ○ | ○ | × | ○ | ×
4 | 表データのインポート | eexdbimport | × | ○ | × | ○ | ×
5 | メモリダンプの出力 | eexdbmemdmp | × | ○ | × | ○ | ○
6 | チューニング | データベースの状態解析 | eexdbsta | × | ○ | × | ○ | ×
7 | メモリ管理 | 共用メモリの解放 | eexdbshmrm | ○ | × | × | ○ | ○
8 | トラブルシューティング | コアファイルからのXDBトレース情報の表示 | eexdbdump | ○ | ○ | ○ | ○ | ×
9 | XDBトレース情報の表示 | eexdbed | × | ○ | ○ | ○ | ×
10 | XDBトレース情報のファイルへの出力 | eexdbfput | ○ | ○ | ○ | ○ | ×
11 | 保守資料の取得 | eexdbrasget | ○ | ○ | × | ○ | ○
12 | メッセージへの応答 | eetrbwtor※ | × | ○ | ○ | ○ | ○
13 | データの操作 | SQLの実行 | eexdbsql | × | ○ | × | ○ | ×

（凡例）

オフライン：TP1/EE停止中のコマンド実行可否

オンライン：TP1/EE起動中のコマンド実行可否

API：ee_adm_call_command関数からのコマンド実行可否

実行系：CLサーバの実行系でのコマンド実行可否

待機系：CLサーバの待機系でのコマンド実行可否

○：実行できます。

×：実行できません。

注※

TP1/EEの運用コマンドです。このマニュアルでは，XDBを使用しているときの差分だけを説明します。マニュアル「TP1/Server Base Enterprise Option 使用の手引」もあわせて参照してください。

運用コマンドの入力形式，および記述形式については，マニュアル「TP1/Server Base Enterprise Option 使用の手引」を参照してください。

注意

eexdbimportコマンドは，XTCのCLサーバのシミュレート機能を使用しているときに実行できます。通常は使用できません。CLサーバのシミュレート機能については，マニュアル「TP1/EE/Extended Transaction Controller 使用の手引」を参照してください。

eetrbwtor（メッセージへの応答）

eetrbwtorコマンドの入力待ちメッセージが出力された場合，そのメッセージに対する応答を行います。

eetrbwtorコマンドはTP1/EEの運用コマンドです。ここでは，XDBを使用しているときに出力されるメッセージとそのときに指定する処理オプションについて説明します。eetrbwtorコマンドの機能および指定方法については，マニュアル「TP1/Server Base Enterprise Option 使用の手引」を参照してください。

XDBを使用している場合，次に示す応答メッセージが出力されます。

KFSB56208-Qメッセージ

このメッセージは，メモリダンプファイルまたはエクスポートファイルの出力障害が発生した場合に出力されます。KFSB56208-Qメッセージが出力された場合に指定する処理オプションを次の表に示します。

表10-2　KFSB56208-Qメッセージが出力された場合に指定する処理オプション

項番
メッセージID
内容
処理オプション
オプションの意味

1
KFSB56208-Q

メモリダンプファイルの出力障害

エクスポートファイルの出力障害

｛-r｜-c｝

-r：メモリダンプファイルまたはエクスポートファイルの出力をリトライします。

-c：メモリダンプファイルまたはエクスポートファイルの出力を中止します。

eexdbdefchk（XDBサービス定義のチェック）

機能

XDBサービス定義の指定内容に誤りがないかどうかをチェックします。

このコマンドは，XDBサービス定義を新規に作成した場合や，XDBサービス定義を変更した場合に実行してください。

XDBサービス定義の指定内容に文法的な誤りがあると，XDBを開始できません。また，指定内容が妥当でないと，意図したとおりにXDBが動作しないなどの不具合が発生するおそれがあります。

コマンドの形式

eexdbdefchk -t ｛syntax｜detail｝
           XDBサービス定義ファイル名

オプションおよび引数の説明

● -t ｛syntax｜detail｝

XDBサービス定義の指定内容のチェックレベルを指定します。

syntax：

文法レベルのチェックを行います。チェックする内容を次に示します。

オペランドの指定形式に誤りがないかをチェックします。

オペランドの指定範囲が正しいかどうかをチェックします。例えば，指定範囲が0～100のオペランドに200を指定していないかをチェックします。

同じオペランドが指定されていないかをチェックします。

指定必須のオペランド（eexdbareaオペランドなど）が指定されているかをチェックします。

detail：

syntax指定時に行う文法レベルのチェックに加えて，次に示すチェックを行います。

eexdbareaオペランドの指定によって確保される共用メモリのサイズが，カーネルパラメタ（SHMALL，SHMMAX，SHMMNI）の設定値を超えていないかをチェックします。

eexdbareaオペランドの指定によって確保される共用メモリが，固定できるサイズかをチェックします。共用メモリを固定するかどうかはxdb_memory_fixedオペランドで指定します。

eexdbareaオペランドの指定によって確保される共用メモリが，メモリダンプファイルを出力できるサイズかをチェックします。

注意

共用メモリサイズのチェックでは，サイズの比較を行うだけで，実際に共用メモリを確保できるかどうかのチェックは行いません。

eexdbareaオペランドのオプションの指定値に矛盾がないかをチェックします。オプションの指定値が，次に示す関係になっているかをチェックします。

初期確保共用メモリ面数＜警告メッセージ出力タイミング1＜警告メッセージ出力タイミング2＜最大確保共用メモリ面数

関連するオペランドの指定値に矛盾がないかをチェックします。オペランドの指定値が，次に示す関係になっているかをチェックします。

xdb_trace_file_size＞xdb_trace_buffer_size＞xdb_trace_entry_size＞xdb_sql_text_sizeおよびxdb_sql_param_size

DBエリア名にEDMSTおよびEDDICが指定されていないかをチェックします。

eexdbareaオペランドに指定するDBエリアが次に示すとおりになっているかをチェックします。
・表用DBエリアが一つ以上定義されている
・作業表用DBエリアが一つだけ定義されている

eexdbareaオペランドのページサイズに2048の倍数が指定されているかをチェックします。

eexdbareaオペランドに指定したDBエリア名が名称規則に従っているかをチェックします。

オペランドに指定したパス名に対して，次に示す内容をチェックします。
・実在するパス名であるか
・ファイルのパス名，またはディレクトリのパス名が適切に指定されているか
・ファイル名が長過ぎないか
・パスの中にシンボリックリンクが多過ぎないか

コマンドを実行したユーザに対して次の権限があるかをチェックします。
ファイルを指定するオペランドの場合：読み込み権限
ディレクトリを指定するオペランドの場合：読み込み権限，書き込み権限，および実行権限

●XDBサービス定義ファイル名

　　～〈パス名〉((1～1023文字))

チェックを実施するXDBサービス定義ファイルの名称を絶対パス名で指定します。

リターンコード

eexdbdefchkコマンドのリターンコードを次に示します。

0：正常終了

1：異常終了

リターンコードが1の場合，エラーの原因を特定するためのメッセージが出力されます。メッセージを参照して，XDBサービス定義を修正し，eexdbdefchkコマンドを再度実行してください。

注意事項

eexdbdefchkコマンドに関する注意事項を次に示します。

テスト環境（開発環境）でチェックしたXDBサービス定義を本番環境にコピーした場合，本番環境でもこのコマンドを実行して，XDBサービス定義のチェックを実施してください。テスト環境ではエラーにならなくても，実行環境の違いによって本番環境でエラーになることがあります。

-tオプションにdetailを指定した場合にXDBサービス定義の文法エラーが発生したとき（syntax指定時にチェックする項目でエラーが発生したとき）は，syntax指定時にチェックする項目だけをチェックします。detail指定時にチェックする項目はチェックしません。

eexdbdump（コアファイルからのXDBトレース情報の表示）

機能

TP1/EEが出力したコアファイル中のXDBトレース情報を編集し，標準出力に出力します。TP1/EEプロセスが異常終了した場合に，XDBに関する障害を調査するとき，このコマンドを使用してXDBトレース情報を表示します。

コマンドの形式

eexdbdump 〔-r ランID〕
         〔-s ｛sql｝〕
         〔-x 中央処理通番の下限値，中央処理通番の上限値〕
         〔-v サービス名〔，サービス名〕…〕
           コアファイル名

オプションおよび引数の説明

●-r ランID

　　～〈16進数〉((8けた))

指定されたランIDを持つ情報だけを編集します。

●-s ｛sql｝

　　～《sql》

SQLトレース情報，SQL単位情報，およびアクセスパス情報を標準出力に出力します。

●-x 中央処理通番の下限値，中央処理通番の上限値

　　～〈16進数〉((0～ffffffff))

指定された中央処理通番の範囲内の情報だけを編集します。

このオプションを指定する場合は，中央処理通番の下限値と上限値を必ず指定してください。

サービスを並列に実行している場合，実行された順序でXDBトレース情報が出力されないことがあります。このオプションを指定すると，サービスが実行された順序でXDBトレース情報が出力されます。

●-v サービス名〔，サービス名〕…

　　～〈識別子〉((1～31文字))

指定されたサービス名に対応する情報を編集します。

サービス名は，最大10個指定できます。

●コアファイル名

　　～〈パス名〉((1～1023文字))

編集対象のコアファイル名を指定します。

現在と異なる環境で作成したコアファイルは指定できません。異なる環境とは，次のことを意味しています。

TP1/EEまたはXDBなどの製品のバージョンが異なる

プラットフォームが異なる

出力形式

eexdbdumpコマンドの実行結果の出力形式は，eexdbedコマンドの実行結果の出力形式と同じです。出力例については，「10．運用コマンド」の「eexdbed（XDBトレース情報の表示）」の「■-eオプションにrを指定した場合（XDBトレース情報を出力する場合）」を参照してください。

ただし，eexdbdumpコマンドの場合は，次の項目は出力されません。

ファイルに出力を開始した日付

ファイルを作成したTP1/EEのバージョン

出力形式に関する留意事項を次に示します。

編集対象のレコードがない場合は，ヘッダ情報だけ表示されます。

サービス名に表示される内容がないときは，「*」が表示されます。

XDBトレース情報がXDBトレース情報ファイルに出力されない状態のときは，XDBトレース出力時刻に「*」が表示されます。

経過時間が，4294967295ミリ秒を超えた場合は，4294967295ミリ秒と表示されます。

XDBトレース情報に欠落があった場合，欠落したレコード数が表示されます。欠落したレコード数が4294967295個を超えた場合は，4294967295と表示されます。

XDBトレース情報取得時に障害が発生した場合などで，情報が取得できない項目があったときは，0または「*」が表示されます。

リターンコード

eexdbdumpコマンドのリターンコードを次に示します。

0：正常終了

0以外：異常終了

注意事項

eexdbdumpコマンドの出力情報にマルチバイト文字列が含まれる場合は，出力内容をリダイレクトしてファイルに出力し，出力されたマルチバイト文字列が参照できる環境で参照してください。

eexdbed（XDBトレース情報の表示）

機能

XDBトレース情報ファイル中のXDBトレース情報を編集し，標準出力に出力します。

コマンドの形式

eexdbed 〔-e 編集種別〕
       〔-t 〔開始時刻〕〔，終了時刻〕〕
       〔-r ランID〕
       〔-s ｛sql｝〕
       〔-x 中央処理通番の下限値，中央処理通番の上限値〕
       〔-v サービス名〔，サービス名〕…〕
         XDBトレース情報ファイル名 〔XDBトレース情報ファイル名〕…

オプションの組み合わせによって指定できないオプションがあります。オプションの組み合わせと指定可否を次の表に示します。

表10-3　eexdbedコマンドのオプションの組み合わせと指定可否

オプション | -e | -t | -r | -s | -x | -v | XDBトレース情報ファイル名
r | f | sql | 単一 | 複数
-e | r | － | × | ○ | ○ | ○ | ○ | ○ | ○ | ×
f | × | － | × | × | × | × | × | ○ | ○
-t | ○ | × | － | ○ | ○ | ○ | ○ | ○ | ×
-r | ○ | × | ○ | － | ○ | ○ | ○ | ○ | ×
-s | sql | ○ | × | ○ | ○ | － | ○ | ○ | ○ | ×
-x | ○ | × | ○ | ○ | ○ | － | ○ | ○ | ×
-v | ○ | × | ○ | ○ | ○ | ○ | － | ○ | ×
XDBトレース情報ファイル名 | 単一 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | － | ×
複数 | × | ○ | × | × | × | × | × | × | －

（凡例）

○：指定できます。

×：指定できません。

－：該当しません。

オプションおよび引数の説明

●-e 編集種別

　　～《f》

編集種別を指定します。

r：

XDBトレース情報を標準出力に出力します。

f：

XDBトレース情報ファイルに関する情報を標準出力に出力します。

●-t 開始時刻，終了時刻

XDBトレース情報の編集範囲を指定します。編集対象の開始時刻と終了時刻を指定します。

このオプションの指定規則を次に示します。

時刻には，1970年1月1日0時0分0秒～現在時刻までの範囲を指定できます。

このオプションを省略すると，指定したファイルの全情報が編集対象になります。

このオプションを指定する場合は，開始時刻か終了時刻のどちらかを必ず指定してください。

開始時刻を省略した場合は，XDBトレース情報ファイルの先頭から，指定した終了時刻までが編集範囲になります。

終了時刻を省略した場合は，指定した開始時刻からXDBトレース情報ファイルの最後までが編集範囲になります。

開始時刻および終了時刻は，「hhmmss〔MMDD〔YYYY〕〕」の形式で指定します。例えば，2008年7月8日13時15分00秒を指定する場合は，13150007082008となります。

hh：時（00≦hh≦23）

指定を省略できません。

mm：分（00≦mm≦59）

指定を省略できません。

ss：秒（00≦ss≦59）

指定を省略できません。

MM：月（01≦MM≦12）

指定を省略できます。省略した場合，当月の指定年日時刻と見なされます。

DD：日（01≦DD≦31）

指定を省略できます。省略した場合，当日の指定年月時刻と見なされます。

YYYY：年（西暦）（1970≦YYYY≦9999）

指定を省略できます。省略した場合，当年の指定月日時刻と見なされます。

なお，月または日を省略する場合は，年，月，日のすべてを省略してください。例えば，日だけを省略したり，月と日だけを省略したりすることはできません。この場合，オプションエラーになります。

●-r ランID

　　～〈16進数〉((8けた))

指定されたランIDを持つ情報だけを編集します。

●-s ｛sql｝

　　～《sql》

SQLトレース情報を編集します。

●-x 中央処理通番の下限値，中央処理通番の上限値

　　～〈16進数〉((0～ffffffff))

指定された中央処理通番の範囲内の情報だけを編集します。

このオプションを指定する場合は，中央処理通番の下限値，および中央処理通番の上限値の両方を必ず指定してください。

サービスを並列に実行している場合，実行された順序でXDBトレース情報が出力されないことがあります。このオプションを指定すると，サービスが実行された順序でXDBトレース情報が出力されます。

●-v サービス名〔，サービス名〕…

　　～〈識別子〉((1～31文字))

指定されたサービス名を持つ情報だけを編集します。

サービス名は，最大10個指定できます。

●XDBトレース情報ファイル名 〔XDBトレース情報ファイル名〕…

　　～〈パス名〉((1～1023文字))

編集するXDBトレース情報ファイル名を，絶対パスまたは相対パスで指定します。

-eオプションにfを指定した場合は，XDBトレース情報ファイル名を最大1024個指定できます。

出力形式

eexdbedコマンドの実行結果の出力形式は，指定したオプションによって異なります。

■-eオプションにrを指定した場合（XDBトレース情報を出力する場合）

-eオプションにrを指定した場合の，eexdbedコマンドの実行結果の出力例を次に示します。

注※1

パラメタトレース情報が表示されます。xdb_sql_param_traceオペランドにNO以外が指定されている場合にパラメタ数分出力されます。

注※2

SQLトレース情報がオペレーションコード単位に表示されます。オペレーションコードの実行数分出力されます。ただし，SQLCODEに0以外が出力された場合，または警告情報が出力された場合は，SQL実行要求受付時刻，SQL実行要求終了時刻，およびSQL実行時間が出力されないことがあります。

注※3

SQL単位情報が表示されます。xdb_sql_trace_outオペランドにYが指定されている場合に出力されます。

注※4

アクセスパス情報が表示されます。xdb_sql_accesspath_outオペランドにYが指定されている場合に出力されます。

出力内容を次の表に示します。

表10-4　-eオプションにrを指定した場合の出力内容

項番
出力形式
表示内容

1
aa-aa[-aa]
TP1/EEのバージョン

2
AA-AA-[AA]
XDBのバージョン

3
bb....bb
コマンドに指定した引数

4
cc....cc
コマンドに指定したXDBトレース情報ファイル名

5
dddd/dd/dd dd:dd:dd ddd.ddd
XDBトレース情報ファイルにXDBトレース情報の出力を開始した日時
（年／月／日　時間：分：秒 ミリ秒．マイクロ秒）

6
ee-ee[-ee]
XDBトレース情報ファイルを作成したときのTP1/EEのバージョン

7
EE-EE[-EE]
XDBトレース情報ファイルを作成したときのXDBのバージョン

8
T1
XDBトレース情報取得タイプ

9
ff....ff
サービスグループ名（最大31文字）

10
gggggggg
TP1/EEのランID（16進数8けた）

11
hhhh/hh/hh hh:hh:hh hhh.hhh
SQLトレース情報の取得時刻
（年／月／日　時間：分：秒 ミリ秒．マイクロ秒）

12
i1....i1
サービス名（最大31文字）

13
i2....i2
中央処理通番（16進数8文字）

14
jjjj/jj/jj jj:jj:jj jjj.jjj
UAP開始時刻
（年／月／日　時間：分：秒 ミリ秒．マイクロ秒）

15
kk....kk
コネクト番号（10進数10けた）

16
ll....ll
コネクションハンドル（10進数5けた）

17
nn....nn
IFA番号（10進数5けた）

18
oo....oo
スレッドID（10進数20けた）

19
pp....pp
SQLカウンタ（10進数10けた）

20
qq....qq
オペレーションコード（最大4文字の文字列）

21
rr....rr
文ハンドル番号（10進数5けた）

22
ss....ss
SQLCODE（10進数20けた）

23
tt....tt
SQLWARN（最大16文字）

24
uuuu/uu/uu uu:uu:uu uuu.uuu
SQL実行要求受付時刻
（年／月／日　時間：分：秒 ミリ秒．マイクロ秒）

25
vvvv/vv/vv vv:vv:vv vvv.vvv
SQL実行要求終了時刻
（年／月／日　時間：分：秒 ミリ秒．マイクロ秒）

26
ww:ww:ww www.www
SQL実行時間
（時間：分：秒 ミリ秒．マイクロ秒）

27
xx....xx
SQL文

28
yy....yy
パラメタ種別（INPRMまたはOUTPM）

29
zz....zz
パラメタ番号

30
a1
データ型コード

31
d1....d1
データの長さ

32
e1....e1
標識変数の値

33
h1....h1
パラメタのデータ
ダンプ形式（16進数）で表示されます。XDBサービス定義のxdb_sql_param_sizeオペランドで指定した長さまで表示されます。

34
j1....j1
処理行数（10進数10けた）

35
k1.....k1
作業表作成回数（10進数10けた）

36
l1....l1
作業表削除回数（10進数10けた）

37
m1....m1
アクセスパス情報サイズ（単位：バイト）（10進数10けた）

38
n1....n1
表定義情報サイズ（単位：バイト）（10進数10けた）

39
o1
アクセスパス情報

40
pppp/pp/pp pp:pp:pp ppp.ppp
XDBトレース情報の出力を再開した時刻
（年／月／日　時間：分：秒 ミリ秒．マイクロ秒）

41
qq
すべての出力バッファが使用中となり，その間にXDBトレース情報の出力要求が発生し，破棄したレコード数
破棄レコードがない場合は出力されません。

■-eオプションにfを指定した場合（XDBトレース情報ファイルに関する情報を出力する場合）

-eオプションにfを指定した場合の，eexdbedコマンドの実行結果の出力例を次に示します。

注※1

指定したファイル数分表示されます。

注※2

指定されたファイルがXDBトレース情報ファイルでない場合に表示されます。

出力内容を次の表に示します。

表10-5　-eオプションにfを指定した場合の出力内容

項番
出力形式
表示内容

1
aa-aa[-aa]
TP1/EEのバージョン

2
AA-AA[-AA]
XDBのバージョン

3
bb....bb
指定したコマンドの引数

4
cc....cc
コマンドに指定したXDBトレース情報ファイル名

5
dddd/dd/dd dd:dd:dd ddd.ddd
XDBトレース情報ファイルにXDBトレース情報の出力を開始した日時
（年／月／日　時間：分：秒 ミリ秒．マイクロ秒）

6
ee-ee[-ee]
XDBトレース情報ファイルを作成したときのTP1/EEのバージョン

7
EE-EE[-EE]
XDBトレース情報ファイルを作成したときのXDBのバージョン

8
T1
XDBトレース情報取得タイプ

9
ff....ff
サービスグループ名（最大31文字）

10
gggggggg
TP1/EEのランID（16進数8けた）

■留意事項

出力形式の留意事項を次に示します。

編集対象のレコードがない場合は，ヘッダ情報だけ表示されます。

サービス名に表示する内容がないときは，「*」が表示されます。

リターンコード

eexdbedコマンドのリターンコードを次に示します。

0：正常終了

0以外：異常終了

注意事項

eexdbedコマンドの出力情報にマルチバイト文字列が含まれる場合は，出力内容をリダイレクトしてファイルに出力し，出力されたマルチバイト文字列が参照できる環境で参照してください。

eexdbexport（表データのエクスポート）

機能

共用メモリ上の表データを，エクスポートファイルに出力します。エクスポート処理は表単位で実施されます。

このコマンドで作成したエクスポートファイルは，XDB開始時の入力データファイルとして使用できます。また，eexdbimportコマンドの入力データファイルとしても使用できます。

エクスポートファイルの出力形式については，「6.8.2　エクスポートファイルの形式」を参照してください。

コマンドの形式

eexdbexport -g サービスグループ名
         〔-k 囲み文字〕
         〔-s 区切り文字〕
         〔-i 処理経過メッセージの出力契機間隔〕
         〔-r コマンド処理打ち切り時間〕
           処理対象表識別子
           エクスポートファイル名

オプションおよび引数の説明

●-g サービスグループ名

　　～〈識別子〉((1～31文字))

対象となるTP1/EEプロセスのサービスグループ名を指定します。

●-k 囲み文字

　　～〈文字列〉《"》

エクスポートファイル中に出力される列データを囲む文字を指定します。この指定を省略した場合は，囲み文字として二重引用符（"）が仮定されます。

CHARACTER型およびTIMESTAMP型のデータは，ここで指定した文字列に囲まれます。例を次に示します。

（例）-k ' を指定した場合

'hitachi'

このオプションを指定するときの規則を次に示します。

ストローク（|）のように，シェルが別の意味で使用している特殊文字を指定する場合は，二重引用符（"）またはアポストロフィ（'）で囲んで指定してください。

次に示す文字は指定できません。
・2バイト以上の文字列
・マルチバイト文字
・空白
・タブ
・アスタリスク（*）
・区切り文字と同じ文字（区切り文字は-sオプションで指定します）

このオプションの指定例を次に示します。

（例）ストローク（|）を指定する場合の指定例

eexdbexport …-k '|' …

●-s 区切り文字

　　～〈文字列〉《,》

エクスポートファイル中に出力される列データを区切る文字を指定します。この指定を省略した場合は，区切り文字としてコンマ（,）が仮定されます。

列データは，ここで指定した文字列で区切られます。例を次に示します。

（例）-s , を指定した場合

'hitachi',5,'database'

このオプションを指定するときの規則を次に示します。

ストローク（|）のように，シェルが別の意味で使用している特殊文字を指定する場合は，二重引用符（"）またはアポストロフィ（'）で囲んで指定してください。

次に示す文字は指定できません。
・2バイト以上の文字列
・マルチバイト文字
・英大文字（A～Z），英小文字（a～z），数字（0～9）
・アスタリスク（*）
・二重引用符（"）
・下線（_）
・囲み文字と同じ文字（囲み文字は-kオプションで指定します）

このオプションの指定例を次に示します。

（例）ストローク（|）を指定する場合の指定例

eexdbexport …-s '|' …

●-i 処理経過メッセージの出力契機間隔

　　～〈符号なし整数〉((0～1000))《0》（単位：1000行）

TP1/EEのメッセージログに出力する処理経過メッセージの出力契機間隔を1000行単位で指定します。例えば，1を指定すると，エクスポート処理が1000行終わるごとに，TP1/EEのメッセージログに処理経過メッセージが出力されます。0を指定した場合は，処理経過メッセージは出力されません。

●-r コマンド処理打ち切り時間

　　～〈符号なし整数〉((1～6000))《60》（単位：分）

コマンド処理の打ち切り時間を分単位で指定します。

デフォルトの60分（1時間）でエクスポート処理が終わらない場合は，打ち切り時間の指定を長くしてください。エクスポート処理に1時間も掛からない場合は，打ち切り時間の指定を短くしてください。

コマンドが実行されている間，TP1/EEのサービスが実行できないことがあります。そのため，コマンド処理の打ち切り時間を適切に設定する必要があります。

なお，ファイルへの出力処理に時間が掛かる場合，このオプションに指定したコマンド処理打ち切り時間を過ぎても，コマンド処理が打ち切られないことがあります。

●処理対象表識別子

　　～〈識別子〉

エクスポートの対象とする表の表識別子を指定します。

なお，/，"，空白などの英数字以外の文字が表識別子に含まれている場合，表識別子をアポストロフィ（'）と二重引用符（"）で囲んで指定してください。指定例を次に示します。

（例）'"table/shouhin"'

●エクスポートファイル名

　　～〈パス名〉((1～510文字))

出力先のエクスポートファイル名を絶対パス名で指定します。

このオプションを指定するときの規則を次に示します。

パス名として指定できる文字は，英数字，スラッシュ（/），ピリオド（.），下線（_），#，@，~，コロン（:），および半角空白です。パス名にこれら以外の文字列が含まれている場合は，そのパス名をこのオプションに指定できません。

半角空白を含むパス名を指定する場合は，アポストロフィ（'）で囲んで指定してください。

実行カレントディレクトリからの相対パスは指定できません。

パス名に全角文字が含まれている場合，そのパス名をこのオプションに指定できません。

リターンコード

eexdbexportコマンドのリターンコードを次に示します。

0：正常終了

0以外：異常終了

注意事項

eexdbexportコマンドに関する注意事項を次に示します。

eexdbexportコマンドの実行時，指定したエクスポートファイルがすでに存在する場合はそのエクスポートファイルを上書きします。そのため，複数の表に対してeexdbexportコマンドを実行する場合は，表ごとに別々のエクスポートファイルを指定してください。

eexdbexportコマンドの実行中は，エクスポートファイルに対して，コマンドやほかのアプリケーションによる読み込み，および書き込みを行わないでください。

eexdbexportコマンドを実行する環境の環境変数LANGには，ja_JP.SJISを指定してください。

eexdbexportコマンドが異常終了した場合，不正なエクスポートファイルが削除されないまま残ることがあります。

eexdbexttbl（メモリダンプファイルからの表データの抽出）

機能

メモリダンプファイルから表データを抽出し，エクスポートファイルに出力します。例えば，次のような場合，メモリダンプがメモリダンプファイルに出力されます。

実行系孤立状態になった場合

eexdbmemdmpコマンドを実行した場合

このときにこのコマンドを実行すると，メモリダンプファイルからエクスポートファイルを作成できます。

エクスポートファイルの出力形式については，「6.8.2　エクスポートファイルの形式」を参照してください。

コマンドの形式

eexdbexttbl -f メモリダンプファイル名
         〔-k 囲み文字〕
         〔-s 区切り文字〕
           処理対象表識別子
           エクスポートファイル名

オプションおよび引数の説明

●-f メモリダンプファイル名

　　～〈パス名〉((1～510文字))

対象となるメモリダンプファイル名を絶対パス名で指定します。

このオプションを指定するときの規則を次に示します。

パス名として指定できる文字は，英数字，スラッシュ（/），ピリオド（.），下線（_），#，@，~，コロン（:），および半角空白です。パス名にこれら以外の文字列が含まれている場合は，そのパス名をこのオプションに指定できません。

半角空白を含むパス名を指定する場合は，アポストロフィ（'）で囲んで指定してください。

実行カレントディレクトリからの相対パスは指定できません。

パス名に全角文字が含まれている場合，そのパス名をこのオプションに指定できません。

●-k 囲み文字

　　～〈文字列〉《"》

エクスポートファイル中に出力される列データを囲む文字を指定します。この指定を省略した場合は，囲み文字として二重引用符（"）が仮定されます。

CHARACTER型およびTIMESTAMP型のデータは，ここで指定した文字列に囲まれます。例を次に示します。

（例）-k ' を指定した場合

'hitachi'

このオプションを指定するときの規則を次に示します。

ストローク（|）のように，シェルが別の意味で使用している特殊文字を指定する場合は，二重引用符（"）またはアポストロフィ（'）で囲んで指定してください。

次に示す文字は指定できません。
・2バイト以上の文字列
・マルチバイト文字
・空白
・タブ
・アスタリスク（*）
・区切り文字と同じ文字（区切り文字は-sオプションで指定します）

このオプションの指定例を次に示します。

（例）ストローク（|）を指定する場合の指定例

eexdbexttbl …-k '|' …

●-s 区切り文字

　　～〈文字列〉《,》

エクスポートファイル中に出力される列データを区切る文字を指定します。この指定を省略した場合は，区切り文字としてコンマ（,）が仮定されます。

列データは，ここで指定した文字列で区切られます。例を次に示します。

（例）-s , を指定した場合

'hitachi',5,'database'

このオプションを指定するときの規則を次に示します。

ストローク（|）のように，シェルが別の意味で使用している特殊文字を指定する場合は，二重引用符（"）またはアポストロフィ（'）で囲んで指定してください。

次に示す文字は指定できません。
・2バイト以上の文字列
・マルチバイト文字
・英大文字（A～Z），英小文字（a～z），数字（0～9）
・アスタリスク（*）
・二重引用符（"）
・下線（_）
・囲み文字と同じ文字（囲み文字は-kオプションで指定します）

このオプションの指定例を次に示します。

（例）ストローク（|）を指定する場合の指定例

eexdbexttbl …-s '|' …

●処理対象表識別子

　　～〈識別子〉

エクスポートの対象とする表の表識別子を指定します。

なお，/，"，空白などの英数字以外の文字が表識別子に含まれている場合，表識別子をアポストロフィ（'）と二重引用符（"）で囲んで指定してください。指定例を次に示します。

（例）'"table/shouhin"'

●エクスポートファイル名

　　～〈パス名〉((1～510文字))

出力先のエクスポートファイル名を絶対パス名で指定します。

このオプションを指定するときの規則を次に示します。

パス名として指定できる文字は，英数字，スラッシュ（/），ピリオド（.），下線（_），#，@，~，コロン（:），および半角空白です。パス名にこれら以外の文字列が含まれている場合は，そのパス名をこのオプションに指定できません。

半角空白を含むパス名を指定する場合は，アポストロフィ（'）で囲んで指定してください。

実行カレントディレクトリからの相対パスは指定できません。

パス名に全角文字が含まれている場合，そのパス名をこのオプションに指定できません。

リターンコード

eexdbexttblコマンドのリターンコードを次に示します。

0：正常終了

0以外：異常終了

注意事項

eexdbexttblコマンドに関する注意事項を次に示します。

eexdbexttblコマンドの実行時，指定したエクスポートファイルがすでに存在する場合はそのエクスポートファイルを上書きします。そのため，複数の表に対してeexdbexttblコマンドを実行する場合は，表ごとに別々のエクスポートファイルを指定してください。

eexdbexttblコマンドの実行中は，メモリダンプファイルやエクスポートファイルに対してアクセスしないでください。

eexdbexttblコマンドを実行する環境の環境変数LANGには，ja_JP.SJISを指定してください。

eexdbexttblコマンドが異常終了した場合，不正なエクスポートファイルが削除されないまま残ることがあります。

eexdbfput（XDBトレース情報のファイルへの出力）

機能

XDBトレース情報をスタックしているバッファからXDBトレース情報ファイルに，XDBトレース情報を強制的に出力します。

障害時の調査や，SQLのチューニングなどで，至急，直近のXDBトレース情報が必要な場合に，このコマンドを使用します。

コマンドの形式

eexdbfput -g サービスグループ名

オプションの説明

●-g サービスグループ名

　　～〈識別子〉((1～31文字))

対象となるTP1/EEプロセスのサービスグループ名を指定します。

リターンコード

eexdbfputコマンドのリターンコードを次に示します。

0：正常終了

0以外：異常終了

eexdbimport（表データのインポート）

注意

このコマンドは，XTCのCLサーバのシミュレート機能を使用しているときに実行できます。通常は使用できません。CLサーバのシミュレート機能については，マニュアル「TP1/EE/Extended Transaction Controller 使用の手引」を参照してください。

機能

表にデータを格納します。入力データファイルまたはエクスポートファイルを入力データとし，表単位にインポート処理を行います。

データをインポートする表にインデクスが定義されている場合は，表のインポート処理が完了したあとにインデクスが作成されます。

コマンドの形式

eexdbexport -g サービスグループ名
         〔-d〕
         〔-k 囲み文字〕
         〔-s 区切り文字〕
         〔-b ソートバッファサイズ〕
         〔-i 処理経過メッセージの出力契機間隔〕
         〔-w 一時ファイルを作成するディレクトリパス名〕
         〔-R コマンド処理打ち切り時間〕
           処理対象表識別子
           入力データファイル名

オプションおよび引数の説明

●-g サービスグループ名

　　～〈識別子〉((1～31文字))

対象となるTP1/EEプロセスのサービスグループ名を指定します。

●-d

作成モードでインポートを実行する場合に指定します。

省略した場合は，追加モードが仮定されます。

作成モードの場合は，表に格納されているデータをすべて削除してから，入力データを格納します。

追加モードの場合は，表に格納されているデータを変更しないで，入力データを追加します。

●-k 囲み文字

　　～〈文字列〉《"》

入力データファイル中の列データを囲む文字を指定します。この指定を省略した場合は，囲み文字として二重引用符（"）が仮定されます。

このオプションを指定するときの規則を次に示します。

ストローク（|）のように，シェルが別の意味で使用している特殊文字を指定する場合は，二重引用符（"）またはアポストロフィ（'）で囲んで指定してください。

次に示す文字は指定できません。
・2バイト以上の文字列
・マルチバイト文字
・半角空白
・タブ
・アスタリスク（*）
・区切り文字と同じ文字（区切り文字は-sオプションで指定します）

このオプションの指定例を次に示します。

（例）ストローク（|）を指定する場合の指定例

eexdbimport …-k '|' …

●-s 区切り文字

　　～〈文字列〉《,》

入力データファイル中の列データを区切る文字を指定します。この指定を省略した場合は，区切り文字としてコンマ（,）が仮定されます。

このオプションを指定するときの規則を次に示します。

ストローク（|）のように，シェルが別の意味で使用している特殊文字を指定する場合は，二重引用符（"）またはアポストロフィ（'）で囲んで指定してください。

次に示す文字は指定できません。
・2バイト以上の文字列
・マルチバイト文字
・英大文字（A～Z），英小文字（a～z），数字（0～9）
・アスタリスク（*）
・二重引用符（"）
・下線（_）
・囲み文字と同じ文字（囲み文字は-kオプションで指定します）

このオプションの指定例を次に示します。

（例）ストローク（|）を指定する場合の指定例

eexdbimport …-s '|' …

●-b ソートバッファサイズ

　　～〈符号なし整数〉((128～2097152))《1024》（単位：キロバイト）

インデクス作成処理で使用するソートバッファサイズをキロバイト単位で指定します。

●-i 処理経過メッセージの出力契機間隔

　　～〈符号なし整数〉((0～1000))《0》（単位：1000行）

TP1/EEのメッセージログに出力する処理経過メッセージの出力契機間隔を1000行単位で指定します。例えば，1を指定すると，インポート処理が1000行終わるごとにTP1/EEのメッセージログに処理経過メッセージが出力されます。0を指定した場合は，処理経過メッセージは出力されません。

●-w 一時ファイルを作成するディレクトリパス名

　　～〈パス名〉((1～400文字))

一時ファイルを作成するディレクトリ名を絶対パス名で指定します。パス名の最後のスラッシュ（/）は指定しないでください。

この指定を省略した場合は，次の優先順位でディレクトリが決定されます。

XDBサービス定義のxdb_import_work_directoryオペランドで指定したディレクトリ

XDB側のカレントディレクトリ

このオプションを指定するときの規則を次に示します。

パス名として指定できる文字は，英数字，スラッシュ（/），ピリオド（.），下線（_），#，@，~，コロン（:），および半角空白です。パス名にこれら以外の文字列が含まれている場合は，そのパス名をこのオプションに指定できません。

半角空白を含むパス名を指定する場合は，アポストロフィ（'）と二重引用符（"）で囲んで指定してください。

実行カレントディレクトリからの相対パスは指定できません。

パス名に全角文字が含まれている場合，そのパス名をこのオプションに指定できません。

このディレクトリ下に作成される一時ファイルの見積もり式については，「6.7　インポート制御ファイルおよびエクスポート制御ファイルの作成」の「インポート制御ファイルの作成」を参照してください。

●-R コマンド処理打ち切り時間

　　～〈符号なし整数〉((1～6000))《60》（単位：分）

コマンド処理の打ち切り時間を分単位で指定します。

デフォルトの60分（1時間）でインポート処理が終わらない場合は，打ち切り時間の指定を長くしてください。インポート処理に1時間も掛からない場合は，打ち切り時間の指定を短くしてください。

コマンドが実行されている間，TP1/EEのサービスが実行できないことがあります。そのため，コマンド処理の打ち切り時間を適切に設定する必要があります。

●処理対象表識別子

　　～〈識別子〉

データをインポートする表の表識別子を指定します。

なお，/，"，空白などの英数字以外の文字が表識別子に含まれている場合，表識別子をアポストロフィ（'）と二重引用符（"）で囲んで指定してください。指定例を次に示します。

（例）'"table/shouhin"'

●入力データファイル名

　　～〈パス名〉((1～510文字))

入力データファイル名を絶対パス名で指定します。

このオプションを指定するときの規則を次に示します。

パス名として指定できる文字は，英数字，スラッシュ（/），ピリオド（.），下線（_），#，@，~，コロン（:），および半角空白です。パス名にこれら以外の文字列が含まれている場合は，そのパス名をこのオプションに指定できません。

半角空白を含むパス名を指定する場合は，アポストロフィ（'）と二重引用符（"）で囲んで指定してください。

実行カレントディレクトリからの相対パスは指定できません。

パス名に全角文字が含まれている場合，そのパス名をこのオプションに指定できません。

入力データファイルの入力形式については，「6.8.1　入力データファイルの形式」を参照してください。

リターンコード

eexdbimportコマンドのリターンコードを次に示します。

0：正常終了

0以外：異常終了

注意事項

eexdbimportコマンドに関する注意事項を次に示します。

データのインポート中は，コマンドやSQLを発行するプログラムを実行しないでください。実行した場合は，データベースが不整合となるおそれがあります。

eexdbimportコマンドが異常終了した場合，表，インデクス，およびその格納DBエリアの内容は保証されません。このため，eexdbimportコマンド実行前にはeexdbmemdmpコマンドなどでバックアップを取得しておいてください。また，エラーが発生した場合はXDBを再起動したあと，取得したバックアップからデータベースを回復してください。

eexdbimportコマンドの実行中は，入力データファイルに対して，ほかのアプリケーションから読み込みまたは書き込みをしないでください。

eexdbimportコマンドを実行する環境の環境変数LANGには，ja_JP.SJISを指定してください。

eexdbmemdmp（メモリダンプの出力）

機能

TP1/EEプロセスのサービス実行処理を停止し，そのTP1/EEプロセスが確保したすべての共用メモリの内容を，確保した順番にメモリダンプファイルに出力します。

このコマンドで取得したメモリダンプファイルを入力情報にしてeexdbexttblコマンドを実行すると，表データを抽出したエクスポートファイルを作成できます。

コマンドの形式

eexdbmemdmp -g サービスグループ名
         〔-s サービス停止待ち時間〕
         〔-r コマンド処理打ち切り時間〕

オプションの説明

●-g サービスグループ名

　　～〈識別子〉((1～31文字))

対象となるTP1/EEプロセスのサービスグループ名を指定します。

●-s サービス停止待ち時間

　　～〈符合なし整数〉((1～65535))《10》（単位：秒）

TP1/EEプロセスのサービス実行処理が停止するまでの待ち時間を秒単位で指定します。

このオプションに指定した時間内で，TP1/EEプロセスのサービス実行処理が停止しない場合，eexdbmemdmpコマンドがエラーになります。

このコマンドを実行した場合，TP1/EEのサービス実行を停止したあとに，メモリダンプを出力します。このオプションには，サービス実行処理が停止するまでの待ち時間を指定します。

●-r コマンド処理打ち切り時間

　　～〈符合なし整数〉((1～6000))《60》（単位：分）

コマンド処理の打ち切り時間を分単位で指定します。コマンドプロセスからTP1/EEプロセスにダンプ出力処理実行を依頼して，結果応答が返送されるまでの時間を分単位で指定します。

デフォルトの60分（1時間）でメモリダンプの出力処理が終わらない場合は，打ち切り時間の指定を長くしてください。メモリダンプの出力処理に1時間も掛からない場合は，打ち切り時間の指定を短くしてください。

コマンドが実行されている間，TP1/EEのサービスが実行できないことがあります。そのため，コマンド処理の打ち切り時間を適切に設定する必要があります。

なお，ファイルへの出力処理に時間が掛かる場合，このオプションに指定したコマンド処理打ち切り時間を過ぎても，コマンド処理が打ち切られないことがあります。

出力形式

メモリダンプはバイナリデータで出力されます。メモリダンプファイルの出力先を次に示します。

ディレクトリ名：$DCDIR/spool/dceeinf/hamdump

ファイル名：サービスグループ名_ノードID_ランID_CL通番_xdb_コミット通番※

注※

ランID：16進数8けた固定

CL通番：16進数16けた固定

コミット通番：16進数16けた固定

リターンコード

eexdbmemdmpコマンドのリターンコードを次に示します。

0：正常終了

0以外：異常終了

注意事項

eexdbmemdmpコマンドに関する注意事項を次に示します。

eexdbmemdmpコマンド実行時，メモリダンプファイルがすでに存在する場合は，そのメモリダンプファイルを上書きします。

eexdbmemdmpコマンドが異常終了した場合，不正なメモリダンプファイルが削除されないまま残ることがあります。

メモリダンプファイルを出力するディレクトリの空き容量が十分にあることを確認してください。メモリダンプファイルの容量は，全DBエリアの容量と同じくらいになります。

eexdbrasget（保守資料の取得）

機能

XDBのトラブルシュートに必要な保守資料をファイルに取得します。

通常は，TP1/EEのeerasgetコマンド，またはTP1/Server Baseのdcrasgetコマンドで保守資料を取得してください。eexdbrasgetコマンドで保守資料を取得した場合，障害原因を特定するための情報が一部取得できないことがあります。

■TP1/EEのeerasgetコマンド，TP1/Server Baseのdcrasgetコマンドとの関係

TP1/EEのeerasgetコマンドを実行すると，その延長で自動的にeexdbrasgetコマンドが実行されて，XDBのトラブルシュートに必要な保守資料が取得されます。なお，eerasgetコマンドに-lオプションを指定して実行すると，eexdbrasgetコマンドも-lオプションが指定されたと仮定して実行されます。eerasgetコマンドに-sオプションを指定して実行した場合も同様です。

TP1/Server Baseのdcrasgetコマンドを実行すると，その延長で自動的にeexdbrasgetコマンドが実行されて，XDBのトラブルシュートに必要な保守資料が取得されます。dcrasgetコマンドを実行した場合，eexdbrasgetコマンドに-lオプションを指定したときに取得される情報と，-sオプションを指定したときに取得される情報の両方が取得されます。

コマンドの形式

eexdbrasget 〔-l|-s〕
            保守資料取得ファイル名

オプションおよび引数の説明

●-l｜-s

取得する情報を選択します。

-l：

XDBの状態表示コマンドによって得られる情報を取得します。

-s：

XDBの出力コマンドによって得られる情報を取得します。

このオプションを省略すると，-lオプションを指定したときに取得される情報と，-sオプションを指定したときに取得される情報の両方が取得されます。

●保守資料取得ファイル名

保守資料取得ファイル名を絶対パス名で指定します。

指定したファイル名がすでに存在する場合は，そのファイルを上書きします。

出力されるファイルはTAR形式のアーカイブファイルのため，ファイルを参照する場合は，tarコマンドでアーカイブファイルを解凍してください。

なお，eexdbrasgetコマンドを実行する前に，eexdbrasgetコマンドの実行ユーザ（OpenTP1管理者）がファイルを出力できるように，ファイルを出力するディレクトリに対して適切なアクセス権限があるかどうかを確認してください。

リターンコード

eexdbrasgetコマンドのリターンコードを次に示します。

0：正常終了

0以外：異常終了

注意事項

eexdbrasgetコマンドに関する注意事項を次に示します。

eexdbrasgetコマンドを実行するには，OpenTP1管理者の権限が必要になります。

保守資料取得ファイルを出力するディレクトリの空き容量が十分にあることを確認してください。eexdbrasgetコマンドで取得する情報には，DBエリアの内容も含まれています。また，出力情報をtarコマンドでアーカイブするため，全DBエリアの容量の2倍以上の空き容量が必要になります。

eexdbrasgetコマンドを実行する前に，PATH，LD_LIBRARY_PATH，DCDIR，DCCONFPATHなどの環境変数が正しく設定されているか確認してください。設定する必要がある環境変数については，マニュアル「TP1/Server Base Enterprise Option 使用の手引」の「OpenTP1管理者の環境設定」を参照してください。

eexdbshmrm（共用メモリの解放）

機能

XDBが確保しているすべての共用メモリを解放します。例えば，次のような場合にこのコマンドを使用します。

XDBが終了したあと，DBエリアが使用している共用メモリを解放したい場合

TP1/EEプロセスが異常終了したあと，DBエリアが使用している共用メモリを解放したい場合

このコマンドはXDBの稼働中に実行できません。

なお，通常は，XDBが終了したあとに，DBエリアが使用する共用メモリは解放されません。詳細については，「2.3.2　メモリ上のデータの保存」を参照してください。

コマンドの形式

eexdbshmrm -g サービスグループ名〔,サービスグループ名〕…

オプションの説明

●-g サービスグループ名〔,サービスグループ名〕…

　　～〈識別子〉((1～31文字))

対象となるTP1/EEプロセスのサービスグループ名を指定します。サービスグループ名は，最大10個指定できます。

サービスグループ名を複数指定した場合，指定した順序でサービスグループの共用メモリを解放します。そのとき，あるサービスグループで共用メモリの解放に失敗した場合，次のサービスグループの共用メモリの解放処理を行います。この場合，コマンドのリターンコードは0以外になります。

リターンコード

eexdbshmrmコマンドのリターンコードを次に示します。

0：正常終了

0以外：異常終了

注意事項

eexdbshmrmコマンドに関する注意事項を次に示します。

eexdbshmrmコマンドは，対象となるTP1/EEプロセスのサービス実行処理が停止した状態で実行してください。サービス実行処理を停止しない状態で，eexdbshmrmコマンドを実行するとエラーになります。

オプションの指定に誤りがある場合，コマンドはエラーになります。この場合，共用メモリの解放処理は一切行われません。

eexdbsql（SQLの実行）

機能

標準入力やファイルから，SQLまたはeexdbsqlのサブコマンドを入力し，その実行結果を標準出力またはファイルに出力します。このコマンドを利用すると，会話形式でSQLを実行できます。

なお，このコマンドを終了する場合は，eexdbsqlのサブコマンドの#EXITを実行してください。

注意

eexdbsqlコマンドでは，操作系SQLだけが実行できます。定義系SQLは実行できません。

コマンドの形式

eexdbsql -g サービスグループ名
      〔-V〕
      〔-o 出力ファイル名〕
      〔-r コマンド処理打ち切り時間〕

オプションの説明

●-g サービスグループ名

　　～〈識別子〉((1～31文字))

対象となるTP1/EEプロセスのサービスグループ名を指定します。

●-V

このオプションを指定すると，SQLまたはサブコマンドの実行結果のほかに，実行したSQLまたはサブコマンドの内容も出力されます。

このオプションを指定した場合と指定しない場合の違いを次に示します。

・ファイルに記述したSQLまたはサブコマンドをリダイレクトでファイルから入力して実行する場合

eexdbsql -g srvl < infile
この場合，標準出力には，SQLまたはサブコマンドの実行結果だけが出力されます。

eexdbsql -g srvl -V < infile
この場合，標準出力には，SQLまたはサブコマンドの実行結果のほかに，実行したSQLまたはサブコマンドの内容が出力されます。

・SQLまたはサブコマンドの実行結果をリダイレクトでファイルに出力する場合

eexdbsql -g srvl > outfile
この場合，ファイルには，SQLまたはサブコマンドの実行結果だけが出力されます。

eexdbsql -g srvl -V > outfile
この場合，ファイルには，SQLまたはサブコマンドの実行結果のほかに，実行したSQLまたはサブコマンドの内容が出力されます。

このオプションの指定例については，「SQLおよびサブコマンドの入力方法」および「SQLおよびサブコマンドの実行結果の出力方法」を参照してください。

●-o 出力ファイル名

　　～〈パス名〉((1～510文字))

SQLの実行結果をファイルに出力する場合にこのオプションを指定します。出力先のファイル名を絶対パス名で指定してください。

このオプションを指定すると，SQLの実行結果と，実行したSQLの内容が出力されます。

なお，eexdbsqlコマンドは，ここで指定した出力ファイルが存在するかどうかをチェックしません。

このオプションを指定するときの規則を次に示します。

パス名として指定できる文字は，英数字，スラッシュ（/），ピリオド（.），下線（_），#，@，~，コロン（:），および半角空白です。パス名にこれら以外の文字列が含まれている場合は，そのパス名をこのオプションに指定できません。

半角空白を含むパス名を指定する場合は，アポストロフィ（'）で囲んで指定してください。

パス名に全角文字が含まれている場合，そのパス名をこのオプションに指定できません。

このオプションの指定例については，「SQLおよびサブコマンドの実行結果の出力方法」を参照してください。

eexdbsqlコマンドが異常終了した場合，ここで指定した出力ファイルは自動的に削除されません。

・-Vオプションと-oオプションの違い

-Vオプションと-oオプションの違いを次の表に示します。

表10-6　-Vオプションと-oオプションの違い

項番
-Vオプションの場合
-oオプションの場合

1

SQLの実行結果と，実行したSQLの内容が出力されます。

サブコマンドの実行結果と，実行したサブコマンドの内容が出力されます。

SQLの実行結果と，実行したSQLの内容が出力されます。

サブコマンドの実行結果は出力できません。

2
出力できる実行結果の上限が60キロバイトになります。
出力できる実行結果の上限はありません。

なお，-oオプションと-Vオプションを同時に指定した場合，-oオプションの出力結果は-Vオプションの影響を受けません。

●-r コマンド処理打ち切り時間

　　～〈符号なし整数〉((1～6000))《60》（単位：分）

コマンド処理の打ち切り時間を分単位で指定します。

デフォルトの60分（1時間）でコマンドの処理が終わらない場合は，打ち切り時間の指定を長くしてください。コマンドの処理に1時間も掛からない場合は，打ち切り時間の指定を短くしてください。

コマンドが実行されている間，TP1/EEのサービスが実行できないことがあります。そのため，コマンド処理の打ち切り時間を適切に設定する必要があります。

実行できるSQLおよびサブコマンド

実行できるSQLおよびサブコマンドについて説明します。

■実行できるSQL

指定できるSQLを次の表に示します。

表10-7　指定できるSQL

項番 | SQL種別 | SQL | 内容
1 | 操作系SQL | DELETE文 | 行を削除します。
2 | INSERT文 | 行を挿入します。
3 | SELECT文 | 行を検索します。
4 | UPDATE文 | 行を更新します。

なお，SQLを実行すると，1SQLごとに自動的にコミットされます。

■実行できるeexdbsqlのサブコマンド

SQL以外にも，次の表に示すeexdbsqlのサブコマンドを実行できます。

表10-8　eexdbsqlのサブコマンド一覧

項番 | コマンド機能 | 概要 | 参照先
1 | #COMMENT | 行を注釈にします。 | eexdbsqlのサブコマンドの詳細
2 | #EXIT | eexdbsqlコマンドを終了します。
3 | #SET DUMPMODE | 検索結果を16進形式で表示します。
4 | #SET OPT REPORT | インデクス情報，作業表情報を表示します。

SQLおよびサブコマンドの入力方法

SQLおよびサブコマンドは，標準入力から入力する方法と，ファイルから入力する方法があります。

■標準入力からの入力する場合

eexdbsqlコマンドを実行すると，コマンド入力待ちの状態になるため，SQLおよびサブコマンドを入力します。コマンド入力待ちの状態になると，プロンプトが表示されます。プロンプトは入力する状況によって表示形式が変わります。プロンプトの表示形式を次の表に示します。

表10-9　プロンプトの表示形式

項番 | プロンプトの表示形式 | 説明
1 | COMMAND ? | 通常の入力待ちであることを示します。
2 | NEXT ? | 継続行の入力待ちであることを示します。

それぞれのSQLおよびサブコマンド，およびデータの最後にはセミコロン（;）を指定してください。eexdbsqlコマンドを終了するには，#EXITコマンドを入力してください。

■ファイルから入力する場合

実行するSQLおよびサブコマンドをあらかじめファイルに記述して，リダイレクションを利用して入力します。

改行コードには，X'0A'を使用してください。SQLおよびサブコマンド中に，X'00'～X'1F'のコードを指定した場合は，eexdbsqlコマンドがそのコードを空白に置き換えます。

ファイル中に#EXITを記述していない場合，または#EXITの記述の前にEOF制御文字を含む場合は，eexdbsqlコマンドが終了処理を行います。

実行例を次に示します。

（例）

eexdbsql -g srvl -V < infile

＜infileの記述内容＞

SELECT "C1","C2"
FROM "T1";
#EXIT;

SQLおよびサブコマンドの終了指定

1行の最後にセミコロン（;）がある場合，セミコロンの前までがSQLおよびサブコマンドと見なされます。セミコロン以降は，コメントとして扱われます。セミコロンがない場合は，次の行に継続しているものとして扱われます。行を連結する場合，改行記号を削除して連結されます。

実行例を次に示します。

（例）

SELECT "C1",                     （継続）
"C2"                             （継続）
FROM "T1";                       （SQL文の終了）

eexdbsqlのサブコマンドの詳細

eexdbsqlのサブコマンドの詳細について説明します。

■#COMMENT（注釈）

機能

行を注釈行にします。

形式

#COMMENT 注釈

■#EXIT（eexdbsqlコマンドの終了）

機能

eexdbsqlコマンドを終了します。

形式

#EXIT

■#SET DUMPMODE（検索結果の16進形式での表示）

機能

検索結果を16進形式と文字形式で表示します。

16進形式とは，0～9，およびA～Fで表す文字列の形式のことです。16進文字2文字で1バイトのデータを表現します。

形式

#SET DUMPMODE ｛ON｜OFF｝

ON

検索結果を16進形式で表示します。

OFF

検索結果を文字形式で表示します。

eexdbsqlコマンド開始時はOFFが仮定されます。

■#SET OPT REPORT（インデクス情報，作業表情報の表示）

機能

インデクス情報，および作業表情報を表示します。

形式

#SET OPT REPORT ｛ON｜OFF｝

ON

インデクス情報，および作業表情報を表示します。

ただし，作業表を生成しないSQLの場合，作業表情報は表示されません。

OFF

インデクス情報，および作業表情報を表示しません。

eexdbsqlコマンド開始時はOFFが仮定されます。

使用例

SELECT文の情報を表示する場合の使用例を次に示します。

（例）

#SET OPT REPORT ON;
SELECT * FROM "T1" WHERE C1=100 ORDER BY C2;
KFSB96104-I The index "IX#T1C1" of table "XDBUSER"."T1" will be used.
KFSB96105-I Executing this SQL will create 1 work tables.

SQLおよびサブコマンドの実行結果の出力方法

SQLおよびサブコマンドの実行結果の出力方法を説明します。

■標準出力に出力する場合

SQLおよびサブコマンドの結果は，eexdbsqlコマンドを実行した標準出力に表示されます。

標準出力には，SQLの実行結果を最大で60キロバイトまでしか出力できません。それ以上の実行結果が必要な場合は，-oオプションを使用して出力ファイルを指定してください。

■ファイルに出力する場合

リダイレクトや-oオプションの指定などによって，標準出力の出力先をファイルに変更できます。

実行例を次に示します。

（例）

eexdbsql -g srvl -V | tee outlog

-oオプションの実行例を次に示します。

（例）

eexdbsql -g srvl -o outlog

実行結果の出力形式

SQLの実行結果の出力形式を次に示します。

■SELECT文の場合

SELECT文を実行したときの，実行結果の例を次に示します。

SELECT 'C1 = ',"C1" FROM "T1";
(1)  EXP C1
  ----- ---------------
(2) C1 = -123456789.1234
(3) C1 = ***************
(4) KFSB96103-I            2 rows were selected.

説明

問合せ式の結果，導出される表の列名
名前がない列の場合は，△△EXP（△は空白1文字）が表示されます。

検索結果
検索結果を表示する文字形式を次の表に示します。

表10-10　各データ型の文字形式

項番 | データ型 | 内容※
1 | 数データ | 各データ型の定数形式（符号，およびピリオドを含みます）
2 | 文字データ | 各データ型の定数形式からアポストロフィ（'）を除いたもの（ただし，表示できない文字はコロン（:）で表示します）
3 | 日時データ | 定数形式のアポストロフィ（'）で囲まれた部分
4 | 行IDデータ | 16進形式

注※

文字形式に変換できない場合は，データを文字形式で表現した場合の，最大長の数分の疑問符（?）が表示されます。

選択式にROWを指定した場合は，16進形式で表示されます。

ナル値の表示方法
データを文字形式で表現した場合の，最大長の数分アスタリスク（*）が表示されます。

検索結果行数

■SELECT文以外の操作系SQLの場合

SELECT文以外の操作系SQLを実行すると，DELETE文，INSERT文，およびUPDATE文によって次のように操作行数が表示されます。ただし，操作行数がオーバフローした場合は，アスタリスク（*）が三つ表示されます。

実行結果の例を次に示します。

■SELECT文以外の操作系SQLを実行したときの例

COMMAND ?     +----2----+----3----+----4----+----5----+----6----+----7----+

DELETE FROM "T1" WHERE "C1"=0;
KFSB96103-I            1 rows were deleted.
COMMAND ?     +----2----+----3----+----4----+----5----+----6----+----7----+

INSERT INTO "T1"("C1","C2") VALUES(+1520.34,'abc');
KFSB96103-I            1 rows were inserted.
COMMAND ?     +----2----+----3----+----4----+----5----+----6----+----7----+

UPDATE "T1" SET "C1"=0 WHERE "C1"<0;
KFSB96103-I            2 rows were updated.

文字コードに関する注意事項

文字コードに関する注意事項を次に示します。

eexdbsqlコマンドの入出力で扱える文字コードは，シフトJISです。SQLなどの入力データや検索結果などの出力データの文字コードは，シフトJISとして処理されます。

コマンドを実行する環境の環境変数LANGには，ja_JP.SJISを指定してください。

リターンコード

eexdbsqlコマンドのリターンコードを次に示します。

0：正常終了

4：異常終了

eexdbsta（データベースの状態解析）

機能

DBエリア内のデータの格納状態を解析し，その解析結果を集計して標準出力に出力します。

このコマンドを使用すると，データベースの容量や格納効率，表およびインデクスの使用状況を確認できます。

コマンドの形式

eexdbsta -g サービスグループ名
      〔-p｜-l〕
      〔-r コマンド処理打ち切り時間〕

オプションの説明

●-g サービスグループ名

　　～〈識別子〉((1～31文字))

対象となるTP1/EEプロセスのサービスグループ名を指定します。

●-p｜-l

　　～《-p》

解析種別を指定します。

-p：

データベースの物理解析を行います。

表やインデクスを意識しないで，DBエリア内の全セグメント，および全ページのデータの格納状態を表示します。

-l：

データベースの論理解析を行います。

DBエリア内の表およびインデクスごとに，全セグメント，全ページのデータの格納状態を表示します。

このオプションを省略した場合は，-pのデータベースの物理解析が仮定されます。

●-r コマンド処理打ち切り時間

　　～〈符号なし整数〉((1～6000))《60》（単位：分）

コマンド処理の打ち切り時間を分単位で指定します。

デフォルトの60分（1時間）でコマンドの処理が終わらない場合は，打ち切り時間の指定を長くしてください。コマンドの処理に1時間も掛からない場合は，打ち切り時間の指定を短くしてください。

コマンドが実行されている間，TP1/EEのサービスが実行できないことがあります。そのため，コマンド処理の打ち切り時間を適切に設定する必要があります。

リターンコード

eexdbstaコマンドのリターンコードを次に示します。

0：正常終了

0以外：異常終了

出力形式

eexdbstaコマンドの実行結果の出力形式を説明します。

■データベースの物理解析を実施した場合

データベースの物理解析を実施した場合の出力例を次に示します。

1
2

3
4
5
6
7
8
9
10
11
12

13
14
15
16

17
18
19
20

eexdbsta VV-RR    ** Physical Analysis ** YYYY-MM-DD hh:mm:ss
 Service Group name : tp1ee01
-------------------------------------------------------------------------
Area name                      : DBAREA_001
 Area Type                     :          DATA
 Block size                    :          70.1 MB
 Initial blocks                :             1
 Extension count               :             1
 Block count                   :             1
 Max Block count               :        65,535
 Area size                     :          70.1 MB
 Free space                    :          5.22 MB
 System space                  :           120 KB
[Segment information]
  Size                         :             8 Pages
  Used                         :           691
  Segments                     :           747
  Usage rate                   :          92.5 %
[Page information]
  Size                         :        12,288 B
  Used                         :         5,460
  Pages                        :         5,974
  Usage rate                   :          91.3 %
-------------------------------------------------------------------------
Area name                      : DBAREA_002
 Area Type                     :          DATA
    :

注

3～20の情報がDBエリアごとに表示されます。ただし，マスタディレクトリ用DBエリアについては，3～10の情報だけが表示されます。

出力例の各項目を次の表で説明します。出力例の左端の番号と表中の項番が対応しています。

表10-11　物理解析の解析結果に出力される情報

項番
種別
項目
説明

1
ヘッダ情報
バージョン
取得時刻
XDBのバージョン，および解析情報の取得完了日時が表示されます。
日時は「YYYY-MM-DD hh:mm:ss」の形式で表示されます。
YYYY：年（西暦）
MM：月
DD：日
hh：時
mm：分
ss：秒

2
サービスグループ名
解析対象のTP1/EEプロセスのサービスグループ名が表示されます。

3
DBエリアに関する情報
DBエリア名
解析対象のDBエリア名が表示されます。

4
DBエリア種別
DBエリアの種別が表示されます。

MASTER：マスタディレクトリ用DBエリア

DIC：ディクショナリ用DBエリア

DATA：表用DBエリア

INDEX：インデクス用DBエリア

5
共用メモリ1面分の確保サイズ（バイト）
DBエリアが使用している共用メモリ1面の大きさが表示されます。
共用メモリが不足して，DBエリアが自動増分するときの，1回当たりの増分サイズになります。

6
初期確保共用メモリ面数
初期確保時の共用メモリ面数が表示されます。

7
共用メモリ自動増分回数
共用メモリが不足したときに自動で確保した増分回数（DBエリアの自動増分回数）が表示されます。

8
共用メモリ面数
使用している共用メモリ面数が表示されます。

9
最大確保共用メモリ面数
このDBエリアが使用できる共用メモリ面数の上限が表示されます。
XDBサービス定義のeexdbareaオペランドの-aオプションに指定した「最大確保共用メモリ面数」の値が表示されます。
共用メモリ面数の上限を設定していない場合は，0が表示されます。

10
領域サイズ（バイト）
このDBエリアが使用している共用メモリのサイズが表示されます。

11
空き領域サイズ（バイト）
使用されていない（表またはインデクスに割り当てられていない）セグメントの領域サイズが表示されます。

12
管理情報領域サイズ（バイト）
データベースの管理情報を格納するために使用されている領域のサイズが表示されます。

13
セグメントサイズ（ページ）
1セグメント当たりのページ数が表示されます。

14
使用セグメント数
使用中のセグメント数が表示されます。

15
総セグメント数
DBエリア内の総セグメント数が表示されます。

16
セグメント使用率（%）
セグメントの使用率が表示されます。次の計算式で算出した値が表示されます。
使用セグメント数÷総セグメント数×100

17
ページサイズ（バイト）
ページサイズが表示されます。

18
使用ページ数
使用中のページ数が表示されます。

19
総ページ数
DBエリア内の総ページ数が表示されます。

20
ページ使用率（%）
ページの使用率が表示されます。次の計算式で算出した値が表示されます。
使用ページ数÷総ページ数×100

■データベースの論理解析を実施した場合

データベースの論理解析を実施した場合の出力例を次に示します。

1
2
3

4
5
6
7
8
9
10
11
12
13
14

15
16
17
18
19
20
21

22
23
24
25
26
27
28
29
30
31

32
33
34
35
36

32
33
34
35
36

37
38
39
40

37
38
39
40

41
42
43
44
45
46
47
48
49
50
51
52

53
54
55
56

57
58
59
60

61
62
63
64
65
66

61
62
63
64
65
66

eexdbsta VV-RR ** Logical Analysis (DB area)** YYYY-MM-DD hh:mm:ss
 Service Group name : tp1ee01
 Area name        : DBAREA_001

<Table Information>

 Table identifier              : T001
 Table ID                      : 131195
 Schema                        : XDBUSER
  Rows                         :           550
  Allocated                    :          6.56 MB
  Used space                   :          6.45 MB
  Unused space                 :           110 KB
  Segments                     :            70
  Pages                        :           560
  Full pages                   :             2
  Unused space in full pages   :          14.9 KB
 [Basic row segment information]
  Allocated                    :          6.46 MB
  Used space                   :          6.44 MB
  Unused space                 :          24.0 KB
  Segments                     :            69
  Pages                        :           552
  Full pages                   :             0
  Unused space in full pages   :             0 B

 Table identifier              : T002
    ：

------------------------------------------------------------------------

<Index Information>

 Index identifier              : IDX1
 Index ID                      : 196849
 Table identifier              : T001
 Schema                        : XDBUSER
  Allocated                    :          30.0 MB
  Used space                   :          12.6 MB
  Unused space                 :          17.4 MB
  Segments                     :           321
  Pages                        :         2,568
  Index level                  :             2

 [Upper page segment information]
  Allocated                    :          26.8 MB
  Used space                   :          10.4 MB
  Unused space                 :          16.3 MB
  Segments                     :           286
  Pages                        :         2,288

 [Lower page segment information]
  Allocated                    :          3.28 MB
  Used space                   :          2.23 MB
  Unused space                 :          1.04 MB
  Segments                     :            35
  Pages                        :           280

 [Leaf page information]
  Allocated                    :          3.21 MB
  Used space                   :          2.23 MB
  Unused space                 :           997 KB
  Pages                        :           274

 [Row ID list page information]
  Allocated                    :          12.0 KB
  Used space                   :          1.46 KB
  Unused space                 :          10.5 KB
  Pages                        :             1
 Index identifier              : IND2
    ：
------------------------------------------------------------------------
 Area Type                     :          DATA
 Block size                    :          70.1 MB
 Initial blocks                :             1
 Extension count               :             1
 Block count                   :             1
 Max Block count               :        65,535
 Area size                     :          70.1 MB
 Free space                    :          5.22 MB
 System space                  :           120 KB
 Used space                    :          45.7 MB
 Unused space                  :          18.9 MB
 Usage rate                    :          65.4 %
 [Segment information]
  Size                         :             8
  Pages   Used                 :           691
  Segments                     :           747
  Usage rate                   :          92.5 %
 [Page information]
  Size                         :        12,288 B
  Used                         :         5,460
  Pages                        :         5,974
  Usage rate                   :          91.3 %

 [Table information]
  Tables                       :            80
  Segments                     :           518
  Used pages                   :         3,315
  Full pages                   :             6
  Full page rate               :          0.18 %
  Used space                   :          48.5 MB
 [Index information]
  Indexes                      :           135
  Segments                     :           172
  Used pages                   :         1,100
  Full pages                   :             3
  Full page rate               :          0.18 %
  Used space                   :          10.3 MB
------------------------------------------------------------------------

注

3～66の情報がDBエリアごとに表示されます。
ただし，マスタディレクトリ用DBエリアについては，3，41～49の情報だけが表示されます。

4～21の情報がDBエリア内の表ごとに表示されます。

22～40の情報がDBエリア内のインデクスごとに表示されます。

61～66の情報は，DBエリア内に表またはインデクスが定義されている場合に表示されます。

出力例の各項目を次の表で説明します。出力例の左端の番号と表中の項番が対応しています。

表10-12　論理解析の解析結果に出力される情報

項番
種別
項目
説明

1
ヘッダ情報
バージョン
取得時刻
XDBのバージョン，および解析情報の取得完了日時が表示されます。
日時は「YYYY-MM-DD hh:mm:ss」の形式で表示されます。
YYYY：年（西暦）
MM：月
DD：日
hh：時
mm：分
ss：秒

2
サービスグループ名
解析対象のTP1/EEプロセスのサービスグループ名が表示されます。

3
DBエリアに関する情報
DBエリア名
解析対象のDBエリア名が表示されます。

4
表に関する情報
表識別子
DBエリアに格納されている表の表識別子が表示されます。

5
表ID
表IDが表示されます。

6
スキーマ名
表のスキーマ名が表示されます。

7
表の行数
表に格納されている行数が表示されます。

8
割り当て領域サイズ（バイト）
表に割り当てられている領域のサイズが表示されます。

9
使用領域サイズ（バイト）
データが格納されている領域のサイズが表示されます。

10
未使用領域サイズ（バイト）
データが格納されていない領域のサイズが表示されます。

11
使用セグメント数
使用中のセグメント数が表示されます。

12
使用ページ数
使用中のページ数が表示されます。

13
行満杯ページ数
満杯ページ（格納上限の255行格納されているページ）数が表示されます。

14
行満杯ページ未使用領域サイズ（バイト）
満杯ページの未使用領域サイズが表示されます。

15
基本行用セグメントに関する情報
割り当て領域サイズ（バイト）
セグメントの割り当て領域サイズが表示されます。

16
使用領域サイズ（バイト）
セグメント内の使用領域サイズが表示されます。

17
未使用領域サイズ（バイト）
セグメント内の未使用領域サイズが表示されます。

18
セグメント数
セグメント数が表示されます。

19
ページ数
セグメント内の総ページ数が表示されます。

20
行満杯ページ
セグメント内の満杯ページ（格納上限の255行格納されているページ）数が表示されます。

21
行満杯ページ未使用領域サイズ（バイト）
セグメント内の満杯ページの未使用領域サイズが表示されます。

22
インデクスに関する情報
インデクス識別子
このインデクス用DBエリアに格納されているインデクスのインデクス識別子が表示されます。

23
インデクスID
インデクスIDが表示されます。

24
表識別子
インデクスが定義されている表の表識別子が表示されます。

25
スキーマ名
インデクスのスキーマ名が表示されます。

26
割り当て領域（バイト）
インデクスに割り当てられている領域のサイズが表示されます。

27
使用領域サイズ（バイト）
インデクスデータが格納されている領域のサイズが表示されます。

28
未使用領域サイズ（バイト）
インデクスデータが格納されていない領域のサイズが表示されます。

29
使用セグメント数
使用中のセグメント数が表示されます。

30
使用ページ数
使用中のページ数が表示されます。

31
インデクス段数
インデクスの段数が表示されます。

32
上位ページまたは下位ページのセグメントに関する情報
割り当て領域サイズ
セグメントの割り当て領域サイズが表示されます。

33
使用領域サイズ（バイト）
セグメント内の使用領域サイズが表示されます。

34
未使用領域サイズ（バイト）
セグメント内の未使用領域サイズが表示されます。

35
セグメント数
セグメント数が表示されます。

36
ページ数
セグメント内の総ページ数が表示されます。

37
リーフページまたは行IDリストページに関する情報
割り当て領域サイズ（バイト）
セグメントの割り当て領域サイズが表示されます。

38
使用領域サイズ（バイト）
セグメント内の使用領域サイズが表示されます。

39
未使用領域サイズ（バイト）
セグメント内の未使用領域サイズが表示されます。

40
ページ数
セグメント内の総ページ数が表示されます。

41
DBエリアに関する情報
DBエリア種別
DBエリアの種別が表示されます。

MASTER：マスタディレクトリ用DBエリア

DIC：ディクショナリ用DBエリア

DATA：表用DBエリア

INDEX：インデクス用DBエリア

42
共用メモリ1面分の確保サイズ（バイト）
DBエリアが使用している共用メモリ1面の大きさが表示されます。
共用メモリが不足して，DBエリアが自動増分するときの，1回当たりの増分サイズになります。

43
初期確保共用メモリ面数
初期確保時の共用メモリ面数が表示されます。

44
共用メモリ自動増分回数
共用メモリが不足したときに自動で確保した増分回数（DBエリアの自動増分回数）が表示されます。

45
共用メモリ面数
使用している共用メモリ面数が表示されます。

46
最大確保共用メモリ面数
このDBエリアが使用できる共用メモリ面数の上限が表示されます。
XDBサービス定義のeexdbareaオペランドの-aオプションに指定した「最大確保共用メモリ面数」の値が表示されます。
共用メモリ面数の上限を設定していない場合は，0が表示されます。

47
領域サイズ（バイト）
このDBエリアが使用している共用メモリのサイズが表示されます。

48
空き領域サイズ（バイト）
使用されていない（表またはインデクスに割り当てられていない）セグメントの領域サイズが表示されます。

49
管理情報領域サイズ（バイト）
データベースの管理情報を格納するために使用されている領域のサイズが表示されます。

50
使用領域サイズ（バイト）
データが格納されている領域のサイズが表示されます。データページ内の未使用領域は含まれません。

51
未使用領域サイズ（バイト）
使用されていない領域のサイズが表示されます。データページ内の未使用領域が含まれます。

52
使用領域の比率（%）
領域の使用率が表示されます。次の計算式で算出した値が表示されます。
使用領域サイズ÷（領域サイズ－管理情報領域サイズ）×100

53
セグメントサイズ（ページ）
1セグメント当たりのページ数が表示されます。

54
使用セグメント数※
使用中のセグメント数が表示されます。

55
総セグメント数
DBエリア内の総セグメント数が表示されます。

56
セグメント使用率（%）
セグメントの使用率が表示されます。次の計算式で算出した値が表示されます。
使用セグメント数÷セグメント数×100

57
ページサイズ（バイト）
ページサイズが表示されます。

58
使用ページ数※
使用中のページ数が表示されます。

59
総ページ数
DBエリア内の総ページ数が表示されます。

60
ページ使用率（%）
ページの使用率が表示されます。次の計算式で算出した値が表示されます。
使用ページ数÷総ページ数×100

61
表またはインデクスに関する情報
表またはインデクス数
DBエリア内に定義してある表またはインデクスの総数が表示されます。

62
総セグメント数
表またはインデクスに割り当てられているセグメントの総数（使用中セグメント数＋未使用セグメント数）が表示されます。

63
使用ページ数
表またはインデクスに割り当てられている使用中ページの総数が表示されます。

64
満杯ページ数
表またはインデクスに割り当てられている満杯ページ（格納上限の255行格納されているページ）数が表示されます。

65
満杯ページ率（%）
満杯ページの比率が表示されます。次の計算式で算出した値が表示されます。
満杯ページ数÷ページ数×100

66
使用領域サイズ（バイト）
表またはインデクスが使用している領域のサイズが表示されます。

注※

ディクショナリ表の解析を実施した場合は，表またはインデクス情報のセグメント，およびページ数の値が異なることがあります。ディクショナリ情報を管理する情報は表またはインデクス情報に含まれません。

解析結果に関する注意事項

解析結果に関する注意事項を次に示します。

表示する数値の有効けた数は3けたとし，下のけたは切り捨てて表示されます。ただし，1000～1023は有効けた数を4けたとします。

比率の計算はバイト単位で行っているため，実際に表示されている値で計算した場合とで誤差が生じることがあります。

状態解析で出力される単位を次に示します。なお，数データは適切な単位に変換して表示されます。
B：バイト
KB：キロバイト
MB：メガバイト
GB：ギガバイト

eexdbstaコマンドを実行する環境の環境変数LANGには，ja_JP.SJISを指定してください。

付録

＜この付録の構成＞

付録A　ディクショナリ表

付録B　XDBの最大値と最小値

付録C　用語解説

付録A　ディクショナリ表

ここでは，XDBのディクショナリ表とディクショナリ表に定義されているインデクスについて説明します。

＜この節の構成＞

付録A.1　ディクショナリ表の一覧

付録A.2　SQL_TABLES表の内容

付録A.3　SQL_COLUMNS表の内容

付録A.4　SQL_INDEXES表の内容

付録A.5　SQL_DIV_TABLE表の内容

付録A.6　SQL_DIV_INDEX表の内容

付録A.7　SQL_DBAREAS表の内容

付録A.8　ディクショナリ表に定義されているインデクス

付録A.1　ディクショナリ表の一覧

ディクショナリ表には，表やインデクスの定義情報が格納されています。表やインデクスの定義情報を確認する場合は，SELECT文でディクショナリ表を検索してください。

なお，ディクショナリ表のスキーマ名はMASTERです。ディクショナリ表を検索するときは，表名にスキーマ名MASTERを指定してください。

ディクショナリ表の一覧を次の表に示します。

表A-1　ディクショナリ表の一覧

項番
表名
内容

1
SQL_TABLES
表の定義情報が格納されています。1行が1表分のデータになります。
ディクショナリ表の定義情報も格納されています。

2
SQL_COLUMNS
列に関する定義情報が格納されています。1行が1列分のデータになります。
ディクショナリ表の列の定義情報も格納されています。

3
SQL_INDEXES
インデクスの定義情報が格納されています。1行が1インデクス分のデータになります。
ディクショナリ表のインデクスの定義情報も格納されています。

4
SQL_DIV_TABLE
表に定義されているオプション情報が格納されています。1行が1表分のデータになります。
ディクショナリ表の情報も格納されています。

5
SQL_DIV_INDEX
インデクスに定義されているオプション情報が格納されています。1行が1インデクス分のデータになります。
ディクショナリ表のインデクスの情報も格納されています。

6
SQL_DBAREAS
DBエリアの定義情報が格納されています。1行が1DBエリア分のデータになります。

参考

ディクショナリ表は，XDBの開始時にXDBが自動的に作成します。

付録A.2　SQL_TABLES表の内容

SQL_TABLES表の内容を次の表に示します。

表A-2　SQL_TABLES表の内容

列ID
列名
データ型
長さ
ナル値の有無
内容

1
TABLE_SCHEMA
VARCHAR
30
なし
スキーマ名

2
TABLE_NAME
VARCHAR
100
なし
表識別子

3
TABLE_TYPE
CHAR
1
なし
表種別
R：表

4
TABLE_ID
INTEGER
4
なし
表ID
0x00020001～：ディクショナリ表
0x00020079～：ユーザが定義した表

5
N_COLS
INTEGER
4
なし
表の構成列数

6
N_INDEX
INTEGER
4
なし
表に定義されているインデクスの数

7
CREATE_TIME
CHAR
14
なし
表を定義したときのタイムスタンプ
次の形式で格納されます。
yyyym₁m₁ddhhm₂m₂ss
yyyy：西暦
m₁m₁：月
dd：日
hh：時
m₂m₂：分
ss：秒

8
N_NOTNULL
INTEGER
4
なし
システムが使用する内部情報

9
N_OFST
INTEGER
4
なし
システムが使用する内部情報

10
FREE_AREA
INTEGER
4
なし
表のページ内未使用領域比率

11
FREE_PAGE
INTEGER
4
なし
システムが使用する内部情報

12
N_DIVISION
INTEGER
4
なし
システムが使用する内部情報

13
VARCHAR_BRANCH_LEN
INTEGER
4
なし
システムが使用する内部情報

14
FIX_TABLE
CHAR
1
なし
FIX指定の有無
F：指定あり
N：指定なし

15
ROW_LENGTH
INTEGER
4
あり
FIX表の行長（ディクショナリ表の場合はナル値が格納されます）

付録A.3　SQL_COLUMNS表の内容

SQL_COLUMNS表の内容を次の表に示します。

表A-3　SQL_COLUMNS表の内容

列ID
列名
データ型
長さ
ナル値の有無
内容

1
TABLE_SCHEMA
VARCHAR
30
なし
スキーマ名

2
TABLE_NAME
VARCHAR
100
なし
表識別子

3
COLUMN_NAME
VARCHAR
100
なし
列名

4
COLUMN_ID
INTEGER
4
なし
列ID

5
TABLE_ID
INTEGER
4
なし
表ID
0x00020001～：ディクショナリ表
0x00020079～：ユーザが定義した表

6
DATA_TYPE_CODE
SMALLINT
2
なし
データ型コード
241：INTEGER
245：SMALLINT
197：CHAR
193：VARCHAR
229：DECIMAL
125：TIMESTAMP

7
DATA_LENGTH
INTEGER
4
なし
データ定義長（詳細については，「表A-4　データ定義長の表現形式」を参照してください）

8
MAX_ELEMENT
INTEGER
4
なし
システムが使用する内部情報

9
IS_NULLABLE
CHAR
1
なし
システムが使用する内部情報

10
COLUMN_OFFSET
SMALLINT
2
あり
列オフセット（ディクショナリ表の場合はナル値が格納されます）

表A-4　データ定義長の表現形式

項番
データ型
データ定義長の表現形式

1
INTEGER
SMALLINT
CHAR
VARCHAR
TIMESTAMP
バイト数

2
DECIMAL
[図データ]

（凡例）

scale：位取り

prec：精度

付録A.4　SQL_INDEXES表の内容

SQL_INDEXES表の内容を次の表に示します。

表A-5　SQL_INDEXES表の内容

列ID
列名
データ型
長さ
ナル値の有無
内容

1
TABLE_SCHEMA
VARCHAR
30
なし
スキーマ名

2
TABLE_NAME
VARCHAR
100
なし
表識別子

3
INDEX_NAME
VARCHAR
100
なし
インデクス識別子

4
INDEX_ID
INTEGER
4
なし
インデクスID
0x00030001～：ディクショナリ表のインデクス
0x000300F1～：ユーザが定義したインデクス

5
TABLE_ID
INTEGER
4
なし
表ID
0x00020001～：ディクショナリ表
0x00020079～：ユーザが定義した表

6
COLUMN_COUNT
INTEGER
4
なし
インデクス構成列数

7
COLUMN_ID_LIST
VARCHAR
32
なし
インデクス構成列IDリスト（詳細については，「図A-1　インデクス構成列IDリストの形式」を参照してください）

8
CREATE_TIME
CHAR
14
なし
インデクスを定義したときのタイムスタンプ
次の形式で格納されます。
yyyym₁m₁ddhhm₂m₂ss
yyyy：西暦
m₁m₁：月
dd：日
hh：時
m₂m₂：分
ss：秒

9
UNIQUE_TYPE
CHAR
1
なし
インデクスのユニーク種別
Y：ユニークインデクス
N：非ユニークインデクス

10
MULTI_TYPE
CHAR
1
なし
システムが使用する内部情報

11
FREE_AREA
INTEGER
4
なし
インデクスのページ内未使用領域比率

12
N_DIVISION
INTEGER
4
なし
システムが使用する内部情報

13
INDEX_KEY_EXPAND
CHAR
1
なし
キー長が256バイト以上のインデクス種別
Y：キー長が256バイト以上のインデクス
N：キー長が255バイト以下のインデクス

図A-1　インデクス構成列IDリストの形式

付録A.5　SQL_DIV_TABLE表の内容

SQL_DIV_TABLE表の内容を次の表に示します。

表A-6　SQL_DIV_TABLE表の内容

列ID
列名
データ型
長さ
ナル値の有無
内容

1
TABLE_SCHEMA
VARCHAR
30
なし
スキーマ名

2
TABLE_NAME
VARCHAR
100
なし
表識別子

3
TABLE_ID
INTEGER
4
なし
表ID
0x00020001～：ディクショナリ表
0x00020079～：ユーザが定義した表

4
DIV_NO
INTEGER
4
あり
システムが使用する内部情報

5
DCOND
CHAR
2
あり
システムが使用する内部情報

6
DCVALUES
VARCHAR
256
あり
システムが使用する内部情報

7
DBAREA_ID
INTEGER
4
なし
表用DBエリアID

8
SEGMENT_REUSE
CHAR
1
なし
セグメントの再利用の指定有無
Y：指定あり
N：指定なし

9
N_REUSE_SEGMENT
INTEGER
4
あり
再利用契機セグメント数
CREATE TABLE文のSEGMENT REUSE句を省略するか，またはNOUSEを指定した場合は，ナル値が格納されます。再利用契機セグメント数の指定を省略した場合は0となります。

10
N_REUSE_SEGMENT_EXTENSION
INTEGER
4
あり
再利用契機セグメント数増分値
CREATE TABLE文のSEGMENT REUSE句を省略するか，またはNOUSEを指定した場合は，ナル値が格納されます。再利用契機セグメント数増分値の指定を省略した場合は0となります。

付録A.6　SQL_DIV_INDEX表の内容

SQL_DIV_INDEX表の内容を次の表に示します。

表A-7　SQL_DIV_INDEX表の内容

列ID
列名
データ型
長さ
ナル値の有無
内容

1
TABLE_SCHEMA
VARCHAR
30
なし
スキーマ名

2
TABLE_NAME
VARCHAR
100
なし
表識別子

3
INDEX_NAME
VARCHAR
100
なし
インデクス識別子

4
INDEX_ID
INTEGER
4
なし
インデクスID
0x00030001～：ディクショナリ表のインデクス
0x000300F1～：ユーザが定義したインデクス

5
DIV_NO
INTEGER
4
あり
システムが使用する内部情報

6
DBAREA_ID
INTEGER
4
なし
インデクス用DBエリアID

7
SEGMENT_REUSE
CHAR
1
なし
セグメント再利用の指定有無
Y：指定あり
N：指定なし

8
N_REUSE_SEGMENT
INTEGER
4
あり
再利用契機セグメント数
CREATE INDEX文のSEGMENT REUSE句を省略するか，またはNOUSEを指定した場合は，ナル値が格納されます。再利用契機セグメント数の指定を省略した場合は0となります。

9
N_REUSE_SEGMENT_EXTENSION
INTEGER
4
あり
再利用契機セグメント数増分値
CREATE INDEX文のSEGMENT REUSE句を省略するか，またはNOUSEを指定した場合は，ナル値が格納されます。再利用契機セグメント数増分値の指定を省略した場合は0となります。

付録A.7　SQL_DBAREAS表の内容

SQL_DBAREAS表の内容を次の表に示します。

表A-8　SQL_DBAREAS表の内容

列ID
列名
データ型
長さ
ナル値の有無
内容

1
DBAREA_NAME
VARCHAR
30
なし
DBエリア名

2
DBFILE_NAME
VARCHAR
8
なし
システムが使用する内部情報

3
DBAREA_ID
INTEGER
4
なし
DBエリアID

4
DBAREA_TYPE
CHAR
4
なし
DBエリアの種類
DATA：表用DBエリア
INDX：インデクス用DBエリア
WORK：作業表用DBエリア
MAST：マスタディレクトリ用DBエリア
DICT：ディクショナリ用DBエリア

5
PAGE_SIZE
INTEGER
4
なし
ページサイズ（単位：バイト）

6
SEGMENT_SIZE
INTEGER
4
なし
セグメントサイズ（単位：ページ数）

7
N_TABLE
INTEGER
4
なし
DBエリアに格納されている表の数

8
N_INDEX
INTEGER
4
なし
DBエリアに格納されているインデクスの数

付録A.8　ディクショナリ表に定義されているインデクス

ディクショナリ表には，次の表に示すインデクスが定義されています。ディクショナリ表を検索するときに，これらのインデクスを使用すると検索性能が向上します。

表A-9　ディクショナリ表に定義されているインデクスの一覧

項番 | ディクショナリ表 | インデクス作成列名 | インデクス名
1 | SQL_TABLES | TABLE_ID | SQLINDEXS01
2 | SQL_COLUMNS | TABLE_ID | SQLINDEXS02
3 | SQL_INDEXES | INDEX_ID | SQLINDEXS03
4 | SQL_DIV_TABLE | DBAREA_ID | SQLINDEXS04
5 | SQL_DIV_INDEX | DBAREA_ID | SQLINDEXS05
6 | SQL_DBAREAS | DBAREA_ID | SQLINDEXS06
N_TABLE | SQLINDEXM01
DBAREA_ID

付録B　XDBの最大値と最小値

ここでは，XDBの最大値と最小値について説明します。

＜この節の構成＞

(1)　システム構成に関する最大値と最小値

(2)　データベースに関する最大値と最小値

(1)　システム構成に関する最大値と最小値

システム構成に関する最大値と最小値を次の表に示します。

表B-1　システム構成に関する最大値と最小値

項番 | 項目 | 最小値 | 最大値 | 単位
1 | DBエリア数 | 4 | 1017 | 個
2 | マスタディレクトリ用DBエリア数 | 1 | 1 | 個
3 | ディクショナリ用DBエリア数 | 1 | 1 | 個
4 | 作業表用DBエリア数 | 1 | 1 | 個
5 | 表用DBエリアとインデクス用DBエリアの総数 | 1 | 1014 | 個
6 | 表の数 | 0 | 1024 | 個
7 | インデクスの数 | 0 | 2048 | 個
8 | 1DBエリアに格納できる表数 | 0 | 200 | 個
9 | 1DBエリアに格納できるインデクス数 | 0 | 400 | 個
10 | 1DBエリアのページ数 | 0 | 16777215 | ページ※
11 | ページサイズ | 4096 | 32768 | バイト
12 | セグメントサイズ | 1 | 80 | ページ

注※

作業表用DBエリアの場合は，1表または1インデクス作成時に使用できるページ数です。

(2)　データベースに関する最大値と最小値

データベースに関する最大値と最小値を次の表に示します。

表B-2　データベースに関する最大値と最小値

項番 | 項目 | 最小値 | 最大値 | 単位
1 | 文字データの長さ（定義長） | CHAR | 1 | 32000 | バイト
2 | パック形式10進数の精度 | DECIMAL | 1 | 29 | けた
3 | パック形式10進数の位取り | DECIMAL | 1 | 29 | けた
4 | 時刻印データの小数秒精度 | TIMESTAMP | 0 | 6 | けた
5 | 表に定義できる列数 | 1 | 3000 | 列
6 | 表に定義できるインデクス数 | 1 | 16 | 個
7 | インデクス構成列数 | 1 | 16 | 列
8 | 表のページ内未使用領域比率 | 0 | 99 | %
9 | インデクスのページ内未使用領域比率 | 0 | 99 | %
10 | 表またはインデクスの再利用契機に指定できるセグメント数 | 0 | 16777216 | 個
11 | 表またはインデクスの再利用契機に指定できるセグメント数の増分値 | 0 | 16777216 | 個
12 | 識別子の長さ | スキーマ名（認可識別子） | 1 | 30 | バイト
13 | 表識別子，インデクス識別子，列名，相関名 | 1 | 100 | バイト
14 | カーソル名，埋め込み変数名 | 1 | 30 | バイト

付録C　用語解説

英字｜ア行｜カ行｜サ行｜タ行｜ハ行｜マ行

このマニュアルで使用している用語について説明します。

英字

IFA

スレッド対応エリアのことです。

XDBサービス定義

XDBの稼働環境を設定する定義のことです。

XDBトレース情報

次に示す情報の総称です。

SQLトレース情報

パラメタトレース情報

SQL単位情報

アクセスパス情報

これらの情報は，SQLのチューニングを行うときや，エラーとなったSQLを特定するときに利用します。

ア行

インデクス構成列

CREATE INDEX文でインデクスを定義した列のことです。

インデクスページスプリット

インデクスキーの追加時にインデクスページに空きがない場合，該当ページが管理しているキー群が二つに分割されます。これをインデクスページスプリットといいます。

インポート

ファイルから，共用メモリ上のDBエリアにデータを展開する処理のことです。

インポート制御ファイル

XDBの開始時に共用メモリ上へデータを展開する際に使用するファイルです。インポート制御ファイルには，どの表にどの入力データファイルを読み込むかという情報を定義します。

エクスポート

共用メモリ上のDBエリアに格納されているデータをファイルに出力する処理のことです。

エクスポート制御ファイル

XDBの終了時に共用メモリ上のデータをエクスポートファイルに出力する際に使用するファイルです。エクスポート制御ファイルには，どの表のデータをどのファイルに出力するかという情報を定義します。

カ行

下位ページ

B-treeインデクス構造の最上位のインデクスページをルートページ，中間のインデクスページを中間ページ，最下位のインデクスページをリーフページといいます。下位ページとはリーフページのことです。

基本行

通常，1行のデータは同一ページに格納されますが，可変長のデータ型などを使用しているときは，1行のデータサイズが1ページのサイズより大きくなることがあります。この場合，複数のページにデータを分割して格納します。このとき，別ページに格納された行を分岐行といい，その分岐先の情報を格納する行を基本行といいます。

更新バッファ

SQLの実行によって，表が更新されるときに使用するトランザクション固有の領域のことです。

更新ログ

待機系のデータベースへの追い付き反映処理で使用する，データベースの更新情報のことです。

コミット通番

XDBが更新ログを生成したときに付与する通番のことです。

サ行

作業表

ソートしたデータを一時的に格納する表です。SQLを処理するときに，作業表用DBエリアに作成されます。

実行系孤立状態

実行系1台，待機系1台の2台構成のときに，実行系でTP1/EEのプロセスダウンが発生し，実行系1台だけになった状態を実行系孤立状態といいます。

上位ページ

B-treeインデクス構造の最上位のインデクスページをルートページ，中間のインデクスページを中間ページ，最下位のインデクスページをリーフページといいます。上位ページとはルートページと中間ページのことです。

スキーマ名

XDBの利用者を一意に識別するための名称です。一般的には，ユーザ名のようなものと考えてください。

セグメントの再利用

最終セグメントに新規ページを割り当てる空き領域がない場合に，新規セグメントを確保しないで，確保済みセグメントの空きページ（未使用ページまたは空きがある使用中ページ）に表データを格納することをセグメントの再利用といいます。

タ行

単一列インデクス

表の一つの列から作成したインデクスです。一つの列をキーにして検索する場合に定義します。

定義系SQL文記述ファイル

CREATE TABLE文とCREATE INDEX文を記述したファイルです。ユーザは，XDBを開始する前にこのファイルを作成しておく必要があります。

ハ行

複数列インデクス

複数の列から作成したインデクスです。一つの列だけでは検索する行を十分に絞り込めないため，複数の列をキーとして検索する行を絞り込む場合に定義します。

ページ内の未使用領域

インデクスデータが追加される際，インデクスページスプリットが発生しないように確保しておくページ内の空き領域のことです。

マ行

メモリダンプ

実行系孤立状態となった場合に出力される共用メモリ上のデータベース情報のことです。

索引

[記号]
[Ｃ][Ｄ][Ｅ][Ｈ][Ｉ][Ｋ][Ｍ][Ｐ][Ｒ][Ｓ][Ｔ][Ｘ]
[ア行][カ行][サ行][タ行][ナ行][ハ行][マ行][ヤ行][ラ行]

(記号)

#COMMENT

#EXIT

#SET DUMPMODE

#SET OPT REPORT

(英字)

(Ｃ)

CHARACTER

CLサーバ

CLサーバのシミュレート機能

CL連携

(Ｄ)

DBエリア

DBエリアが作成されるメモリ領域

DBエリアの自動増分

DBエリアの種類

DBエリアの設計

DBエリアの定義

DBエリアの物理構造

DCCONFPATH

DCUAPCONFPATH

DECIMAL

(Ｅ)

eetrbwtorコマンド

eexdbarea

eexdbdefchkコマンド

EEXDBDEFFILE

eexdbdumpコマンド

eexdbedコマンド

eexdbexportコマンド

eexdbexttblコマンド

eexdbfputコマンド

eexdbimportコマンド

eexdbmemdmpコマンド

eexdbrasgetコマンド

eexdbshmrmコマンド

eexdbsqlコマンド

eexdbsqlのサブコマンド

eexdbsrv

eexdbstaコマンド

(Ｈ)

HAサーバ

HAモニタ

(Ｉ)

IFA〔用語解説〕

INTEGER

(Ｋ)

KFSB56208-Qメッセージ

(Ｍ)

MASTER〔スキーマ名〕

max_mem_size〔見積もり式〕

(Ｐ)

PCTFREE

(Ｒ)

READ COMMITTED〔トランザクションの分離レベル〕

(Ｓ)

SEGMENT REUSE

setrlimit_memlock

SHMALL

SHMMAX

SHMMIN

SHMMNI

SQL_COLUMNS

SQL_DBAREAS

SQL_DIV_INDEX

SQL_DIV_TABLE

SQL_INDEXES

SQL_TABLES

SQLWARN6

SQLエラーに伴うロールバック

SQL単位情報に表示される項目

SQL単位情報の容量見積もり

SQLトレース情報

SQLトレース情報に表示される項目

SQLトレース情報の容量見積もり

SQLの最適化

SQLの実行

SQLの判定処理〔SQLプール機能〕

SQLの前処理

SQLプール

SQLプール機能

SQLプール機能のチューニング

SQLプールサイズ

SQLプールサイズの見積もり

syslog

system_work_size

(Ｔ)

TASKTM情報

TIMESTAMP

TP1/EEプロセスで確保するメモリの見積もり

TP1キャッシュ機能

(Ｘ)

xdb_default_service_mem_size

xdb_forward_time_limit

xdb_import_work_directory

xdb_lang

xdb_memory_fixed

xdb_memory_terminate_remove

xdb_schema_definition_file

xdb_sql_accesspath_out

xdb_sql_param_size

xdb_sql_param_trace

xdb_sql_text_size

xdb_sql_trace_out

xdb_sqlpool_size

xdb_start_import_control_file

xdb_stop_export_control_file

xdb_table_preread

xdb_tabledefpool_size

xdb_trace_buffer_number

xdb_trace_buffer_size

xdb_trace_entry_size

xdb_trace_file_number

xdb_trace_file_size

xdb_trace_out

xdb_wtor_interval_time

XDBPOOLの見積もり

XDBUSER〔スキーマ名〕

XDBサービス定義〔用語解説〕

XDBサービス定義の作成

XDBサービス定義のチェック

XDBスレッド領域

XDBトレース情報

XDBトレース情報〔用語解説〕

XDBトレース情報の取得

XDBトレース情報の表示〔eexdbedコマンド〕

XDBトレース情報の表示方法

XDBトレース情報のファイルへの出力

XDBトレース情報ファイル

XDBトレース情報ファイルの世代数

XDBトレース情報ファイルのバックアップ

XDBトレース情報量の見積もり

XDBトレース情報をスタックするバッファ

XDBの運用サイクル

XDBの開始

XDBの終了

XDBの特長

XDB用ワーク領域の見積もり

(ア行)

(あ)

空き領域探索

アクセスパス情報に表示される項目

アクセスパス情報の表示例

アクセスパス情報の容量見積もり

(い)

一括先読み〔表定義プール機能〕

インストール

インストール前の確認

インデクス

インデクス〔ディクショナリ表〕

インデクス構成列〔用語解説〕

インデクススキャン

インデクスの格納ページ数の計算方法

インデクスのキー長

インデクスの効果的な使い方

インデクスの設計

インデクスの追加

インデクスの優先順位

インデクスページ

インデクスページスプリット

インデクスページスプリット〔用語解説〕

インデクス用DBエリア

インデクス用DBエリアの総ページ数の計算式

インデクス用DBエリアの容量見積もり

インポート

インポート〔用語解説〕

インポート制御ファイル〔用語解説〕

インポート制御ファイルの作成

インメモリデータ処理技術

(え)

エクスポート

エクスポート〔用語解説〕

エクスポート制御ファイル〔用語解説〕

エクスポート制御ファイルの作成

エクスポートファイル

エクスポートファイルの形式

(お)

追い付き反映

オペレーションコード

(カ行)

(か)

カーネルパラメタ

開始

下位ページ

下位ページ〔用語解説〕

下位ページ用セグメント

格納ページ数の計算方法〔インデクス用DBエリア〕

格納ページ数の計算方法〔表用DBエリア〕

可用性

環境設定手順

関連製品

(き)

キースキャン

キースキャンによる列値取得機能

キー長〔インデクス〕

基本行

基本行〔用語解説〕

基本行用セグメント

基本行用ページ

行ID

行IDフェッチ

行IDリストページ

共用メモリ1面分の確保サイズ

共用メモリの解放〔eexdbshmrmコマンド〕

共用メモリの解放〔xdb_memory_terminate_remove〕

共用メモリの固定〔xdb_memory_fixed〕

共用メモリの固定化

共用メモリ面数〔DBエリア〕

共用メモリ面数の上限

(く)

クラスタリング

(け)

系切り替え機能

結合方式

検索時に使用されるインデクスの例

検索データ情報

検索方式

(こ)

コアファイルからのXDBトレース情報の表示

更新バッファ

更新バッファ〔用語解説〕

更新バッファが使用するメモリの見積もり

更新ログ

更新ログ〔用語解説〕

更新ログの見積もり

固定化〔共用メモリ〕

コミット通番〔用語解説〕

(サ行)

(さ)

サービス名

最終セグメント

最小値

最大確保共用メモリ面数

最大値

最適化〔SQLの最適化〕

再利用契機〔セグメント〕

作業表〔用語解説〕

作業表の構成列

作業表の作成要因

作業表の作成を回避する方法

作業表の種類

作業表用DBエリア

作業表用DBエリアの容量見積もり

作業表を作成するSQL

作成モード

サブコマンド〔eexdbsql〕

(し)

時刻印データ

システム構成〔TP1キャッシュ機能使用時〕

システム統計情報 ,[2]

システム統計情報に出力されるXDBに関する情報

システムワーク領域の最大サイズの見積もり

実行系

実行系孤立状態

実行系孤立状態〔用語解説〕

実行系孤立状態になったときの対処方法

自動増分〔DBエリア〕

シミュレート機能

集合関数の高速処理機能

終了

上位ページ

上位ページ〔用語解説〕

上位ページ用セグメント

障害対策

初期確保共用メモリ面数

信頼性

(す)

数データ

スキーマ

スキーマ名

スキーマ名〔用語解説〕

(せ)

セグメント

セグメントサイズ

セグメントサイズ〔DBエリア〕

セグメントの解放

セグメントの確保

セグメントの再利用

セグメントの再利用〔用語解説〕

セグメントの再利用契機

接続ユーザ

前提OS

前提製品

(そ)

総ページ数の計算式〔インデクス用DBエリア〕

総ページ数の計算式〔表用DBエリア〕

ソート処理をインデクスで代用する

(タ行)

(た)

待機系

待機系との連携による障害対策

単一列インデクス

単一列インデクス〔用語解説〕

(ち)

中間ページ

チューニング

チューニング〔SQLプール機能〕

チューニング〔表定義プール機能〕

(つ)

追加モード

(て)

定義系SQL文記述ファイル〔用語解説〕

定義系SQL文記述ファイルの作成

ディクショナリ表

ディクショナリ表〔インデクス〕

ディクショナリ用DBエリア

ディクショナリ用DBエリアの容量見積もり

ディスクアクセスレス

ディスク型DBとの運用の違い

ディレクトリページ

データ型

データ長〔列のデータ長〕

データの展開

データの保存

データページ

データベース管理者が行う主な運用

データベースの状態解析

データベースの設計

データベースの論理構造

テーブルスキャン

(と)

統計情報の取得

特長〔XDB〕

トラブルシュート情報の一覧

トランザクションの分離レベル

(ナ行)

(に)

入力データファイルの形式

入力データファイルの準備

入力用パラメタ情報

(ね)

ネストループジョイン

(ハ行)

(は)

排他の取得期間

バックアップ〔XDBトレース情報ファイル〕

バッファ〔XDBトレース情報〕

パラメタトレース情報に表示される項目

パラメタトレース情報の出力例

パラメタトレース情報の容量見積もり

判定処理〔SQLプール機能〕

(ひ)

表

表定義情報

表定義情報の一括先読み

表定義情報の一括先読み〔xdb_table_preread〕

表定義プール

表定義プール機能

表定義プール機能のチューニング

表定義プールサイズ

表定義プールサイズの見積もり

表データのインポート

表データのエクスポート

表の結合方式

表の検索方式

表の設計

表の追加

表用DBエリア

表用DBエリアの総ページ数の計算式

表用DBエリアの容量見積もり

(ふ)

フェールオーバ

複数列インデクス

複数列インデクス〔用語解説〕

物理解析

物理解析情報

物理構造〔DBエリア〕

プロセスダウン

分岐行

分岐行用ページ

(へ)

ページ

ページサイズ

ページサイズ〔DBエリア〕

ページ内の未使用領域

ページ内の未使用領域〔用語解説〕

ページの解放

ページの確保

ページング

(ほ)

保守資料の取得

(マ行)

(ま)

前処理結果

マスタディレクトリ用DBエリア

マスタディレクトリ用DBエリアの容量見積もり

マルチキャスト

(み)

未使用領域〔ページ〕

見積もり式〔SQL単位情報〕

見積もり式〔SQLトレース情報〕

見積もり式〔system_work_size〕

見積もり式〔TP1/EEプロセスで確保するメモリ〕

見積もり式〔XDBトレース情報〕

見積もり式〔XDB用ワーク領域〕

見積もり式〔アクセスパス情報〕

見積もり式〔インデクス用DBエリア〕

見積もり式〔更新バッファ〕

見積もり式〔更新ログ〕

見積もり式〔作業表用DBエリア〕

見積もり式〔システムワーク領域最大サイズ〕

見積もり式〔ディクショナリ用DBエリア〕

見積もり式〔パラメタトレース情報〕

見積もり式〔表用DBエリア〕

見積もり式〔マスタディレクトリ用DBエリア〕

(め)

メッセージへの応答

メッセージログ

メモリ上のデータの保存

メモリ上へのデータの展開

メモリ所要量

メモリダンプ

メモリダンプ〔用語解説〕

メモリダンプの出力

メモリダンプファイル

メモリダンプファイルからの表データの抽出

メモリダンプファイルの出力先

面数〔共用メモリ〕

(も)

文字コード

文字データ

(ヤ行)

(ゆ)

ユーザサービス定義〔TP1/Server Base〕

ユーザ名

優先順位〔インデクス〕

(ラ行)

(り)

リーフページ

(る)

ルートページ

(れ)

列値取得機能

列のデータ長

(ろ)

ロールバック

論理解析

論理解析情報

論理構造〔データベース〕

■ 商標類

Linuxは，Linus Torvalds氏の日本およびその他の国における登録商標または商標です。
Red Hatは，米国およびその他の国でRed Hat, Inc. の登録商標若しくは商標です。