2

我正在尝试删除 150 GB 表(46 亿条记录)的 varchar(100) 列。此列中的所有数据均为空。我在数据库中有 30GB 以上的空间。

当我尝试删除该列时,它显示“数据库 XY 中没有更多空间”。为什么这样的动作需要这么大的空间?

4

2 回答 2

1

ALTER TABLE 语句在覆盖原始表之前需要临时存储更改的版本。我猜您要更改的表至少占总存储大小的 1/3

于 2019-09-02T09:11:14.780 回答
0

这可能由于多种原因而发生。您的数据库中的一个 AMP 可能已满,即使对表进行较小的更改也会导致该错误。

尝试运行以下 SQL 检查空间

select VProc, CurrentPerm, MaxPerm 
from dbc.DiskSpace 
where DatabaseName='XY';

此外,您应该检查一下您的主索引在这个非常大的表中位于哪一列。如果表未正确倾斜,则在尝试更改表或对其运行查询时也可能遇到空间问题。

对于其他建议,我找到了一篇不错的文章,关于当“数据库中没有更多空间”错误发生时您可能想要调查的事情 - Teradata SQL 教程。一些建议包括:

  • 删除任何中介工作或“沙盒”表
  • 实现单值或多值压缩。
  • 删除不需要/不必要的二级索引
  • 删除 dbc 表(如 accesslog 或 dbql 表)中的数据
  • 删除并归档不再使用的旧表。
于 2013-05-14T13:25:16.360 回答