db2 临时表空间的使用
(2010-11-10 10:23:49)
标签:
it |
分类: db2 |
临时表空间分为系统临时表空间和用户临时表空间
系统临时表空间用来排序、重组表、创建索引以及表连接操作产生的中间表
用户临时表空间 用来声明临时表
系统临时表空间的建立语法(系统管理,自动储存器,db2推荐):
CREATE
STORAGE EXTENTSIZE 16 OVERHEAD 12.67 PREFETCHSIZE 16 TRANSFERRATE
0.18 BUFFERPOOL
--测试过程
----执行这个大sql
select * from crb_test order by
decimal(a/10),b,c,d
--执行的过程中,也就是排序的过程中可以查看
cd
[db2inst1@localhost C0000000.TMP]$ ll
总计 154144
-rw------- 1 db2inst1
db2iadm1
-rw------- 1 db2inst1 db2iadm1
--一直观察
[db2inst1@localhost C0000000.TMP]$ ll
总计 154144
-rw------- 1 db2inst1
db2iadm1
-rw------- 1 db2inst1 db2iadm1
-rw------- 1 db2inst1
db2iadm1
-rw------- 1 db2inst1 db2iadm1 135618560 11-10 08:41
SQL00003.TDA
--一会儿 ,客户端数据已经在输出了,说明排序已经完毕
--再观察系统临时表空间
db2inst1@localhost
C0000000.TMP]$ ll
总计 21568
-rw------- 1 db2inst1
db2iadm1
-rw------- 1 db2inst1 db2iadm1 21815296 11-10 08:40
SQL00002.TDA
-rw------- 1 db2inst1
db2iadm1
-rw------- 1 db2inst1
db2iadm1
--再观察
[db2inst1@localhost C0000000.TMP]$ ll
总计 236
-rw------- 1 db2inst1 db2iadm1
-rw------- 1 db2inst1 db2iadm1
-rw------- 1 db2inst1 db2iadm1
-rw------- 1 db2inst1 db2iadm1
--查看sql的执行情况
select STMT_TEXT,
decimal(total_section_sort_time/num_executions,22,3) as "总的排序时间",
TOTAL_SORTS/num_executions as "排序的次数",
POST_THRESHOLD_SORTS/num_executions "排序超过阀值的次数",
POST_SHRTHRESHOLD_SORTS/num_executions "排序内存受限的次数",
SORT_OVERFLOWS/num_executions "排序溢出的次数" from TABLE
(MON_GET_PKG_CACHE_STMT(null, null, null, -1)) AS tf
where num_executions>0 and stmt_text LIKE 'select *
from crb_test%' order by QUERY_COST_ESTIMATE/num_executions
desc
STMT_TEXT
select * from
crb_test
order by decimal(a/10),b,c,d
--查看sortheap的大小
[db2inst1@localhost C0000000.TMP]$ db2 get db cfg|grep SORT
[db2inst1@localhost C0000000.TMP]$ db2 select 53*4 from
sysibm.dual
1
-----------
总结一下:
1.排序的时候用的临时表空间的大小是临时申请的,使用完毕后释放,所以平时如果没有排序,那么平时看上去都是0
2.我执行的这个sql经过了2次排序,而且这两次排序都是溢出的
3.是不是可以认为这次排序
使用了排序内存为212k,使用了临时表空间的大小是150M((21815296+135618560)/1024/1024)