|
原帖由 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掉 |
|