teradata 数据块大小和 table 大小计算

teradata data block size and table size calculations

作为 Cap 的一部分,一直使用此公式作为 TB 大小计算的标准。计划工作。我们在 TD 14

     ( rc *   ( rsz / ( blocksize -38) ) * blocksize ) 
      + ( SQL (sel Hashamp()+1 ; ) * 1024 ) 

rsz : row size , rc : count ( * ) 

其实这里

 (blocksize-38)/rsz 

只不过是行/块。结果是小于 1 的分数。我认为这很糟糕,因为这意味着连续有几个块。 我的问题是

Teradata 中的一行从不 跨越块。

你只是计算错了,你说的是(blocksize-38)/rsz,但实际计算显示rsz / ( blocksize -38)

随着较新版本中的块开销增加到 74,这应该是正确的计算:

 ( rc /  (( blocksize - 74)/rsz ) * blocksize ) 
      + ( (HASHAMP()+1  ) * 1024 ) 

它位于 Sizing Base Tables, Hash Indexes, and Join Indexes

但是您会注意到,对于较大的 table,这接近 rc * rsz。由于没有人关心小的 table,我通常使用这个简化的计算来确定 table 的大小(您可以添加 1% 或 2% 以获得最大可能的大小)。

编辑:

不是计算错误,而是由于使用了基本数据类型(可能是 DECIMAL 的截断)。更改为 FLOATNUMBER:

 ( rc *   ( rsz / ( CAST(blocksize -74 AS FLOAT)) ) * blocksize ) 
  + ( (HASHAMP()+1  ) * 1024 )