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

背景:

开发商反馈给一张数据量为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即可。

相关推荐
码出钞能力42 分钟前
apache-shardingsphere-5.5.3自定义分片算法
数据库
兜有米啦1 小时前
数据库第二次作业
数据库
nVisual2 小时前
机柜PDU安装位置与空间建模方案
大数据·网络·数据库·信息可视化·数据中心基础设施管理
weixin_6682 小时前
Cursor-superpowers插件用法
数据库·人工智能
NWU_白杨2 小时前
三种常用的数据存储技术
数据库·redis·mysql·sqlite
吃饱了得干活2 小时前
亿级订单表分库分表设计,从0到1全流程
java·数据库·面试
蓝创工坊Blue Foundry2 小时前
图片文字提取到 Excel:批量任务如何先定义要交付的字段
运维·服务器·开发语言·数据库·自动化·ocr·excel
麦聪聊数据3 小时前
企业数据市场建设(三):API 化服务封装,让数据开箱即用、避免重复开发
数据库
脱胎换骨-军哥3 小时前
C++数据库存储引擎内核开发:B+树索引与MVCC并发控制的完整实现
数据库·c++·b树
麦聪聊数据3 小时前
企业数据市场建设(四):流程闭环与价值运营,让数据市场真正转起来
运维·数据库