向维度表中插入行时,oracle 服务器挂起

Posted

技术标签:

【中文标题】向维度表中插入行时,oracle 服务器挂起【英文标题】:The oracle server hang when inserting rows into a dimension table 【发布时间】:2012-01-11 07:52:08 【问题描述】:

有两张桌子。第一个是事实表,大约 1 亿行。另一个是只有大约 100 行的维度表。我在事实表上创建了一个位图连接索引 优化查询。

但是,当我在维度表中插入几行时,数据库会挂起。

有人知道是什么原因吗?

【问题讨论】:

什么是挂起?它已经死了,您需要重新启动服务器吗?还是两分钟很慢? 非常非常慢。不只是两分钟,而是大约两个小时。 【参考方案1】:

位图索引是一个矩阵,每个不同的值对应一列,索引表中的每条记录对应一个行。同样的原则也适用于位图连接索引:在 DIMENSION 表中每个不同的值对应一列,在 FACT 表中对应一行。

从中可以看出,在 DIMENSION 表中插入一行将在索引中生成 1 亿个条目。那将需要很长时间。

您说您要插入“几行”。那么,老实说,您认为生成所有这些条目的合理时间是多少?

这是位图索引的权衡:它可以节省大量查询时间,但维护开销非常高。因此,我们需要在部署位图索引之前仔细考虑。有时可以降低这些成本,但这取决于具体情况。

位图连接索引还有一件事要记住,这似乎也可能导致服务器挂起:

"不同事务只能同时更新一张表 使用位图连接索引时。”

您应该阅读文档。 Find out more.

【讨论】:

【参考方案2】:

在加载大量行时,位图索引确实会带来相关的性能损失。要获得您正在寻找的效率,只需将索引标记为不可用,加载您的记录,然后重建索引。您应该会看到加载时间随着您谈论的数据量的增加而缩短。

【讨论】:

以上是关于向维度表中插入行时,oracle 服务器挂起的主要内容,如果未能解决你的问题,请参考以下文章

如何向一个oracle表中快速插入很多条数据

oracle用sql 语句如何向表中插入时间?

oracle/sql中如何根据条件向表中插入数据

我是一个初学者,如何向oracle数据库表中插入数据

在 Oracle SQL 中查询不返回单行时更新

oracle 11.2.0.1.0 和 oracle 11.2.0.2.0 在使用序列向表中插入值时的差异