楼主: hahabean

[精华] 为什么有大量的FreePndpgs很久都不释放呢?

[复制链接]
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
21#
发表于 2009-8-10 22:40 | 只看该作者
原帖由 hahabean 于 2009-8-9 23:09 发表
还要向两位老大讨教呢,呵呵  我的理解是这样的:

SMP里面记录了所管理的EMP的状态(而不记录是谁做的更改)。同时还记录了最后一个更新SMP的交易LSN(这里用A代替)。由于只有特定的操作才会触发db2释放SMP中的页,即由Freepnd到Free的过程。所以在尝试free的时候需要保证任何早于A的交易(lowtranLSN)必须提交才行。

同时还像请问两位老大,怎么才能确定那个交易hold住了那个lowtranLSN呢?我尝试用db2pd -trans但是不行,呵呵


理解基本上没错 :)
当一个表被drop的时候,需要修改SMP的pageCommitLSN。而将被free的extents会被保存在一个bitmap中。但是当多个application同时drop同一个tablespace里面的不同表的时候,如果同一个SMP page被影响到,那么这个pageCommitLSN只会保存最新的那条LSN。
那么也就是说,如果前面的一些drop table有的被commit,有的没有被commit,如果db2无法区分哪些extent是被commit哪些是没有被commit的。也就是说,如果在这期间那些没有被commit的drop table需要rollback,db2必须保证这些extents没有被别的app使用到。所以,只有当所有影响到该SMP的应用被commit,同时没有比pageCommitLSN更早的未被提交的transaction(因为SMP只保存pageCommitLSN,也就是说db2并不知道都有什么transaction改变了这个SMP page,甚至不知道是否有多过一个transaction改变了这个page),DB2才会真正地把存在在那个bitmap中的所有extents free掉

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
22#
发表于 2009-8-10 22:49 | 只看该作者
一种变通的方法就是先用import from /dev/null replace来truncate table,因为truncate是不可回滚的,所以所有的extents会被立刻free掉,然后再drop table

使用道具 举报

回复
论坛徽章:
5
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:马
日期:2009-09-10 11:26:192010新春纪念徽章
日期:2010-03-01 11:20:08ITPUB9周年纪念徽章
日期:2010-10-08 09:32:262011新春纪念徽章
日期:2011-02-18 11:43:34
23#
发表于 2009-8-11 09:11 | 只看该作者
学习了,总算是把这个问题搞清楚了。

使用道具 举报

回复
论坛徽章:
9
2009日食纪念
日期:2009-07-22 09:30:00ITPUB8周年纪念徽章
日期:2009-09-27 10:21:21祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:19:10ITPUB9周年纪念徽章
日期:2010-10-08 09:31:22ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262012新春纪念徽章
日期:2012-01-04 11:53:54ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:152013年新春福章
日期:2013-02-25 14:51:24
24#
发表于 2009-8-11 10:42 | 只看该作者
非常感谢。
高手解释得就是清楚。。。。。。。。。。。。。。

使用道具 举报

回复
论坛徽章:
1
生肖徽章2007版:虎
日期:2008-01-02 17:35:53
25#
 楼主| 发表于 2009-8-11 16:38 | 只看该作者
原帖由 wangzhonnew 于 2009-8-10 22:40 发表


理解基本上没错 :)
当一个表被drop的时候,需要修改SMP的pageCommitLSN。而将被free的extents会被保存在一个bitmap中。但是当多个application同时drop同一个tablespace里面的不同表的时候,如果同一个SMP page被影响到,那么这个pageCommitLSN只会保存最新的那条LSN。
那么也就是说,如果前面的一些drop table有的被commit,有的没有被commit,如果db2无法区分哪些extent是被commit哪些是没有被commit的。也就是说,如果在这期间那些没有被commit的drop table需要rollback,db2必须保证这些extents没有被别的app使用到。所以,只有当所有影响到该SMP的应用被commit,同时没有比pageCommitLSN更早的未被提交的transaction(因为SMP只保存pageCommitLSN,也就是说db2并不知道都有什么transaction改变了这个SMP page,甚至不知道是否有多过一个transaction改变了这个page),DB2才会真正地把存在在那个bitmap中的所有extents free掉


学习了,佩服啊。觉得老大说的这个更有启发性:

一种变通的方法就是先用import from /dev/null replace来truncate table,因为truncate是不可回滚的,所以所有的extents会被立刻free掉,然后再drop table

使用道具 举报

回复
论坛徽章:
1
生肖徽章2007版:虎
日期:2008-01-02 17:35:53
26#
 楼主| 发表于 2009-8-11 16:39 | 只看该作者
原帖由 wangzhonnew 于 2009-8-10 22:49 发表
一种变通的方法就是先用import from /dev/null replace来truncate table,因为truncate是不可回滚的,所以所有的extents会被立刻free掉,然后再drop table


那是否这样也会立即释放extents呢:

alter table not logged initially
drop the table

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
27#
发表于 2009-8-11 18:06 | 只看该作者
原帖由 hahabean 于 2009-8-11 17:39 发表


那是否这样也会立即释放extents呢:

alter table not logged initially
drop the table

不晓得,测试一下吧,应该有可能不行

使用道具 举报

回复
论坛徽章:
9
2009日食纪念
日期:2009-07-22 09:30:00ITPUB8周年纪念徽章
日期:2009-09-27 10:21:21祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:19:10ITPUB9周年纪念徽章
日期:2010-10-08 09:31:22ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262012新春纪念徽章
日期:2012-01-04 11:53:54ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:152013年新春福章
日期:2013-02-25 14:51:24
28#
发表于 2009-8-11 20:07 | 只看该作者
请问wang,有什么办法能看到这个pageCommitLSN吗?

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
29#
发表于 2009-8-11 20:14 | 只看该作者
nope, you can't see it

使用道具 举报

回复
论坛徽章:
1
生肖徽章2007版:虎
日期:2008-01-02 17:35:53
30#
 楼主| 发表于 2009-8-12 09:07 | 只看该作者
原帖由 wangzhonnew 于 2009-8-11 18:06 发表

不晓得,测试一下吧,应该有可能不行


测试了一下,确实不行

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表