达梦数据库SQL脚本之并行收集统计信息

在遇到一些表数据较大、分区表数量较多的大系统时,收集统计信息一直是前期工作的一个小麻烦,因为经常直接运行 DBMS_STATS.GATHER_SCHEMA_STATS('用户名',100,TRUE,'FOR ALL COLUMNS SIZE AUTO') 收集一个模式的统计信息时,一个晚上无法收集完,甚至需要好几天时间。

另外,以上SQL只能使用一个CPU,在夜晚进行统计时数据库一般处于较闲的状态,没法利用CPU资源。所以我们可以采用多会话的方式来收集。

--登录SYSDBA用户
--创建统计信息记录表
CREATE TABLE MY_TAB_STATS(TABLE_NAME VARCHAR2(100),STAT_FLAG VARCHAR2(5));
--初始化统计信息记录表,如目标是用户DMHR下的所有表
INSERT INTO MY_TAB_STATS(TABLE_NAME) SELECT TABLE_NAME FROM DBA_TABLES WHERE OWNER = 'DMHR';
UPDATE MY_TAB_STATS SET STAT_FLAG = 0;
COMMIT;
--收集统计信息
BEGIN
    FOR TB IN (SELECT ROWID,TABLE_NAME FROM MY_TAB_STATS WHERE ROWID<=1000) LOOP
        DBMS_STATS.GATHER_TABLE_STATS('FMIS0100',TB.TABLE_NAME,NULL,100,TRUE,'FOR ALL COLUMNS SIZE AUTO');
        UPDATE MY_TAB_STATS SET STAT_FLAG = 1 WHERE TABLE_NAME = TB.TABLE_NAME;
        COMMIT;
    END LOOP;
END;

用ROWID可以用户将表分成多个区间进行收集。比如有20000张表需要收集,分成1~5000、5001~10000、10001~15000和15001~20000来收集的话,就能利用到4个CPU,提高收集统计信息的效率。如果发生报错而中断的情况,能根据表中的STAT_FLAG列来检查进度,以便于下次继续收集。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
要在 Red Hat 4.8.3-9 系统的 shell 窗口中执行达梦数据库DM)的 SQL 脚本,您可以按照以下步骤进行操作: 1. 确认您的系统上已经安装了达梦数据库并且配置正确。可以通过运行 "dm -v" 命令来验证数据库的版本和安装情况。 2. 打开一个 shell 窗口,可以通过在终端中输入 "Ctrl + Alt + T" 来打开终端。 3. 进入到包含 SQL 脚本的目录。假设您的脚本文件名为 "script.sql",可以使用 "cd" 命令切换到包含该文件的目录: ``` cd /path/to/script_directory ``` 4. 运行以下命令来执行 SQL 脚本: ``` dmcli -U <用户名> -P <密码> -S <服务器地址>:<端口> -D <数据库名> -f script.sql ``` - <用户名> 和 <密码> 是连接到达梦数据库所需的凭据,根据您的实际情况进行替换。 - <服务器地址> 和 <端口> 是达梦数据库的主机名和端口号,例如 "localhost" 和 "5236"。 - <数据库名> 是要连接的数据库的名称。 5. 执行命令后,系统将提示您输入密码。请键入与上一步中指定的用户名相对应的密码,然后按下 Enter 键。 6. 脚本开始执行,您将看到执行的输出和结果。 在执行脚本过程中,请确保您输入的用户名、密码、服务器地址、端口和数据库名与实际情况相符。另外,还要确保 SQL 脚本文件的位置和文件名是正确的。如有任何执行问题或错误消息,请根据具体错误提示进行排查和调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

保定公民

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值