由于临时空间已满,作业失败

Posted

技术标签:

【中文标题】由于临时空间已满,作业失败【英文标题】:Job is failing because of temp space getting full 【发布时间】:2021-09-19 14:59:34 【问题描述】:

我们的customer 正在将过去 3 年的数据加载到一个新的报告产品中。它有数百万条记录。我们的中间query 正在生成964M 记录,在这个阶段job 由于insufficient temp storage 而失败。他们将温度空间增加了三次。我们的query planjoins 是正确的

我的问题是。

    我们能否给他们一些估计,对于十亿记录,您需要 temp tablespace 中的这个数量的 data file。 是否可以计算上述统计数据?正如我与一些专家交谈的那样,他们说容量规划是不可能的。

我知道记录非常庞大,它们可能还需要更换硬件。但是有什么我们可以建议他们在内存级别和硬件级别进行更改的。

如果你愿意,我可以附上explain plantrace here

【问题讨论】:

Related question 是的,亚历克斯。只有我提出了这个问题。我想我可以以更好的方式提出问题,并且可以查找一些具体信息,所以我提出来了。顺便说一句,这两个问题有时可能会有所不同。 您在上一个问题上发布的“解释计划”是一个跟踪,而不是 EXPLAIN PLAN 命令的输出。一个适当的解释计划将估计每个步骤将涉及多少字节的数据,以及哪些步骤将涉及对 TEMP 表空间的写入。根据您上一个问题的要求,使用EXPLAIN PLAN 命令生成计划并发布这些结果。请注意,这仍然只是一个估计值,但它至少应该让您大致了解您正在查看的内容。 在dba.stackexchange.com 上提问。并且,请让您的数据库管理员和“新报告产品”的供应商来帮助您。您似乎不太可能在不更改报告产品代码的情况下围绕此进行编程。 在问题上投入临时空间并不是最好的解决方案。任何使用大量临时空间的东西都会让我寻找更有效的方法来实现这一点。我将在您的原始帖子上发布有关减少临时空间的想法,但正如每个人所说,您需要查看解释计划以了解临时使用的位置。 【参考方案1】:

正如 pmdba 所指出的,EXPLAIN PLAN 将有助于估计所需的临时空间,但这只是一个估计。请注意,您的执行计划有许多嵌套的哈希连接,因此您可以轻松获得临时空间需求的复合,因为多个哈希连接可以是“活动的”,(即,一个已经开始但需要一个内部的输出) .

但假设这是一次性加载,我会为您的 DBA 提出一种不同的方法。只需使用一个大文件或许多具有大量自动扩展余量的数据文件创建一个新的临时表空间。如有必要,请将其放在暂存/一次性磁盘上。只分配这个用户帐户给它,然后运行你的负载,让临时空间增长到它需要的任何大小。

加载完成后,删除表空间并恢复正常操作。大量临时文件对您的数据库没有任何影响 - 它不会被备份,其内容也不需要记录。

【讨论】:

以上是关于由于临时空间已满,作业失败的主要内容,如果未能解决你的问题,请参考以下文章

如何处理Sybase临时表空间tempdb已满的问题

Apache service named reported the following error(OS 10055)由于系统缓冲区空间不足或队列已满解决办法?

oracle 11g解决临时表空间过大的问题

oracle xdb表空间已用99%,xdb表空间有啥作用,空间使用如果已满会怎样

zabbix 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作

oracle 10g 中 如果初始化表空间已满对查询有啥影响,会不会在插入数据的时候导致数据丢失?