本文就达梦数据库达梦数据库临时表空间介绍及检查、管理、维护进行介绍。
TEMP表空间完全由DM数据库自动维护。当用户的SQL语句需要磁盘空间来完成某个操作时,DM数据库会从TEMP表空间分配临时段。如创建索引、无法在内存中完成的排序操作、SQL语句中间结果集以及用户创建的临时表等都会使用到TEMP表空间。
检查语句如下:
SELECT a.tablespace_name "表空间名称",
total / (1024 * 1024) "表空间大小(M)",
free / (1024 * 1024) "表空间剩余大小(M)",
(total - free) / (1024 * 1024 ) "表空间使用大小(M)",
total / (1024 * 1024 * 1024) "表空间大小(G)",
free / (1024 * 1024 * 1024) "表空间剩余大小(G)",
(total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)",
round((total - free) / total, 4) * 100 "使用率 %"
FROM (SELECT tablespace_name, SUM(bytes) free
FROM dba_free_space
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(bytes) total
FROM dba_data_files
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name;
检查结果举例:
行号 表空间名称 表空间大小(M) 表空间剩余大小(M) 表空间使用大小(M) 表空间大小(G) 表空间剩余大小(G) 表空间使用大小(G) 使用率 %
---------- --------------- -------------------- ------------------------ ------------------------ -------------------- ------------------------ ------------------------ -----------
1 DXHTBS 192 191.75 0.25 0 0.187255859375 0.000244140625 0.13
2 LCPTTBS 128 127.75 0.25 0 0.124755859375 0.000244140625 0.2
3 MAIN 256 65.75 190.25 0 0.064208984375 0.185791015625 74.32
4 ROLL 128 126 2 0 0.123046875 0.001953125 1.56
5 TEMP 1024 1023.75 0.25 1 0.999755859375 0.000244140625 0.02
6 DMHR 128 127.875 0.125 0 0.1248779296875 0.0001220703125 0.1
7 SYSTEM 74 53.125 20.875 0 0.0518798828125 0.0203857421875 28.21
8 BOOKSHOP 150 141.625 8.375 0 0.1383056640625 0.0081787109375 5.58
9 TEST 256 255.75 0.25 0 0.249755859375 0.000244140625 0.1
9 rows got
已用时间: 8.140(毫秒). 执行号:36564301.
调整临时表空间为500M,是静态参数需要重启才能生效。
SQL> select para_name, para_value from v$dm_ini where para_name like '%TEMP%';
行号 PARA_NAME PARA_VALUE
---------- ---------------- ----------------
1 TEMP_PATH /dm8/data/DAMENG
2 TEMP_SIZE 1024
3 TEMP_SPACE_LIMIT 102400
已用时间: 5.912(毫秒). 执行号:36564302.
SQL> sp_set_para_value(2,'TEMP_SIZE',500);
DMSQL 过程已成功完成
已用时间: 5.778(毫秒). 执行号:36564303.
SQL> select para_name, para_value from v$dm_ini where para_name like '%TEMP%';
行号 PARA_NAME PARA_VALUE
---------- ---------------- ----------------
1 TEMP_PATH /dm8/data/DAMENG
2 TEMP_SIZE 1024
3 TEMP_SPACE_LIMIT 102400
已用时间: 5.372(毫秒). 执行号:36564304.
重启数据库生效:
[dmdba@owumvyu4iuuzaxxp-0004 bin]$ sh DmServiceDMSERVER stop
Stopping DmServiceDMSERVER: [ OK ]
[dmdba@owumvyu4iuuzaxxp-0004 bin]$ sh DmServiceDMSERVER start
Starting DmServiceDMSERVER: [ OK ]
[dmdba@owumvyu4iuuzaxxp-0004 bin]$
[dmdba@owumvyu4iuuzaxxp-0004 bin]$ disql SYSDBA/[email protected]:5236
服务器[127.0.0.1:5236]:处于普通打开状态
登录使用时间 : 1.915(ms)
disql V8
SQL> select para_name, para_value from v$dm_ini where para_name like '%TEMP%';
行号 PARA_NAME PARA_VALUE
---------- ---------------- ----------------
1 TEMP_PATH /dm8/data/DAMENG
2 TEMP_SIZE 500
3 TEMP_SPACE_LIMIT 102400
已用时间: 7.262(毫秒). 执行号:2000.
SQL>
设置临时表空间自动扩展上限为10G,动态参数不需要重启生效。
SQL> sp_set_para_value(1,'TEMP_SPACE_LIMIT',10240);
DMSQL 过程已成功完成
已用时间: 10.579(毫秒). 执行号:2001.
SQL> select para_name, para_value from v$dm_ini where para_name like '%TEMP%';
行号 PARA_NAME PARA_VALUE
---------- ---------------- ----------------
1 TEMP_PATH /dm8/data/DAMENG
2 TEMP_SIZE 500
3 TEMP_SPACE_LIMIT 10240
已用时间: 5.463(毫秒). 执行号:2002.
SQL>
在日常维护中可能遇到临时表空间暴增情况,如何避免这种情况呢?有以下3点建议:
1.减少和避免不必要的排序,查询条件尽量创建索引。
2.避免超大结果集查询,查询条件控制的越小越好,仅是查询必须的结果集。
3.对于大表可以进行分区规划,或者业务层面某种维度拆分。
本文先对达梦数据库临时表空间进行介绍,其次就临时表空间检查和管理进行介绍,最后对临时表空间维护提出3点建议。
关于达梦数据库更多学习内容,欢迎访问达梦社区:
https://eco.dameng.com