DB2がテーブルスペースごとに1つのテーブルを提案するのはなぜですか?

StackOverflow https://stackoverflow.com/questions/9374338

  •  28-10-2019
  •  | 
  •  

質問

DB2/Z V10用のDB2ドキュメントには、次のスニペットがあります テーブルスペースセクション:

一般的なルールとして、各テーブルスペースに1つのテーブルのみが必要です。

しかし、それは実際にこれの理論的根拠を提供しません。

履歴時間ベースの情報を次の行に沿って保存するテーブルがいくつかあります(複雑さが大幅に減少しますが、説明するのに十分なはずです):

Table HOURLY_CPU_USAGE:
    RecDate        date
    RecTime        time
    Node           char(32)
    MaxCpuUsage    float
    primary key    (RecDate, RecTime, Node)
Table DAILY_CPU_USAGE:
    RecDate        date
    Node           char(32)
    MaxCpuUsage    float
    primary key    (RecDate, Node)
Table MONTHLY_CPU_USAGE:
    RecDate        date
    Node           char(32)
    MaxCpuUsage    float
    primary key    (RecDate, Node)

(毎日のテーブルには、すべての時間ごとのレコードが1日にロールアップされており、毎月のテーブルは毎日のデータで同じことを行い、日付とともに列に巻き上げます YYYY-MM-01).

今、私にはこのテーブルがすべて目的が非常に似ており、私は確かではないようです どうして それらを別々のテーブルスペースに保管したいと思います。

今のところ、それらを単一のテーブルに組み合わせる可能性は、私が行った提案ですが、それを防ぐ合併症があります。

「テーブルスペースごとに1つのテーブル」ガイドラインの背後にある理論的根拠?例外は何ですか?私は彼らがそうだと思います 五月 それは、厳しいルールではなく、非常にガイドラインのように見えるため、例外です。

役に立ちましたか?

解決

ワイルドな推測...しかし、多くのDB/2ユーティリティがテーブルスペースのレベルで動作するため、IBMはテーブルスペースごとに1つ以下のテーブルを推奨していません。複数のテーブルを1つのテーブルスペースに配置すると、ユーティリティはすべてのテーブルでユニットとして動作します。

たとえば、テーブルスペースレベルでのバックアップおよび復元作業。同じテーブルスペース内で個々のテーブルをバックアップ/復元することはできません。それらはすべてバックアップまたはユニットとして復元されます。同じ種類のものが他のユーティリティにも、おそらく多くのチューニングパラメーターにも当てはまると思います。

他のヒント

最近では、テーブルスペースごとに1つのテーブルを維持する主な理由は、管理者です。ほとんどのDB2ユーティリティは、テーブルスペースレベルで機能します。たとえば、特定のテーブルのテーブルスペースでロード交換を実行する場合、負荷が最初に行うことがすべての行を削除することであるため、他のすべてのテーブルが空になります。

それで、「なぜテーブルスペースごとにテーブルを1つ保持しないのですか?」テーブルが他方なしでは役に立たない範囲に関連している場合、単一のテーブルスペースに複数のテーブルを含めることが合理的であり、さらには望ましいと思います。例えば。 CustomerTable + NextCustomerIdtable。

別の考慮事項は、テーブル空間のタイプです。作成したテーブルスペースのタイプに応じて、単一のテーブルスペースに複数のテーブルを作成することにパフォーマンスの影響がある可能性があります。セグメント化されたテーブルスペースを使用していない場合、テーブルスペーススキャンは、他のテーブルのページを含むテーブルスペースのすべてのページを読み取ります。こちらの「テーブルスペーススキャン」トピックを参照してください。 http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=%2ffcom.ibm.db2.doc.ve%2fdvnhlpcn_tablescan.htm

ドキュメントのテキストを変更したことが継ぎ込みます。

リンク 質問で提供されていることは、次の情報が含まれています。

テーブル空間で定義する必要があるテーブルの数は、テーブルの特性によって異なります。

テーブルのサイズが大きくなる場合は、テーブルを独自のテーブルスペースに置く方が良いでしょう。この設計により、パフォーマンスの調整、特にバッファープールの調整が簡素化されます。小さなテーブルの場合、複数テーブルセグメント化されたテーブルスペースの方が優れています。この設計は、バックアップとリカバリのために管理する必要があるデータセットの数と、DB2操作中にデータベースシステムが開閉する必要があるデータセットの数を減らすのに役立ちます。

以下の理由により、各データベースのテーブルスペースの数を最小限に抑えることをお勧めします。

データ定義ステートメントの実行中、データベースシステムは、コミット操作が実行されるまでデータベース全体に独占ロックを保持します。排他的ロックは次の機能を実行します。排他的ロックは、同じデータベース内のテーブルとインデックスのデータ定義ステートメントの同時実行を防止します。動的ステートメントキャッシュが無効になっている場合(サブシステムパラメーターCachedyn = no)、データベースシステムはデータベースロックを使用して、データ定義ステートメントの実行とデータベース内のテーブルとインデックスにアクセスする動的SQLステートメントの実行をシリアル化します。

データベースにあるテーブルスペースが少ない場合、同時にロックされるテーブルスペースが少なくなります。オンラインReorgユーティリティ操作のスイッチフェーズの実行中、データベースシステムは、データベース全体の排他的ロックを取得し、データベース内のテーブルとインデックスに関するオンラインReorg操作とデータ定義ステートメントの実行をシリアル化します。

データベースにあるテーブルが少ない場合、同時にロックされるテーブルは少なくなります。データ定義ステートメントのロギングボリュームは、データベース内のテーブルスペースが少ない場合、小さくなります。

一般的に、パフォーマンスオプションは、「テーブルスペースごとに1つのテーブル」構成に適している傾向があるためです。たとえば、テーブルがパーティション化されている場合、特定のクエリに対して限られたパーティションスキャンを行う機能(TSごとに1 TBが必要です)。

(しかし、メインフレームのパフォーマンスの人として、私はそうは言いませんか?):-)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top