Oracle索引性能选项

ocebsuys  于 2023-06-05  发布在  Oracle
关注(0)|答案(2)|浏览(227)

我将为一个包含50亿条记录的表构建索引。Nlogging和并行将被使用,但是否有任何其他选项或技巧,我可以使用,以加快创建索引构建?

vkc1a9a2

vkc1a9a21#

使用正确的并行度是最重要的。NOLOGGING也将在最后的块加载阶段提供帮助。最后,你应该确保你有大量的PGA可用,这样你就不会做多遍排序。检查v$pgastat中的' global memory bound ',如果它小于1G(最大值),则提升pga_aggregate_target,直到全局内存限制达到1G。或者,您可以启用手动PGA并将sort_area_size设置为最大值:

ALTER SESSION SET workarea_size_policy=manual;
ALTER SESSION SET sort_area_size=1073741823;

现在你的每个PX线程将获得1G的PGA分配。只要确保主机上有足够的可用内存即可。因为它被分配给每个PX线程,所以提高DOP可以增加在内存中而不是在磁盘上完成的工作量,此外还可以在构建中分配更多的工作线程。您不太希望完全在内存中处理50亿条记录,但至少可以在溢出到临时工作区之前尽可能地优化PGA的使用。

oprakyz7

oprakyz72#

除了并行性和nlogging之外,这些功能还可以缩短索引创建时间:
1.压缩-压缩占用额外的CPU时间,但使用较少的I/O。在某些情况下,这个选项 * 可能 * 保存时间,比如如果你有一个高度可压缩的多列索引。
1.NOSORT-如果行碰巧是按顺序插入的,例如您刚刚加载了预排序的数据,则NOSORT选项可以保存大量时间。
1.不重新收集统计信息-统计信息是在建立索引时自动收集的,因此不要在建立索引后手动收集索引统计信息。如果要收集表统计信息,请使用参数cascade => false来防止重新收集索引统计信息。
我同意Paul W的观点,获得正确的并行度可能是最重要的因素。如果你想优化这个语句,并且不关心同时运行的其他任何东西的性能,crank the DOP as high as possible
但是我对使用分区来加速索引创建持怀疑态度。因为排序是O(n*log(n)),所以对一个大集合排序通常比对多个小集合排序更快。

相关问题