我在执行一个巨大的查询时遇到了一个问题,其中oracle实例的临时表空间空间不足。在以下链接是查询。
https://dl.dropboxusercontent.com/u/96203352/Query/title_block.sql
Temp表空间的大小为30 GB,由于客户的担忧,我无法扩展其空间。因此,我试图减少排序操作,但这一切都是徒劳的。无论如何都要优化或减少此查询的排序操作。
在以下链接中放置了PLAN表的统计信息。
https://dl.dropboxusercontent.com/u/96203352/Query/PLAN_TABLE_INFO.txt
由于查询和解释计划的大小是要在此问题中发布的大型,因此我必须在使用链接时共享它。很抱歉给您带来不便。
由于返回的数据存在重复,我无法从select语句中删除另外一项内容。
请帮忙。
答案 0 :(得分:0)
查询计划在最顶层说明了所有内容:DISTINCT
操作正在使用所有临时空间。操作需要这么多内存的原因是你的查询行很胖......每个大约10,000个字节!!!
我不确定为什么你的查询行如此胖,但我想尝试的一个建议是更改查询以执行DISTINCT
操作,然后在稍后的步骤中{{1 }} {} {}}的必要列。逻辑上不应该影响它,但多年来我一直看到CAST
的奇怪行为。我不会相信它,至少不要尝试我的建议。