估计具有固定长度行的表

可以估计具有固定长度行的表的大小(以页数表示)。具有固定长度行的表没有 VARCHAR 或 NVARCHAR 数据类型的任何列。

执行以下步骤以估计固定长度的行的表的大小(以页数表示)。

要估计页大小、行大小、行数和数据页面数:

  1. 使用 onstat -b 获取页大小。

    此输出的最后一行中的 buffer size 字段显示页大小。

  2. 将该值减去 28,可以得到出现在每个数据页面头的数量。
    得出的量为 pageuse
  3. 要计算行的大小,可将表定义中的所有列的宽度相加。TEXT 和 BYTE 列各使用 56 字节。
    如果已经创建了表,可以使用以下 SQL 语句获得行的大小:
    SELECT rowsize FROM systables WHERE tabname = 
          'table-name'; 
    
  4. 估计表包含的行数的期望值。
    此值称为 rows。根据行大小是小于还是大于 pageuse,计算表所需的数据页面数的过程也会有所不同。
  5. 如果行的大小小于或等于 pageuse,那么使用以下公式计算数据页面数。
    trunc() 函数符号表示要向下舍入 到最接近的整数。
    data_pages = rows / trunc(pageuse/(rowsize + 4))
    

    每页的最大行数是 255,该值与行的大小无关。

    重要: 尽管数据库服务器接受的行的最大大小约为 32 千字节,但如果行的大小超过页的大小,性能就会降低。 有关分解宽表以提高性能的信息,请参阅对数据模型进行反向规范化以提高性能
  6. 如果行的大小大于 pageuse,数据库服务器就会将 该行在各页之间进行拆分。
    包含行的初始部分的页称为 主页。包含行的后续部分的页 称为余页。 如果一行跨两页以上,某些余页就会完全被来自该行的数据填充。 如果行的尾部未用完一页,它可以和其他行的尾部结合,一起填充该部分余页。 数据页面的数目是主页、完整余页和部分余页的总数。
    1. 计算主页的数目。

      主页的数目和行数相等:

      homepages = rows
    2. 计算完整余页的数目。

      首先使用以下公式计算剩余的行的大小:

      remsize = rowsize - (pageuse + 8)
      

      如果 remsize 小于 pageuse - 4 ,那么没有完整余页。

      如果 remsize 大于 pageuse - 4 ,在以下公式中使用 remsize 以获得完整余页的数目:

      fullrempages = rows * trunc(remsize/(pageuse - 8))
      
    3. 计算部分余页的数目。

      首先计算,在减去单行的主页和完整余页后,行的剩余部分的大小。 以下公式中,remainder() 函数符号表示 做除法后取余:

      partremsize = remainder(rowsize/(pageuse - 8)) + 4
      

      数据库服务器使用与页大小相关的特定大小阈值,以确定使用部分余页的数目。 使用以下公式计算部分余页与页的比率:

      partratio = partremsize/pageuse 

      使用下表中的相应公式来计算部分余页的数目。

      partratio 计算部分余页数目的公式
      小于 .1 partrempages = rows/(trunc((pageuse/10)/remsize) + 1)
      小于 .33 partrempages = rows/(trunc((pageuse/3)/remsize) + 1)
      大于或等于 .33 partrempages = rows
    4. 使用以下公式将页数进行加总:
      tablesize = homepages + fullrempages + partrempages