加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 电商 > 正文

关于Freelists和Freelist Groups的研究(修订版)- 有几多种free list

发布时间:2018-08-23 11:43:07 所属栏目:电商 来源:站长网
导读:四. 有几多种free list1. master free list可能segment free list简称为MFL,在segment被建设的时辰自动天生的,假如我们在建设segment时没有指定freelists参数,可能指定freelists=1,都是天生这个MFL。MFL对付每个segment来说有且只有一个(假如指定fre
四.             有几多种free list1.  master free list可能segment free list简称为MFL,在segment被建设的时辰自动天生的,假如我们在建设segment时没有指定freelists参数,可能指定freelists=1,都是天生这个MFL。MFL对付每个segment来说有且只有一个(假如指定freelists>1,发生的就是不是MFL,这一点将在process free list部门表明)。MFL相等于一个空闲空间池,当一个segment被建设时的初始化block以及往后动态分派的新block都链接到MFL中,这个池中的全部空闲块是被全部历程共享的,对付该segment有insert操纵的全部历程都也许会去读取这个free list,这样当有多个历程要同时insert数据时,就也许呈此刻MFL上的争用(MFL在一个时刻只能应承一个历程取得空闲块,虽然,着实历程从MFL上读取空闲块的操纵并不是简朴地必要几多就取几多,取得往后就直接向块中插入数据,现实上的进程要更伟大一些,这个进程在“历程哀求空闲块的进程”部门会有具体描写)。由此,推出了freelist groups的观念,配置freelist groups参数大于1就是配置了多个MFL,这样就缓解了对付MFL的争用。有关freelist groups更具体的内容在“Super Master Free list”部门会有描写。 2. process free list假如历程必需直接从MFL中读取空闲块,那么对付MFL的争用由freelist groups参数办理(配置多个MFL),可是显然尚有其它一个思绪就是只管不让历程去直接读取MFL,没有需求天然就无所谓争用。由此引入了其它一个级此外free list,这就是process free list,简称为PFL。当我们指定存储参数freelists>1的时辰,天生的就是PFL。我们前面说过MFL是在segment被建设的时辰自动天生的,以是无论是不是有PFL,对付每个segment来说都如故存在1个MFL。也就是假如我们界说freelists便是2的话,那么在segment header block中将总共存在3个freelist,个中1个是MFL,其它2个是PFL。这一点我们同样可以通过dump转储信息来验证。SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000 SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000 SEG LST:: flg: USED   lhd: 0x01c0008b ltl: 0x01c0008b 后头两个free list既是PFL,而前面一个则是MFL。顾名思义,既然定名为process free list,那么显然位于这个级此外free list中的空闲块只能被一个历程读取。想象一下,假如当前体系对付某张表最多同时会有10个历程同时作insert操纵,那么我们配置freelists=10,将能只管满意每个历程都可以或许行使专属于本身的free list,无疑通过这样的本领我们缓解了free list的争用。一个历程到底会行使哪个PFL,oracle内部的算法是:(P % NFL) + 1个中P暗示DML操纵历程的Process ID,可以从v$process.pid字段中取得。NFL暗示freelists存储参数界说的PFL数目。也许会有疑问,假如是这样,多个MFL有存在的须要吗?我们只必要配置多个PFL不就可以了吗?然而究竟并非云云,不外请稍安毋躁,在后头讲授“历程哀求空闲块的进程”中会表明这个题目。 3. transaction free list在Oracle中事宜(transaction)是一个重要的观念,每次DML操纵,事宜的开始都是自动的,而我们可以通过commit可能rollback来符号一个事宜的竣事。一个历程(可能说一个用户会话)有本身的PFL,然后一个历程也许会执行许多的事宜,于是又呈现了这个级此外free list,这就是transaction free list,简称为TFL。TFL是动态发生的,只有当DML语句(好比delete可能update)使block占用量降到pctused参数指定值之下时才会天生TFL,一个TFL只属于一个事宜,而一个事宜也只会有一个TFL,一个事宜没有提交之前,此事宜的TFL上的空闲块不会被其余事宜行使。可是可以立即被才干务行使(此时这些空闲块被称为previously freed blocks)。每个segment起码可以有16个TFL,同时只要有需求就会动态增进TFL数目,除非到达了segment header block size的限定。当没有空间应承新的事宜获得本身的TFL时,这个事宜就必需守候其余的事宜提交并开释TFL。守候哪个事宜的算法是:(P % NFL)个中P暗示DML操纵历程的Process ID,可以从v$process.pid字段中取得。NFL暗示当前的TFL总数目。通过dump转储数据块信息,我们可以看到相同于下面的内容:XCT LST:: flg: USED   lhd: 0x01c0008c ltl: 0x01c0008a xid: 0x0008.01f.000003d2个中xid暗示transaction id,关于transaction id的名目和暗示的意义,有乐趣的读者可以查察其余的资料。 4. Super Master Free list可能Segment Master Free list这个级此外free list只有在配置了多个freelist groups时才会呈现。当我们配置freelist group>1,就会发生freelist group block,这些block紧跟在segment header block之后,假设我们配置了storage(freelists 4 freelist groups 2),那么该segment的第一个块是segment header block,第2,3个块则都是freelist group block。起首在segment header block中存在1个free list,这个free list就被称为Super Master Free list可能Segment Master Free list。而在每个freelist group block中又都存着1个MFL,还存在4个PFL,每个freelist group block块的剩余空间则所有留给TFL行使。在单个instance中历程选择freelist group的算法是(P % NFB) + 1 。个中P暗示DML操纵历程的Process ID,可以从v$process.pid字段中取得。NFB暗示freelist groups 参数界说的Freelist Groups数目。而在RAC情形中的算法例越发伟大,本文不作接头了。查察freelist group block的转储文件可以看到相同于下面的内容:frmt: 0x02 chkval: 0x0000 type: 0x16=DATA SEGMENT FREE LIST BLOCK WITH FREE BLOCK COUNT  blocks in free list = 5 ccnt = 0   SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000   SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000   SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000   SEG LST:: flg: USED   lhd: 0x01c00116 ltl: 0x01c0011a SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读