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