首页
学习
活动
专区
工具
TVP
发布

teradata中no more spool space

刚上线的TD跑批作业,有些会报“no more spool space”这样的错误,开发人员第一反应,分配的数据库空间不足了。

其实基本都是跑批作业程序本身问题。

先要解决这个问题,得先了解下什么是spool空间。

TD数据库平台有三类空间,分别是:

PERM:用户用于存放永久性数据的磁盘空间。每一个数据库在创建时,都会预分配存储空间。

SPOOL:用于存放各类请求运行过程中所产生的中间结果集的空间。在创建每一个TD用户时,都会分配一个限额。

TEMP:用于存放TEMPORARY表数据的空间。在创建每一个TD用户时,都会分配一个限额。

其中SPOOL是磁盘临时表空间,用于在查询处理期间保存中间行,以及保存事务的应答集中的行。

由于TD数据库的特性,加入分配了200G的临时表空间,在具有24个AMPS上系统上,每个AMP上大概分配了,大约8.3G临时空间。

由于上述的这个特性,很容易猜到出现no more spool space这个原因之一是:

1).表的PI设计不当,数据严重倾斜,导致数据集中在某个AMP上过多,超出了这个8.3G的空间限制。

另外一个常见原因是:

2).表关联时,关联条件写错。出现笛卡尔积,产生大量无用的结果集,超过了临时空间限制。

还有就是产生的临时表数据确实太大超过了限制,不过这个很少出现。

遇到这个错误,就要具体分析问题,针对是哪种情况具体解决了。

可以通过:SELECT DISTINCT 或者SELECT/GROUP BY查询中间结果集来具体确定问题。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190110G129M000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券