Oracle11gR1をベースにした新しいシステムのデータベーススキーマを設計しています。100近くのテーブルを持つメインスキーマを特定しました。これらはフロントエンドJavaアプリケーションからアクセスされます。
50近くのテーブルで変更された値を監査する必要があります。これは、すべての行で実行する必要があります。
つまり、1つの行の場合、テーブルMYSYS.T1
に50(またはそれ以上またはそれ以下ですが、最小1)の行が存在する可能性がありMYSYS_AUDIT.T1_AUD
ます。すべての列エントリの古い値と、から利用可能な新しい値がある可能性がありますT1
。
DBAは観察を行い、この方法に反対するようアドバイスしました。彼が言ったのは、個別のスキーマはすべての操作に対して追加のI/Oを意味するからです。基本的に、AUDITスキーマは、値の分析と入力を行うためにのみ使用されます(したがってSELECT
、INSERT
)。
「別個のスキーマは追加のI/Oを意味する」というのは本当ですか?正当な理由が見つかりませんでした。
AUDITデータは改ざんされるべきではないので、私には論理的に見えます。したがって、別のスキーマです。
また、からいくつかのテーブルをアーカイブするための別のスキーマを設計しましたMYSYS
。テーブルからMYSYS_ARC
テープにバックアップされるか、十分な時間が経過すると削除される可能性があります。
いくつかの統計:
スキーマ
内のいくつかのテーブル(20、30に近い)がMYSYS
約5,000万行に拡大する可能性があります。
合計4TBのディスク容量を要求しました。
MYSYS_AUDIT
スキーマはその10倍になる可能性がありますがMYSYS
、3か月以上保持することはありません。
MYSYSのいくつかのテーブルには、次のトランザクション/分があります。
- テーブルへの同じ数の挿入を意味する
INSERT
100 。MYSYS
MYSYS_AUDIT
- テーブル内の1000
UPDATE
は、MYSYS
テーブル内の同じ数の挿入を意味しMYSYS_ADIT
ます。
質問:
これらすべてを踏まえて、改善点を提案していただけますか?
- 別のスキーマはディスクI/Oに影響しますか?(スキーマごとに1つの追加I / O?)
- 一般的な提案はありますか?
形:
+-------------------+ +-------------------+
| MYSYS | | MYSYS_AUDIT |
| | | |
| 1. T1 | | 1. T1_AUD |
| 2. T2 | | 2. T2_AUD |
| 3. T3 |--------->| 3. T3_AUD |
| 4. T4 |(SELECT, | 4. T4_AUD |
| . | INSERT) | . |
| . | | . |
| . | | . |
| 100. T100 | | 50. T50_AUD |
+-------------------+ +-------------------+
|
|
|
|
|(INSERT)
|
|
|
*
+-------------------+
| MYSYS_ARC |
| |
| 1. T1_ARC |
| 2. T2_ARC |
| 3. T3_ARC |
| 4. T4_ARC |
| . |
| . |
| . |
| 100. T100_ARC |
+-------------------+
これとは別に、読み取り専用の権限のみを持つスキーマがさらに2つありますが、主にそれらはアドホックな目的であり、それらのパフォーマンスは気にしません。
提案:
いくつかの提案があります。私たちは次のことに同意します。
- 論理的分離のスキーマ。
TRIGGER
AUDITテーブルにデータを挿入するため。_AUD
テーブル名にはサフィックスはありません。:)ARCHIVE
スキーマテーブルにデータを入力する手順。- 間隔に基づいて分割します。
私たちは分析しています...
- ワークスペースマネージャーオプション。
APCまたはdpbradelyのソリューションを受け入れる前に、質問はまださらなる提案のために開かれています。