由于表3中的实验后半段在两个实例上都对表t04209_name做了更改。对于两个实例各自回滚段上的BI而言,激活了一个回滚段的实例立刻成为该段的master实例。如上一节所述回滚段没有真正的object_id,所以使用4294950912+回滚段号作为该回滚段的object_id。到此我们自然就会得出一个有意思的推论:一个事务产生的newvalue和old value(BI)可以被两个不同的实例master:因为实例1可以update一个实例2master的数据块,new value的master自然是实例2;oldvalue由于在实例1的回滚段上所以归实例1master。这样推导下去诸如“gc [current/cr] [multiblock] request”、“gc[current/cr] [2/3]-way“、”gc [current/cr] block busy“、”gc [current/cr] grant2-way“、”gc [current/cr] [block/grant] congested“和“gc [current/cr][failure/retry]“等待事件中的current(new value)和cr(old value)分别对应的master实例有可能不是同一个。可以顺便验证一下(见表4):
实验第16步: 查看回滚段信息 在任一个实例上执行:
|
实验第17步: 查看回滚段正被哪个实例Remaster: 在任一个实例上执行:
|
INSTANCE_NUM | SEGMENT_NAME | SEGMENT_ID | RS.SEGMENT_ID+4294950912 | |
1 | 1 | SYSTEM | 0 | 4294950912 |
2 | 1 | _SYSSMU1$ | 1 | 4294950913 |
3 | 1 | _SYSSMU2$ | 2 | 4294950914 |
4 | 1 | _SYSSMU3$ | 3 | 4294950915 |
5 | 1 | _SYSSMU4$ | 4 | 4294950916 |
6 | 1 | _SYSSMU5$ | 5 | 4294950917 |
7 | 1 | _SYSSMU6$ | 6 | 4294950918 |
8 | 1 | _SYSSMU7$ | 7 | 4294950919 |
9 | 1 | _SYSSMU8$ | 8 | 4294950920 |
10 | 1 | _SYSSMU9$ | 9 | 4294950921 |
11 | 1 | _SYSSMU10$ | 10 | 4294950922 |
12 | 2 | _SYSSMU11$ | 11 | 4294950923 |
13 | 2 | _SYSSMU12$ | 12 | 4294950924 |
14 | 2 | _SYSSMU13$ | 13 | 4294950925 |
15 | 2 | _SYSSMU14$ | 14 | 4294950926 |
16 | 2 | _SYSSMU15$ | 15 | 4294950927 |
17 | 2 | _SYSSMU16$ | 16 | 4294950928 |
18 | 2 | _SYSSMU17$ | 17 | 4294950929 |
19 | 2 | _SYSSMU18$ | 18 | 4294950930 |
20 | 2 | _SYSSMU19$ | 19 | 4294950931 |
21 | 2 | _SYSSMU20$ | 20 | 4294950932 |
表4:表3实验过程中伴随的undo段GRD信息
4.能够查出某个块Master实例和Owner实例的X$表
X$KJBL描述哪一个实例是某个表的带BL锁的块的master实例(见表5)。
让表3中所描述的两个实例继续update,不要停接着做以下的实验(如果两个实例,或其中一个结束了update重新update ) 实验第18步: 在任一个实例上执行:
|
实验第19步: 在任一个实例上执行: select * from myview; 从以上的查询结果可以看出:每个数据块内存拷贝在两个实例的数据库缓冲区缓存中都可以被找到,也就是说每个数据块都有两个个Owner实例,那么证明在近期有两个实例先后修改或访问过它。 |
实验第20 步: 在任一个实例上执行:
这说明:从10g以后版本开始,数据块的状态和属主等信息被存储成每128个块的信息一个master单元,即128个数据块的状态和属主等信息构成一个“gcs mastership bucket”。但是要说明以下:一个“gcs mastership bucket”不一定要存满128个块的状态和属主等信息。这样就能理解:超过128个块的表的数据块可以被多个实例分布式地分段master。 |
实验第21步: 在任一个实例上执行:
从以上结果可以看到,存在大量的数据块的master实例和owner实例不是同一个实例的情况。这是可以预料到的:我们在两个实例上同时密集地OLTP同一张表!这样会有大量的实例间的通信。以下内容来自此刻的AWR报告:
|
实验第22步: 现在让问题回到简单的状态,我们把第2个实例上的update结束。 在任一个实例上执行:
|
实验第23步: 过一会在任一个实例上执行,再查:
从以上结果可以看到,当我们把第2个实例上的update结束后,第2个实例的owner计数在不断下降,但是仍然存在不少数据块的master实例和owner实例不是同一个实例的情况,这样在我们的密集OLTP应用模型下仍然存在实例间不必要的通信量。 |
实验第24步: 在任一个实例上执行:
说明此刻没有发生自动Remaster(Object Affinity and Dynamic Remastering引起)。 |
实验第25步: 在任一个实例上执行(可执行多次): select drms from X$KJDRMAFNSTATS;值始终为2也验证了此刻没有发生自动Remaster。 |
FILE# | BLOCK# | KJBLNAME | KJBLNAME2 | OWNER_Instance | MASTER_Instance | KJBLLOCKP | |
1 | 4 | 387 | [0x183][0x40000],[BL] | 387,262144,BL | 1 | 1 | 237EC730 |
2 | 4 | 387 | [0x183][0x40000],[BL] | 387,262144,BL | 2 | 1 | 49A35F58 |
3 | 4 | 388 | [0x184][0x40000],[BL] | 388,262144,BL | 2 | 1 | 49A31B60 |
4 | 4 | 388 | [0x184][0x40000],[BL] | 388,262144,BL | 1 | 1 | 237F38A0 |
5 | 4 | 389 | [0x185][0x40000],[BL] | 389,262144,BL | 1 | 1 | 237FA490 |
6 | 4 | 389 | [0x185][0x40000],[BL] | 389,262144,BL | 2 | 1 | 49A321D0 |
7 | 4 | 390 | [0x186][0x40000],[BL] | 390,262144,BL | 2 | 1 | 49A32368 |
8 | 4 | 390 | [0x186][0x40000],[BL] | 390,262144,BL | 1 | 1 | 23BF2560 |
9 | 4 | 391 | [0x187][0x40000],[BL] | 391,262144,BL | 2 | 1 | 49A31BE8 |
10 | 4 | 391 | [0x187][0x40000],[BL] | 391,262144,BL | 1 | 1 | 237F16F0 |
…... | …... | …... | …... | …... | …... | …... | …... |
表5:能够查出某个块Master实例和Owner实例的X$表
5.自动Remaster(Object Affinity and Dynamic Remastering引起)和手工Remaster(oradebug命令)
实验第26步: 在任一个实例上执行: select x.ksppinm name,y.ksppstvl value from sys.x$ksppi x,sys.x$ksppcv y where x.indx=y.indx and substr(x.ksppinm,0,1)='_' and x.ksppinm like '_gc_affi%'; |
下面我们来做自动remaster(Object Affinity and Dynamic Remastering引起)的实验。 实验第27步: 在任一个实例上执行:
在任一个实例上执行:
|
实验第28步: 在实例1上:连续做以下两条语句,直到t04209_uname表中有51200000行记录为止。
|
NAME | VALUE | |
1 | _gc_affinity_time | 10←每10秒查看一下是否要做Remastering(不是分钟) |
2 | _gc_affinity_limit | 50←要发生Remastering的实例必须比环境中其它所有实例访问某一个对象的总和还要多50个BL计数 |
3 | _gc_affinity_minimum | 2400←每分钟最少要有的dynamic affinity活动个数,才会发Remastering |
转载于:https://blog.51cto.com/botang/1351715