注册
DM8临时表空间使用率查询-达梦数据库
专栏/技术分享/ 文章详情 /

DM8临时表空间使用率查询-达梦数据库

祢真伟大 2026/08/28 160 0 0
摘要

DM8临时表空间使用率查询-达梦数据库

1. 概述

在达梦数据库(DM Database)中,临时表空间(Temp Tablespace)用于存储排序、哈希连接、临时表等操作产生的中间数据。当内存(如排序区 SORT_AREA_SIZE)不足以容纳全部中间结果时,数据库会自动将数据溢出到临时表空间。本文将通过创建测试表、生成大规模数据并执行排序查询,演示如何触发并观察临时表空间的使用情况。

环境
x86 Kylin v10
DM8 Database 64 V8 03134284552-20260414-322369-20221

2. 创建测试表

首先,创建表 TEST_TEMP_SRC,用于存放大量待排序的数据。

-- 创建源数据表 CREATE TABLE TEST_TEMP_SRC ( ID INT PRIMARY KEY, NAME VARCHAR(100), SCORE INT, CREATE_TIME DATETIME );

3. 插入测试数据以触发排序

为了模拟真实场景并触发临时表空间,需要插入足够多的数据。以下脚本将生成约 500 万条数据(具体数量可根据您的内存配置调整,数据量越大越容易触发临时表空间)。

-- 清空表(可选,确保从空表开始) TRUNCATE TABLE TEST_TEMP_SRC; -- 使用 PL/SQL 循环插入大量数据 DECLARE v_cnt INT := 0; BEGIN FOR i IN 1..5000000 LOOP INSERT INTO TEST_TEMP_SRC (ID, NAME, SCORE, CREATE_TIME) VALUES (i, 'TEST_USER_' || TO_CHAR(i), MOD(i, 100), SYSDATE); v_cnt := v_cnt + 1; IF MOD(v_cnt, 10000) = 0 THEN COMMIT; END IF; END LOOP; COMMIT; END; /

说明

  • 循环插入 500 万条记录,每条记录的 SCOREi % 100(即 0‑99 的循环值)。
  • 每插入 10000 条提交一次,避免事务过大。
  • 执行此脚本前,请确保临时表空间有足够容量(通常默认临时表空间 TEMP 会自动扩展)。

4. 执行触发临时表空间的查询

执行以下查询。由于数据量较大且包含 ORDER BY 操作,当内存不足以容纳排序结果时,达梦数据库会自动将排序数据溢出到临时表空间

-- 此查询会触发排序操作,若内存不足将使用临时表空间 SELECT T1.NAME, T1.SCORE FROM TEST_TEMP_SRC T1 ORDER BY T1.SCORE DESC, T1.NAME ASC;

原理

  • ORDER BY T1.SCORE DESC, T1.NAME ASC 需要对全表约 500 万行数据进行排序。
  • 如果 SORT_AREA_SIZE(或相关内存参数)设置较小,或者数据量超过内存可用空间,排序中间结果会被写入临时表空间。
  • 您可以通过监控临时表空间的使用情况来验证是否触发。

5. 验证临时表空间使用情况

执行以下查询,查看当前会话(或其他会话)的临时表空间使用量。

SELECT "TMP_USED_TYPE", "TMP_USED_EXTENT_NUM" * (SF_GET_EXTENT_SIZE()) * (PAGE() / 1024) / 1024 AS TEMP_MB, * FROM "SYS"."V$SESSIONS" ORDER BY TEMP_MB DESC;

image.png

image.png

字段解释

  • TMP_USED_TYPE:临时空间使用类型(如 BTR、BLOB、MTAB、BACKUP 等),存在多个类型时,不同类型用"/"隔开(如 BTR/BLOB)。
  • TMP_USED_EXTENT_NUM:已使用的临时簇数量。
  • SF_GET_EXTENT_SIZE():获取当前表空间的簇大小。
  • PAGE():获取数据库页大小(字节)。
  • TEMP_MB:计算出的临时表空间使用量(MB)。

运行上述查询后,您会看到按临时空间使用量降序排列的会话信息。正在执行排序操作的会话通常会排在前面,其 TEMP_MB 值会明显大于 0。

6. 注意事项与优化建议

  1. 临时表空间大小:确保临时表空间有足够空间容纳溢出数据。可通过 SELECT * FROM V$TABLESPACE; 查看临时表空间状态。
  2. 内存参数调整:若希望减少临时表空间使用,可适当增大 SORT_AREA_SIZE(需重启生效)或 SORT_BUFFER_SIZE(会话级动态调整)。
  3. 性能监控:大量数据排序会消耗 I/O 资源,可能影响整体性能。建议在业务低峰期进行此类测试。
  4. 清理测试数据:测试完成后,可先执行TRUNCATE TABLE TEST_TEMP_SRC;
    释放空间,再执行 DROP TABLE TEST_TEMP_SRC; 删除测试表。

7. 总结

本文演示了在达梦数据库中通过创建测试表、插入大规模数据并执行排序查询来触发临时表空间使用的完整流程。通过监控 V$SESSIONS 视图,可以直观地看到临时表空间的实际消耗。掌握这一方法有助于进行性能调优、容量规划以及临时表空间相关问题的诊断。

8. 更多达梦数据库全方位指南:安装、优化与实战教程-

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服