博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DB2临时表空间的使用
阅读量:6912 次
发布时间:2019-06-27

本文共 2833 字,大约阅读时间需要 9 分钟。

hot3.png

临时表空间分为系统临时表空间用户临时表空间

系统临时表空间用于存储 SQL 操作(比如排序、重组表、创建索引和连接表)期间所需的内部临时数据。每个数据库必须至少有一个系统临时表空间。随数据库创建的系统临时表空间的缺省名为 TEMPSPACE1。

用户临时表空间用来存储已声明的全局临时表。创建数据库时不存在用户临时表空间。至少应当创建一个用户临时表空间以允许定义已声明的临时表。用户临时表空间是可选的,缺省情况下一个都不创建。

系统临时表空间的建立语法(系统管理,自动储存器,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                    0                   0                    2                   --看到排序溢出的次数是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

1         

-----------

        212        ---212k

  1 record(s) selected.

 

总结一下:

1.排序的时候用的临时表空间的大小是临时申请的,使用完毕后释放,所以平时如果没有排序,那么平时看上去都是0

2.我执行的这个sql经过了2次排序,而且这两次排序都是溢出的         

3.是不是可以认为这次排序 使用了排序内存为212k,使用了临时表空间的大小是150M((21815296+135618560)/1024/1024) 

转载于:https://my.oschina.net/goopand/blog/476145

你可能感兴趣的文章
在C#中调用批处理文件
查看>>
C语言字节对齐
查看>>
怎样区别nginx中rewrite时break和last
查看>>
开发HBase的时候需要搭建的Eclipse总结
查看>>
Mysql数据库修复
查看>>
我的友情链接
查看>>
leetCode 70. Climbing Stairs | 动态规划
查看>>
bboss标签使用大全-数据展示标签
查看>>
java中hashCode()与equals()详解
查看>>
点滴积累【JS】---JS小功能(createElement和insertBefore添加div下面的节点)
查看>>
异步提交form表单
查看>>
A Newbie’s Install of Keras & Tensorflow on Windows 10 with R
查看>>
关于使用input type=file 标签上传文件的注意细节(上传文件 无法获取文件 问题)...
查看>>
<if test="outState!=null">OUT_STATE=#{outState},</if>空格问题
查看>>
.Net内存回收
查看>>
js 获取/设置文本输入域内光标的位置的方法
查看>>
oracle sql developer 出现 : 适配器无法建立连接问题解决方案 The Network Adapter could not establish the connection...
查看>>
Linux下connect超时处理【总结】
查看>>
高性能数据库集群:读写分离
查看>>
Laravel 5.5 Blade::if 简介
查看>>