【发布时间】:2014-10-14 19:14:23
【问题描述】:
完全是 Oracle DBA 的新手,但仍在尝试将 SQL Server DB (2008R2) 迁移到 Oracle(11g - 总 DB 大小仅为 ~20Gb)...
我的最大单表(约 3000 万行)存在重大问题。表的粗略结构是:
CREATE TABLE TableW (
WID NUMBER(10,0) NOT NULL,
PID NUMBER(10,0) NOT NULL,
CID NUMBER(10,0) NOT NULL
ColUnInteresting1 NUMBER(3,0) NOT NULL,
ColUnInteresting2 NUMBER(3,0) NOT NULL,
ColUnInteresting3 FLOAT NOT NULL,
ColUnInteresting4 FLOAT NOT NULL,
ColUnInteresting5 VARCHAR2(1024 CHAR),
ColUnInteresting6 NUMBER(3,0) NOT NULL,
ColUnInteresting7 NUMBER(5,0) NOT NULL,
CreatedDate DATE NOT NULL,
ModifiedDate DATE NOT NULL,
CreatedByUser VARCHAR2(20 CHAR),
ModifiedByUser VARCHAR2(20 CHAR)
);
ALTER TABLE TableW ADD CONSTRAINT WPrimaryKey PRIMARY KEY (WID)
ENABLE;
CREATE INDEX WClusterIndex ON TableW (PID);
CREATE INDEX WCIDIndex ON TableW (CID);
ALTER TABLE TableW ADD CONSTRAINT FKTableC FOREIGN KEY (CID)
REFERENCES TableC (CID) ON DELETE CASCADE
ENABLE;
ALTER TABLE TableW ADD CONSTRAINT FKTableP FOREIGN KEY (PID)
REFERENCES TableP (PID) ON DELETE CASCADE
ENABLE;
通过一些基础测试,似乎一个简单的“从 TableW WHERE PID=13455 中删除”需要花费大量时间(~880 秒)来执行应该是快速删除(~350 行)的操作。 [通过 SQL Developer 运行查询]。
通常,此表的性能明显低于其 SQL 等效表。在 SQL Server 下没有任何问题,与 SQL 相比,此表及其周围的表结构对于 Oracle 来说是合理的。
我的问题是我找不到有用的诊断集来开始寻找问题所在。非常感谢任何查询/链接。
[以上是一个帮助请求,基于这样的假设:从一个有 3000 万条记录的表中删除 350 行应该不需要 10 分钟,而 SQL Server 需要
编辑: 正在执行迁移:
1 In SQL developer:
- Create Oracle User, tablespace, grants etc AS Sys
- Create the tables, sequences, triggers etc AS New User
2 Via some Java:
- Check SQL-Oracle structure consistency
- Disable all foreign keys
- Move data (Truncate destination table, Select From Old, Insert Into New)
- Adjust sequences to correct starting value
- Enable foreign keys
【问题讨论】:
-
Oracle中是否存在索引碎片之类的东西?如果您在加载数据之前创建了所有索引并且之后没有重建它们,那么
WClusterIndex索引很可能会严重碎片化,以至于无法使用。 -
这就是我正在考虑的事情 - 请查看我的编辑,看看迁移中是否有任何明显的错误。
-
我根本不了解 Oracle,但您始终可以尝试删除并重新创建索引。任何 ETL 的最佳实践是在加载之前删除索引(当然是在目标端)并在之后创建它们。它不仅速度更快,而且减少了碎片化。
-
您是否收集了有关表格的统计信息?
exec dbms_stats.gather_table_stats(user, 'TABLE_W'); -
@MarcoBaldelli - 是的,它对执行时间没有影响。
标签: sql-server oracle11g migration database-administration