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

背景:

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

相关推荐
海南java第二人5 小时前
Nebula Graph 实战:基于图数据库存储 CMDB 实体关系
数据库·图数据库·nebula
曹牧6 小时前
oracle:“not all variables bound”
数据库·oracle
数据库百宝箱6 小时前
Oracle RMAN Image Copy 本地恢复
数据库·oracle
zuYM4g7Dp7 小时前
NoSql数据库设计心得
数据库·nosql
睡不醒男孩0308239 小时前
第七篇:揭秘 PostgreSQL 数据库内核级管控:CLup 深度架构设计与高可用底座技术白皮书
数据库·postgresql·clup
cmes_love10 小时前
Level 2逐笔成交历史数据下载方法笔记
数据库·笔记·oracle
swordbob10 小时前
MySQL字符集陷阱:从Oracle迁移踩坑到utf8mb4强制规范
数据库·sql
牛油果子哥q10 小时前
【C++ STL string 】C++ STL string 终极精讲:底层原理、内存机制、全套API、深浅拷贝、易错坑点与工程实战规范
数据库·c++
十五年专注C++开发10 小时前
MySql中各种功能用sql语句实现总结
数据库·sql·mysql
数据库小学妹10 小时前
AI时代数据库怎么选?多模融合、数据统一存储与选型实战指南
数据库·人工智能·经验分享·ai