ALTER TABLE 之 慢速变更(slow alter)

数据库服务器使用慢速变更算法来处理ALTER TABLE语句时,其他用户可能会长时间无法使用该表。
基于以下原因,慢速变更时表可能不可用:

  • 在ALTER TABLE 操作期间以互斥方式锁定了表
  • 为了将表转换成新的定义而为表制作了副本
  • 在ALTER TABLE 操作期间转换数据行
  • 可以将ALERR TABLE 语句视为长事务,如果超过高水位线LTXHWM阀值时,将出现长事务回滚。

由于数据库服务器复制表数据以将该表转换为新定义,因此慢速变更操作需要的空间至少为原始表大小的两倍与日志空间之和。

ALTER TABLE 语句对列的更改无法定点变更(in-place alter)时,数据库服务器使用慢速变更算法:

  • 添加或删除使用ROWIDS 关键宇创建的列
  • 添加或删除使用REPLCHECK 关键宇创建的列
  • 删除TEXT 或BYTE 数据类型的列
  • 将SMALLINT 列修改为SERIAL、SERIAL8 或BIGSERIAL
  • 将INT 列转换为SERIAL、SERIAL8 或BIGSERIAL
  • 修改列的数据类型,这些旧数据类型的某些可能值无法转换为新数据类型(例如:如果将某列的数据类型INTEGER 修改为CHAR(n)时,那么在n 值小于11 的情况下,数据库服务器将使用慢速变更算法,因为INTEGER 需要10个字符加一个负号字符来表示可能的最小负数值。)
  • 使用某种方法来修改分段存储列的数据类型,该方法中的值转换可能会导致行移动到其他分段
  • 表中包含用户定义的数据类型、智能大对象(BLOB、CLOB)或者 LVARCHAR、SET、MULTISET、ROW 或COLLECTION 数据类型时,添加、删除或修改任意列
  • 修改VARCHAR 或NVARCHAR 列的原始大小或保留大小
  • 添加ERKEY 影子列

标签: GBase, 慢速变更, 快递变更, ALTER TABLE

添加新评论