如何使用当前可用内存来最小化CREATE INDEX时间



我需要在几周内将我们的主数据库迁移到一个新的服务器和存储子系统。Oracle 11目前正在Windows上运行,我们将为它安装一个全新的SuSE。不会有其他重大更改。内存将是相同的,服务器只是更新了一点。

我主要关心的是创建索引所需的时间。我们上次重新创建一些索引花了很长时间,从那以后我正在研究如何优化它

当前服务器有128GB的内存,我们使用的是Oracle ASSM(51GB用于SGA,44GB用于PGA),Spotlight On Oracle报告数据文件上没有物理读取活动。所有内容都缓存在内存中,性能非常好。Spotlight还告知,PGA的消耗量仅为500 MB。

我知道我最大的表有1亿行,占用15GB。然而,它的索引占用了53GB。当我重新创建其中一个时,我可以在TEMP表空间中看到很多写活动。

所以问题是:如何使用所有可用内存来最大限度地减少TEMP活动?

我真的不确定这是否相关,但我们看到平均300-350个用户连接,我将初始化参数提高到最大700个会话。

致问候,

对于将要进行索引重建的会话,您应该考虑将WORKAREA_SIZE_POLICY设置为MANUAL,然后将SORT_AREA_SIZE设置为足够大的数字。(Max取决于O/S,但2GB将是一个很好的起点。)

此外,尽管您没有提及它,但您也应该考虑使用NOLOGING来提高性能。

希望能有所帮助。

最新更新