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 影子列

相关推荐

  1. ALTER TABLE 变更(slow alter

    2024-04-09 19:06:02       39 阅读
  2. “人家赚那么多”系列03:如何练习?

    2024-04-09 19:06:02       65 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-09 19:06:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-09 19:06:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-09 19:06:02       87 阅读
  4. Python语言-面向对象

    2024-04-09 19:06:02       96 阅读

热门阅读

  1. LeetCode 670. 最大交换

    2024-04-09 19:06:02       37 阅读
  2. memset()函数及其作用

    2024-04-09 19:06:02       37 阅读
  3. 蓝桥杯-【二分】求阶乘

    2024-04-09 19:06:02       40 阅读
  4. 力扣经典150题第九题:跳跃游戏

    2024-04-09 19:06:02       36 阅读
  5. K8S Deployment HA

    2024-04-09 19:06:02       29 阅读
  6. 查找同一个进程显示在任务栏上的多个窗口

    2024-04-09 19:06:02       36 阅读
  7. Qt 翻译工具:使用 tr() 函数实现多语言支持

    2024-04-09 19:06:02       41 阅读
  8. Vue中Suspense组件详细介绍

    2024-04-09 19:06:02       40 阅读
  9. 特权账号怎么管?企业真的很为难!

    2024-04-09 19:06:02       34 阅读
  10. NIO与BIO

    2024-04-09 19:06:02       37 阅读