我们正在为基于Oracle 11gR1的新系统设计数据库模式。我们已经确定了一个主要的模式,其中将有近100个表格,这些表格将从前端Java应用程序中访问。
我们需要审核接近50个表格中发生更改的值,这必须每行都完成。
这意味着,在
DBA提出了一个建议,反对这种方法,因为他说,单独的模式意味着每个操作都需要额外的I/O。基本上,AUDIT模式只用于进行一些分析和输入值(因此是
“单独的模式意味着额外的I/O”是真的吗?我找不到理由。
对我来说,这似乎是合乎逻辑的,因为审核数据不应被篡改,所以需要一个单独的模式。
此外,我们为存档一些来自
一些统计数据:
我们要求总共4TB的磁盘空间。
- 100个
问题:
鉴于这一切,您能否给我提出任何改进建议?
1.单独的模式会影响磁盘I/O吗?(每个模式都需要额外的I/O吗?) 2.有任何一般性建议吗?
图:
除此之外,我们还有两个仅具有只读权限的模式,但主要是为了临时目的,我们并不在意它们的性能。
建议如下:
有几点建议。我们同意以下内容:
我们需要审核接近50个表格中发生更改的值,这必须每行都完成。
这意味着,在
MYSYS.T1
中的一行可能会在MYSYS_AUDIT.T1_AUD
表中有50个(或更多,甚至更少,但最少1个)行。我们可能会拥有每个列条目的旧值和来自T1
的新值。DBA提出了一个建议,反对这种方法,因为他说,单独的模式意味着每个操作都需要额外的I/O。基本上,AUDIT模式只用于进行一些分析和输入值(因此是
SELECT
和INSERT
)。“单独的模式意味着额外的I/O”是真的吗?我找不到理由。
对我来说,这似乎是合乎逻辑的,因为审核数据不应被篡改,所以需要一个单独的模式。
此外,我们为存档一些来自
MYSYS
的表格设计了一个单独的模式。从MYSYS_ARC
中的表格可能会备份到磁带上或在足够的时间后被删除。一些统计数据:
MYSYS
模式中的一些表格(接近20,30个)可能增长到约50M行。我们要求总共4TB的磁盘空间。
MYSYS_AUDIT
模式可能有MYSYS
的10倍,但我们不会保留它们超过3个月。MYSYS
中只有少数表格将进行以下每分钟事务。- 100个
INSERT
在MYSYS
中,意味着同样数量的插入到MYSYS_AUDIT
表格中。
- 1000个UPDATE
在MYSYS
表格中,意味着同样数量的插入到MYSYS_ADIT
表格中。问题:
鉴于这一切,您能否给我提出任何改进建议?
1.单独的模式会影响磁盘I/O吗?(每个模式都需要额外的I/O吗?) 2.有任何一般性建议吗?
图:
+-------------------+ +-------------------+
| 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 |
+-------------------+
除此之外,我们还有两个仅具有只读权限的模式,但主要是为了临时目的,我们并不在意它们的性能。
建议如下:
有几点建议。我们同意以下内容:
- 逻辑分离的架构。
TRIGGER
用于将数据插入到审计表中。- 表名不会有
_AUD
后缀。 :) - 用于填充
ARCHIVE
模式表的过程。 - 基于时间间隔进行分区。
- 工作空间管理器选项。