达梦数据库的大表快速加列方法

背景:

开发商反馈给一张数据量为2.9亿,124G的表加字段,非常慢,一个小时都没有执行成功。

解决办法:

达梦数据库提供一个动态会话级参数:ALTER_TABLE_OPT,该参数默认为:0

先查询数据库当前的参数ALTER_TABLE_OPT的值:

复制代码
SELECT PARA_NAME,PARA_VALUE,FILE_VALUE FROM V$DM_INI WHERE PARA_NAME='ALTER_TABLE_OPT';

修改该参数为3:

复制代码
SP_SET_PARA_VALUE(1,'ALTER_TABLE_OPT',3);
或
ALTER SYSTEM SET 'ALTER_TABLE_OPT'=3 BOTH;

说明:该参数修改后,只对新建立连接的会话生效,原本存在的会话无效。
参数优化调整后,再添加字段就毫秒级执行成功。

参数详解:

1)对于添加列,当设置INI参数ALTER_TABLE_OPT为1时,添加列采用查询插入实现,可能会导致ROWID的改变;

2)ALTER_TABLE_OPT 为 2 时,系统开启快速加列功能,对于没有默认值或者默认值为 NULL 的新列,系统内部会标记为附加列,能够达到瞬间加列的效果,此时记录 ROWID 不会改变,若有默认值且默认值不为NULL,则默认值的存储长度不能超过 4000 字节,此时仍旧采取查询插入实现;

3)ALTER_TABLE_OPT 为 3 时,系统会开启快速加列功能,允许指定新增列的默认值,系统会为该列设置附加列标记,查询表中已存在的数据时,会自动为记录设置追加列默认值,此时记录 ROWID 不会改变。
PS:一般建议将该参数直接设置为3即可。

相关推荐
fb_123452 分钟前
MySQL基础核心|数据库原理+MySQL详解
数据库·mysql
‎ദ്ദിᵔ.˛.ᵔ₎7 分钟前
Mysql 基本查询
数据库·mysql
-madongyu-14 分钟前
GaussDB 性能调优:等待事件、慢 SQL 定位与关键参数
数据库·sql·gaussdb
-madongyu-26 分钟前
GaussDB 部署规划:磁盘水位、RAID 与端口设计
数据库·gaussdb
weixin_511255217 小时前
MySQL升级记录
数据库·mysql
程序猿乐锅8 小时前
【黑马点评 | 第八篇】Redisson分布式锁
java·数据库·spring boot·redis·分布式·spring·缓存
Leo.yuan8 小时前
2026年本地化Data Agent优质厂商盘点:哪些产品更适合企业生产环境
大数据·数据库·人工智能
做运维的阿瑞9 小时前
数据库增删改的安全写法
数据库·sql·mysql
程序边界9 小时前
迁移评估不再拍脑袋,这个数据迁移工具的量化报告把我救了(上)
数据库
阿狗童鞋10 小时前
Redis实战指南
数据库·redis·缓存