ページの先頭行へ戻る
Symfoware Server V10.0.0/V10.0.1 アプリケーション開発ガイド(埋込みSQL編)

7.3 最適化情報の更新

最適化情報は、通常は、データベース定義時にrdbddlexコマンドを使用してSET STATISTICS文で設定しますが、データベースにデータが格納された後にアクセス性能が悪くなった場合に更新することもできます。

最適化情報の更新契機

最適化情報は、アクセスプランをチューニングしていない場合に設定できます。

通常は、データベースの定義時に、データベースに格納するデータの件数やインデックスキーのバリエーションを想定して、表のDSIおよびインデックスのDSIに対して設定します。また、運用しているうちに、データベースのアクセス性能が遅くなった場合、または、定義時に設定したデータ量に対して2倍程度になった場合に、最適化情報を更新します。これらの最適化情報の設定および更新は、rdbddlexコマンドを使用してSET STATISTICS文で行います。

データベース定義時に最適化情報を設定せずに表のDSIに対して初期創成を行ったとき、または、インデックスの定義を追加し、rdbsloaderコマンドでインデックスの創成を行ったときに最適化情報を設定することもできます。この場合も、rdbddlexコマンドを使用してSET STATISTICS文で行います。

参照

設定方法の詳細については、“RDB運用ガイド(データベース定義編)”を参照してください。

注意

すでにアクセスプランのチューニングをしている場合は、それ以降にデータの状態に変更があっても、最適化情報の設定および更新は必要ありません。

最適化情報の設定および変更を行うと、すでにチューニング済のアクセスプランが利用できなくなり、性能が保証されません。

rdbupsコマンドによる最適化情報の更新

現在データベースに格納されているデータ量がわからない場合は、データベース情報をもとにrdbupsコマンドによって最適化情報を更新します。最適化情報の更新は、実表やインデックスの個々のデータの更新のたびに自動的に行われるのではなく、rdbupsコマンドによって一括して更新されます。実際にデータベースをアクセスして設定する情報を採取するためデータベースの規模に応じて処理時間が長くなります。

なお、rdbupsコマンドによって更新された最適化情報は、最大3回前までリカバリすることが可能です。

注意

最適化情報をリカバリすると、リカバリ前の最適化情報には戻すことができないので注意してください。

参照

rdbupsコマンドの指定方法の詳細については、“コマンドリファレンス”を参照してください。

rdbupsコマンドによる最適化情報の更新には、以下の指定があります。

以下に、それぞれの指定について説明します。

実表の指定

実表に対するすべてのDSIに最適化情報を設定するには、rdbupsコマンドのtオプションで該当の実表名を指定します。

以下に指定例を示します。

rdbups  -t  在庫管理DB.STOCKS.在庫表   -u  PRINT
                (1)          (2)

(1) データベース名

(2) 実表名

DSOの指定

DSOに関するすべてのDSIに最適化情報を設定するには、rdbupsコマンドのgオプションで該当のDSO名を指定します。

以下に指定例を示します。

rdbups  -g  在庫管理DB.発注表DSO   -u  PRINT
                (1)          (2)

(1) データベース名

(2) DSO名

DSIの指定

特定のDSIに対する最適化情報を設定するには、rdbupsコマンドのiオプションで該当のDSI名を指定します。

以下に指定例を示します。

rdbups  -I  在庫管理DB.関西発注表DSI   -u PRINT
                (1)            (2)

(1) データベース名

(2) DSI名

設定される最適化情報の内容

rdbupsコマンドで実表を指定した場合には、表に含まれるすべてのDSIに対して、最適化情報が設定されます。DSOを指定した場合には、DSOに含まれるすべてのDSIに対して、最適化情報が設定されます。DSIを指定した場合には、該当するDSIに対して、最適化情報が設定されます。設定される最適化情報の内容を、以下に示します。なお、設定される最適化情報は、格納構造によって異なります。

参照

各格納構造の詳細については、“RDB運用ガイド(データベース定義編)”を参照してください。

  • 格納構造がSEQUENTIALおよびOBJECTの場合

    SEQUENTIAL構造およびOBJECT構造は、データをその挿入順に、先頭の格納ページから順に格納する構造になっています。データはデータ部と呼ばれる領域のページに格納されます。

    SEQUENTIAL構造およびOBJECT構造に対しては、以下の情報が設定されます。
        -  格納レコード数
        -  データ部の使用ページ数

  • 格納構造がRANDOMの場合

    RANDOM構造は、データに対してそのキーとなる列の組の値から格納ページの集まり(この集まりをバケットと呼びます)を計算し、そのバケットにデータを格納する構造になっています。計算に使用する関数をハッシュ関数と呼びます。データは通常はプライム部と呼ばれる領域のバケットに格納されますが、データがそのバケットに収まりきれないとき、オーバフロー部と呼ばれる領域のバケットに格納します。

    RANDOM構造に対しては、以下の情報が設定されます。
        -  格納レコード数
        -  プライム部の使用ページ数
        -  オーバフロー部の使用ページ数
        -  オーバフロー部の平均ページ数
        -  オーバフロー部の最大ページ数

  • 格納構造がBTREEの場合

    BTREE構造は、インデックスに対する格納構造です。内部的には、インデックスのキーとなる列の組の値からなる木構造のインデックス部を持ち、データを格納するページをインデックス部で管理します。データを格納するページからなる部分をインデックス部に対してデータ部と呼びます。

    BTREE構造に対しては、以下の情報が設定されます。
        -  データ部の使用ページ数
        -  インデックス部の高さ
        -  異なるキー値数

最適化情報の出力

rdbupsコマンドでu PRINTを指定すると、設定した最適化情報を出力することができます。以下に指定例と出力例を示します。

1

実表の指定をした場合の出力例(tオプション)

rdbups -t 在庫管理DB.STOCKS.関西発注表 -u PRINT

Update statistics information

  Target name information

    Database name ......        (1)
    Schema name   ......        (2)
    Table name    ......        (3)

No. 1        DSO name :         (4)

  DSO statistics information

    Usage type          :       (5)
    Data structure type :       (6)

Related DSI information

  No. 1        DSI name :       (7)

    DSI statistics information

      Updated date ......       (8)
      Usage type          :     (9)
      Records      ......       (10)   (Record)                        (注1)
      Pages(  (11)  )        ......    (12)   (Page)
      Pages(  (11)  )        ......    (12)   (Page)
      Avg-pointers(OVERFLOW) ......    (13)   (Page)                   (注2)
      Max-pointers(OVERFLOW) ......    (14)   (Page)                   (注2)
      Ix_height              ......    (15)                            (注3)
      Different number of key value                                    (注3)
        Column name (from) :    (16)                                   (注3)
        Column name (to)                                Different key  (注3)
          No. 1                (17)                ......    (18)      (注3)
          No. 2                (17)                ......    (18)      (注3)


  No. 2       DSI name :       (7)
                       :
No. 2       DSO name   :       (4)
                       :

注1) 表のDSIの場合にだけ表示されます。

注2) 表のデータ構造がRANDOM構造のDSIの場合にだけ表示されます。

注3) インデックスのDSIの場合にだけ表示されます。

(1) 表が所属するデータベース名

(2) 表が所属するスキーマ名

(3) 表名

(4) 表に定義されたDSO名

(5) 表に定義されたDSOの種別
    BASE : 表のDSO
    INDEX: インデックスのDSO

(6) 表またはインデックスのデータ構造

(7) DSOに定義されたDSI名

(8) 最適化情報の設定日時(“曜日 月 日 時:分:秒 西暦”)
    例: “Tue Apr 17 17:06:25 2007”
    備考.最適化情報が未設定の場合は、"Not updated" と出力します。

(9) DSOに定義されたDSIの種別
    BASE : 表のDSI
    INDEX: インデックスのDSI

(10) DSIの格納レコード(行)数

(11) ぺージ数の表示(12)が対象とする割付け部

(12) DSIが使用するぺージ数(割付け部ごとに表示)

(13) DSIのオーバフロー部の平均ポインタ長(単位はページ数)

(14) DSIのオーバフロー部の最大ポインタ長(単位はページ数)

(15) インデックス部の高さ

(16) 異なるキー値数の表示(18)が対象とする構成列の先頭の列名

(17) 異なるキー値数の表示(18)が対象とする構成列の終端の列名

(18) DSIの異なるキー値数


2

DSOの指定をした場合の出力例(gオプション)

rdbups -g 在庫管理DB.関西発注表DSO -u PRINT

Update statistics information

  Target name information

    Database name ......        (1)
    DSO name      ......        (2)

No. 1        DSO name :         (2)

  DSO statistics information

    Usage type          :       (3)
    Data structure type :       (4)

  Related DSI information

    No. 1        DSI name :     (5)

      DSI statistics information

        Updated date ......     (6)
        Usage type        :     (7)
        Records                ......     (8)   (Record)                  (注1)
        Pages(  (9)   )        ......     (10)  (Page)
        Pages(  (9)   )        ......     (10)  (Page)
        Avg-pointers(OVERFLOW) ......     (11)  (Page)                    (注2)
        Max-pointers(OVERFLOW) ......     (12)  (Page)                    (注2)
        Ix_height              ......     (13)                            (注3)
        Different number of key value
          Column name (from) :  (14)                                      (注3)
          Column name (to)                           Different key
            No. 1                (15)                ......    (16)       (注3)
            No. 2                (15)                ......    (16)       (注3)

    No. 2       DSI name :       (5)
                :

注1) 表のDSIの場合にだけ表示されます。

注2) 表のデータ構造がRANDOM構造のDSIの場合にだけ表示されます。

注3) インデックスのDSIの場合にだけ表示されます。

(1) DSOが所属するデータベース名

(2) DSO名

(3) DSOの種別
    BASE : 表のDSO
    INDEX: インデックスのDSO

(4) 表またはインデックスのデータ構造

(5) DSOに定義されたDSI名

(6) 最適化情報の設定日時(“曜日 月 日 時:分:秒 西暦”)
    例: “Tue Apr 17 17:06:25 2007”
    備考.最適化情報が未設定の場合は、"Not updated" と出力します。

(7) DSOに定義されたDSIの種別
    BASE : 表のDSI
    INDEX: インデックスのDSI

(8) DSIの格納レコード(行)数

(9) ぺージ数の表示(10)が対象とする割付け部

(10) DSIが使用するぺージ数(割付け部ごとに表示)

(11) DSIのオーバフロー部の平均ポインタ長(単位はページ数)

(12) DSIのオーバフロー部の最大ポインタ長(単位はページ数)

(13) インデックス部の高さ

(14) 異なるキー値数の表示(16)が対象とする構成列の先頭の列名

(15) 異なるキー値数の表示(16)が対象とする構成列の終端の列名

(16) DSIの異なるキー値数


3

DSIの指定をした場合の出力例(iオプション)

rdbups -i 在庫管理DB.関西発注表DSI -u PRINT

Update statistics information

  Target name information

    Database name ......        (1)
    DSI name      ......        (2)

No. 1        DSI name :         (2)

  DSI statistics information

    Updated date ......         (3)
    Usage type          :       (4)
    Records                ......    (5)    (Record)                (注1)
    Pages(  (6)   )        ......    (7)    (Page)
    Pages(  (6)   )        ......    (7)    (Page)
    Avg-pointers(OVERFLOW) ......    (8)    (Page)                  (注2)
    Max-pointers(OVERFLOW) ......    (9)    (Page)                  (注2)
    Ix_height              ......    (10)                           (注3)
    Different number of key value
      Column name (from) :           (11)                           (注3)
      Column name (to)                                Different key
        No. 1              (12)            ......    (13)           (注3)
        No. 2              (12)            ......    (13)           (注3)

  Related DSO information

    No. 1        DSO name :     (14)

      DSO statistics information

        Usage type          :    (15)
        Data structure type :    (16)

注1) 表のDSIの場合にだけ表示されます。

注2) 表のデータ構造がRANDO構造のDSIの場合にだけ表示されます。

注3) インデックスのDSIの場合にだけ表示されます。

(1) DSIが所属するデータベース名

(2) DSI名

(3) 最適化情報の設定日時(“曜日 月 日 時:分:秒 西暦”)
    例 : “Tue Apr 17 17:06:25 2007”
    備考.最適化情報が未設定の場合は、"Not updated" と出力します。

(4) DSIの種別
    BASE : 表のDSI
    INDEX : インデックスのDSI

(5) DSIの格納レコード(行)数

(6) ぺージ数の表示(7)が対象とする割付け部

(7) DSIが使用するぺージ数(割付け部ごとに表示)

(8) DSIのオーバフロー部の平均ポインタ長(単位はページ数)

(9) DSIのオーバフロー部の最大ポインタ長(単位はページ数)

(10) インデックス部の高さ

(11) 異なるキー値数の表示(13)が対象とする構成列の先頭の列名

(12) 異なるキー値数の表示(13)が対象とする構成列の終端の列名

(13) DSIの異なるキー値数

(14) DSIが属するDSO名

(15) DSIが属するDSOの種別
    BASE : 表のDSO
    INDEX : インデックスのDSO

(16) 表またはインデックスのデータ構造