向维度表中插入行时,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 服务器挂起的主要内容,如果未能解决你的问题,请参考以下文章