Wednesday, August 29, 2012

DB2 空闲页的使用

DB2使用三种算法中的一种来确定将行插入到哪里

1.缺省模式是,DB2搜索散布在表的各页上的自由空间控制记录(Free Space Control Records,FSCR),以找到有足够自由空间存放新行的页。显然,如果每页上的自由空间都比较少的话,就要浪费很多的搜索时间。为了应付这一点,DB2提供了DB2MAXFSCRSEARCH注册表变量,以便允许将搜索范围限制为少于缺省的5页。

2.当表是通过ALTER TABLE以APPEND ON模式放置时,就要使用第二种算法。这样就完全避免了FSCR搜索,因为只需简单地将行直接放到表的末尾。

3.当表有群集索引(clusteringindex)时,就要用到最后一种算法。在这种情况下,DB2试图将每一行插入到有相似键值的一页中。如果那一页没有空间了,DB2就会尝试附近的页,如果附近的页也没有空间,DB2就进行FSCR搜索。

  如果只考虑插入时间的优化,那么使用APPEND模式对于批量插入是最快的一种方法,但是这种方法的效果远不如我们这里讨论的很多其他方法那么成效显着。第二好的方法应该是采用缺省算法,要优化 INSERT 速度(可能的代价是表增长得更加快),将DB2MAXFSCRSEARCH 注册表变量设置为较小的数。要优化空间重用(可能的代价是 INSERT 速度减慢),将 DB2MAXFSCRSEARCH 设置为更大的数。

  如果有群集索引,则对insert的性能会有很大的负面影响,这一点也不惊奇,因为使用群集索引的目的就是通过在插入时做额外的工作来提高查询(即select)性能的。如果的确需要群集索引,那么可以通过确保有足够的自由空间来使其对插入的影响降至最小:使用ALTERTABLE增加PCTFREE,然后使用REORG预留自由空间。不过,如果允许太多自由空间的存在,则可能导致查询时需要读取额外的页,这反而大大违反了使用群集索引的本意。另一种选择是,在批量插入之前先删除群集索引,而后再重新创建群集索引,也许这是最优的方法(创建群集索引的开销跟创建常规索引的开销差不多,都不是很大,只是在插入时有额外的开销


引用:
http://www.ibm.com/developerworks/data/library/tips/dm-0403wilkins/
http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/c0009677.htm

Sunday, August 26, 2012

DB2 存储过程执行原理

一直认为存储过程应该是直接经过数据库的SQL编译器去执行,但是DB2却不是这样的,解释:
DB2© Universal Database#x2122 stored procedures are written in SQL Procedural Language (SQLPL). When DB2 UDB compiles a stored procedure, it first converts the SQLPL to C, and then compiles the resulting C program into a DLL (dynamic link library). When it's time to run the procedure, DB2 loads the DLL into memory, and calls the main entry point of the DLL.

上面这段话说的是DB2存储过程使用SQLPL语言,编译时先将SQLPL转换成C然后编译成DLL,当调用存储过程时DB2直接载入DLL到内存中执行。

因为这个原因所以DB2的环境中需要有C语言编译器。

link:
http://www.ibm.com/developerworks/data/library/techarticle/0306haungs/0306haungs.html

Saturday, August 25, 2012

新的起点

 一直以来都存在一个很大的缺点,不善于总结。

这个缺点一直阻碍着我的事业发展,在这次的辞职中老大反复提到这一点,希望我在平时多总结,并把它们展示出来。

这个缺点不非从走出社会才开始的,而是从小就形成了这个一个坏习惯。在读书时读后感一直都是自己很不喜欢写的作业,而这恰恰就是对总结很好的练习。

到目前自己的事业正处在于一个不上不下的位置,然后如果想要有比较大的突破的话必然需要不断的改善自己的缺点。

上星期向老大提出辞职,再一次放弃了自己的技术积累准备进入另一个新的技术领域。因为我认为如果要有更好的发展业态环境非常重要,所以我也在不断调整自己的发展方向。

下个月我将开始从事IBM环境下的数据库运维工作,很完整的IBM路线,从p系列小机、AIX、DB2等。我的职位是DBA,主要涉及到的技术有:DB2、AIX、网络、存储等。所以我今天开启了一个新的博客叫I am database,主要记录我在新工作中所有技术的总结。希望这个博客对我个人技术水平的提升有帮助,当然也希望大家能通过这个博客学习到新东西。

谢谢!