加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

db2 临时表空间的使用

(2010-11-10 10:23:49)
标签:

it

分类: db2

临时表空间分为系统临时表空间和用户临时表空间
系统临时表空间用来排序、重组表、创建索引以及表连接操作产生的中间表
用户临时表空间 用来声明临时表

系统临时表空间的建立语法(系统管理,自动储存器,db2推荐):
CREATE  SYSTEM TEMPORARY  TABLESPACE TEMP_1 PAGESIZE 8 K  MANAGED BY AUTOMATIC
STORAGE EXTENTSIZE 16 OVERHEAD 12.67 PREFETCHSIZE 16 TRANSFERRATE 0.18 BUFFERPOOL  IBMDEFAULTBP ;
--测试过程
----执行这个大sql
select * from crb_test order by decimal(a/10),b,c,d  


--执行的过程中,也就是排序的过程中可以查看  系统临时表空间下的目录
cd  /afc_suzhou_data/db2inst1/NODE0000/SUZHOU/T0000001/C0000000.TMP 
[db2inst1@localhost C0000000.TMP]$ ll
总计 154144
-rw------- 1 db2inst1 db2iadm1         0 11-09 16:17 SQL00002.TBA
-rw------- 1 db2inst1 db2iadm1  21815296 11-10 08:40 SQL00002.TDA        --这个文件使用一直在增加,直到21815296

--一直观察
[db2inst1@localhost C0000000.TMP]$ ll
总计 154144
-rw------- 1 db2inst1 db2iadm1         0 11-09 16:17 SQL00002.TBA
-rw------- 1 db2inst1 db2iadm1  21815296 11-10 08:40 SQL00002.TDA
-rw------- 1 db2inst1 db2iadm1         0 11-09 16:17 SQL00002.TLB
-rw------- 1 db2inst1 db2iadm1 135618560 11-10 08:41 SQL00003.TDA       --这个文件使用也一直在增加,直到135618560

--一会儿 ,客户端数据已经在输出了,说明排序已经完毕
--再观察系统临时表空间
db2inst1@localhost C0000000.TMP]$ ll
总计 21568
-rw------- 1 db2inst1 db2iadm1        0 11-09 16:17 SQL00002.TBA
-rw------- 1 db2inst1 db2iadm1 21815296 11-10 08:40 SQL00002.TDA
-rw------- 1 db2inst1 db2iadm1        0 11-09 16:17 SQL00002.TLB
-rw------- 1 db2inst1 db2iadm1        0 11-10 08:41 SQL00003.TDA          --这个文件的大小变成0了

--再观察
[db2inst1@localhost C0000000.TMP]$ ll
总计 236
-rw------- 1 db2inst1 db2iadm1   0 11-09 16:17 SQL00002.TBA
-rw------- 1 db2inst1 db2iadm1   0 11-10 08:41 SQL00002.TDA              --这个也变成0了
-rw------- 1 db2inst1 db2iadm1   0 11-09 16:17 SQL00002.TLB
-rw------- 1 db2inst1 db2iadm1   0 11-10 08:41 SQL00003.TDA
--查看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    44388.000                                                                                           --看到排序溢出的次数是2
order by decimal(a/10),b,c,d

--查看sortheap的大小
[db2inst1@localhost C0000000.TMP]$ db2 get db cfg|grep SORT
 Sort list heap (4KB)                         (SORTHEAP) = AUTOMATIC(53)
 Index sort flag                             (INDEXSORT) = YES
[db2inst1@localhost C0000000.TMP]$ db2 select 53*4 from sysibm.dual

        
-----------
        212        ---212k

  1 record(s) selected.
 
总结一下:
1.排序的时候用的临时表空间的大小是临时申请的,使用完毕后释放,所以平时如果没有排序,那么平时看上去都是0
2.我执行的这个sql经过了2次排序,而且这两次排序都是溢出的         
3.是不是可以认为这次排序 使用了排序内存为212k,使用了临时表空间的大小是150M((21815296+135618560)/1024/1024) 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有