当前位置: 首页 > news >正文

达梦数据库-学习-21-某表的空间占用过大处理过程

目录

 

一、环境信息

二、介绍

三、优化过程

1、类型映射

2、表结构

3、计算

4、为什么不直接删除数据

5、重建表

四、分析总结

五、建议及改进


 

一、环境信息

名称
CPU12th Gen Intel(R) Core(TM) i7-12700H
操作系统CentOS Linux release 7.9.2009 (Core)
内存4G
逻辑核数2
DM版本1          DM Database Server 64 V8
2          DB Version: 0x7000c
3          03134284194-20240703-234060-20108
4          Msg Version: 12
5          Gsu level(5) cnt: 0

二、介绍

客户反馈达梦数据库某站业务表,空间占用了413G,需分析原因。

三、优化过程

LENGTHB函数计算文本大字段中存储的数据字节数,其中一个字段存的都是NULL,我们不计算在内,大字段占用5G左右,由于达梦是C语言实现的,我们以C语言数据类型来进行实际计算。

1、类型映射

数据类型C类型C类型字节数
BIGINTlong long8
VARCHARchar1 * 字符个数
TEXTunsigned char1 * 字符个数
BITchar1
DATETIMEdpi_timestamp_t16

2、表结构

列号类型
1VARCHAR(32)
2VARCHAR(32)
3BIGINT
4DATETIME(6)
5BIGINT
6DATETIME(6)
7BIT
8VARCHAR(1)
9DATETIME(6)
10VARCHAR(64)
11TEXT
12BIGINT
13BIGINT
14VARCHAR(1)
15TEXT

3、计算

>>> (32 + 32 + 8 + 16 + 8 + 16 + 1 + 1 + 16 + 64 + 8 + 8 + 1) * 50000 / 1024 / 1024 / 1024 + 5
5.009825453162193

我们计算应该是5G左右,这里不涉及加密算法和压缩算法,但实际却占用413G,可以想到此表是由于频繁删除和更新此表导致的碎片化(空洞率过高)。

4、为什么不直接删除数据

数据库内部在删除数据时,只是给此数据打上删除标签,并没有真正的删除,这么做是为了提高并发效率,如果实时删除,我们就需要将树进行实时的旋转,来达到树的相对平衡,效率较低。

5、重建表

通过重建表,降低表碎片,具体步骤如下:

CREATE TABLE ZXJ.TEST_BAK_2025_03_05 AS SELECT * FROM ZXJ.TEST WHERE 1=2;

LOCK TABLE ZXJ.TEST IN EXCLUSIVE MODE;

INSERT INTO ZXJ.TEST_BAK_2025_03_05 SELECT * FROM ZXJ.TEST; -- 或者直接取影响行数,就不用统计ZXJ.TEST_BAK_2025_03_05条数。

-- SELECT count(*) FROM ZXJ.TEST_BAK_2025_03_05;

-- SELECT count(*) FROM ZXJ.TEST;

-- 对比数据是否相等

TRUNCATE TABLE ZXJ.TEST; -- 隐式提交释放锁

INSERT INTO ZXJ.TEST SELECT * FROM ZXJ.TEST_BAK_2025_03_05;

COMMIT; -- 释放锁

DROP TABLE ZXJ.TEST_BAK_2025_03_05;

重建后,通过视图查询,数据大小回缩到了5G。

SELECT T.SEGMENT_NAME, T.SEGMENT_TYPE, SUM(T.BYTES / 1024 / 1024 / 1024) AS "占用空间(G)"
FROM DBA_SEGMENTS T
WHERE T.SEGMENT_TYPE = 'TABLE'
AND
T.OWNER = 'SESP_PROD'
GROUP BY T.SEGMENT_NAME, T.SEGMENT_TYPE;

四、分析总结

本次表的空间占用过大的主要问题是:

生产环境对业务表频繁进行增删改,导致表碎片化严重,发生了数据量不大,但实际占用空间过大的问题。

五、建议及改进

建议按照上面提供的清理碎片化的方法,定时进行清理,避免影响数据库性能和磁盘空间的多余占用。

 

相关文章:

  • 【区块链+ 人才服务】龙岩市区块链实训实验室 | FISCO BCOS 应用案例
  • DPP推荐引擎架构升级演进之路|得物技术
  • 从红黑树到哈希表:原理对比与典型场景应用解析(分布式以及布隆过滤器)
  • Redis几个基本的全局指令
  • mysql事务脏读 不可重复读 幻读 事务隔离级别关系
  • 添加短信服务(前端->后端->短息服务商)
  • 第16届蓝桥杯单片机模拟试题Ⅲ
  • 分布式事物
  • JetBrains PhpStorm v2024.3.1 Mac PHP开发工具
  • jupyter异常及解决办法记录
  • 使用PyCharm安装和配置OpenCV的详细教程
  • Python高级爬虫之js逆向+安卓逆向1.3节:Python数据类型
  • Android MVVM架构实战:XML与Compose的Hilt+ViewModel整合开发
  • 思考力提升的黄金标准:广度、深度与速度的深度剖析
  • 【软考系统架构设计师】系统架构设计知识点
  • 5.11 GitHub API调试五大高频坑:从JSON异常到异步阻塞的实战避坑指南
  • oracle命令上下左右键无法使用如何解决?
  • vue工程中路由导致的循环依赖问题
  • 使用 IP 代理改 IP 后注意事项如何防封号
  • OpenCV 进阶实战与技巧——图像处理的全面解析
  • 央行行长详解降准:将释放长期流动性1万亿,整体存款准备金率平均水平降至6.2%
  • 应对美政策调整:中国重在开放与创新,维护好数据主权
  • 印度袭击巴基斯坦已致至少3人死亡
  • 蓝佛安:中方将采取更加积极有为的宏观政策,有信心实现2025年的5%左右增长目标
  • 消失的日本中年劳动者:任何人都有与社会脱节的风险
  • 多地政府机关食堂迎来大客流,重庆荣昌区委书记给厨师们鼓劲