官术网_书友最值得收藏!

4.7 表參數(shù)以及參數(shù)維護(hù)

Heap Table 就是一般的表,獲取表中的數(shù)據(jù)是按命中率來(lái)得到的。沒(méi)有明確的先后之分,在進(jìn)行全表掃描的時(shí)候,并不是先插入的數(shù)據(jù)就先獲取。數(shù)據(jù)的存放也是隨機(jī)的,當(dāng)然根據(jù)可用空閑的空間來(lái)決定。 IOT 就類似是一個(gè)全是索引的表,表中的所有字段都放在索引上,所以就等于約定了數(shù)據(jù)存放的時(shí)候是按照嚴(yán)格規(guī)定的,在數(shù)據(jù)插入以前其實(shí)就已經(jīng)確定了其位置,所以不管插入的先后順序,它在哪個(gè)物理位置與插入的先后順序無(wú)關(guān)。這樣在進(jìn)行查詢的時(shí)候就可以少訪問(wèn)很多blocks,但是插入的時(shí)候,速度就比普通的表要慢一些。

在創(chuàng)建表時(shí),我們使用了表空間和storage參數(shù),如initial、next、pctincrease等,而在數(shù)據(jù)庫(kù)的維護(hù)過(guò)程中,這些參數(shù)是不允許變化的,但是Oracle為了管理和控制數(shù)據(jù)塊,引入了4個(gè)參數(shù),當(dāng)使用手工管理進(jìn)行段空間管理時(shí),需要設(shè)置這幾個(gè)參數(shù)。下面分別說(shuō)明主要的3個(gè)參數(shù)。

1.INTRANS

該參數(shù)是控制對(duì)數(shù)據(jù)塊并行操作的參數(shù),在解釋該參數(shù)前,先介紹事務(wù)槽的概念,事務(wù)槽在數(shù)據(jù)塊頭中,存儲(chǔ)了有關(guān)事務(wù)的控制信息,而每行數(shù)據(jù)有一個(gè)鎖位,該鎖位號(hào)和事務(wù)槽號(hào)相同,數(shù)據(jù)庫(kù)服務(wù)器就是通過(guò)每行的鎖位找到數(shù)據(jù)塊頭中的事務(wù)槽,利用存儲(chǔ)在該事務(wù)槽中的事務(wù)信息完成對(duì)該行數(shù)據(jù)的操作。每個(gè)事務(wù)只使用一個(gè)事務(wù)槽。鎖位和事務(wù)槽的關(guān)系以及數(shù)據(jù)塊的組成如圖4-2所示。

圖4-2 數(shù)據(jù)塊結(jié)構(gòu)及事務(wù)槽與鎖位關(guān)系圖

INITRANS定義了創(chuàng)建數(shù)據(jù)塊時(shí)事務(wù)槽的初始值,該參數(shù)的默認(rèn)值為1,如該參數(shù)為2,說(shuō)明數(shù)據(jù)庫(kù)服務(wù)器實(shí)現(xiàn)在一個(gè)數(shù)據(jù)塊中可以有最多2個(gè)并行的事務(wù),每個(gè)事務(wù)獨(dú)立地并行通過(guò)自己的事務(wù)槽還實(shí)現(xiàn)對(duì)該行數(shù)據(jù)的事務(wù)操作。

2.MAXTRANS

該參數(shù)定義了創(chuàng)建數(shù)據(jù)塊時(shí)事務(wù)槽的最大值,默認(rèn)值為255。下面我們通過(guò)例子4-12來(lái)查看SCOTT用戶的表EMPLOYEES的表參數(shù)INITRANS和MAXTRANS參數(shù)。

例子4-12 查看SCOTT用戶的表EMPLOYEES的表參數(shù)INITRANS和MAXTRANS參數(shù)

    SQL> select ini_trans,max_trans
      2  from dba_TABLEs
      3  where owner = 'SCOTT'
      4  and TABLE_name = 'EMPLOYEES';
    
     INI_TRANS  MAX_TRANS
    -------------------- ------------------
               1           255

輸出說(shuō)明,表EMPLOYEES的兩個(gè)參數(shù)INITRANS和MAXTRANS都采用了默認(rèn)值。

3.PCTFREE

該參數(shù)用于設(shè)置每個(gè)數(shù)據(jù)塊中預(yù)留空間的百分比數(shù)。當(dāng)數(shù)據(jù)塊需要額外空間時(shí)使用PCTFREE參數(shù)設(shè)置的空間。該參數(shù)的默認(rèn)值為10%。為了更好地理解PCTFREE參數(shù)的含義,先介紹數(shù)據(jù)塊的結(jié)構(gòu),如圖4-3所示。

圖4-3 數(shù)據(jù)塊結(jié)構(gòu)圖

數(shù)據(jù)塊由三部分組成,即數(shù)據(jù)塊頭、空閑區(qū)和數(shù)據(jù)區(qū),其中數(shù)據(jù)塊頭從上往下增長(zhǎng),而數(shù)據(jù)區(qū)是從下往上增長(zhǎng),若二者“碰頭”則空閑區(qū)被占滿。

但是一旦空閑區(qū)滿,而且后續(xù)操作如修改數(shù)據(jù)增加了數(shù)據(jù)量,需要占用數(shù)據(jù)空間,此時(shí)該數(shù)據(jù)塊就無(wú)法滿足要求,這樣就造成占用其他數(shù)據(jù)塊的空間,這種空間的置換會(huì)導(dǎo)致磁盤I/O的效率低下,所以最好在一個(gè)數(shù)據(jù)塊中放置修改的數(shù)據(jù)。所以O(shè)racle設(shè)計(jì)了PCTFREE參數(shù),在每個(gè)數(shù)據(jù)塊中設(shè)置了一個(gè)預(yù)留空間,滿足在數(shù)據(jù)操作時(shí)對(duì)數(shù)據(jù)塊空間的要求。

如果修改的數(shù)據(jù)行需要額外的空間,就使用PCTFREE參數(shù)指定的預(yù)留大小的空間。

● FREELISTS:該參數(shù)是一個(gè)空閑數(shù)據(jù)塊隊(duì)列的列表,當(dāng)用戶向表中插入數(shù)據(jù)時(shí),需要數(shù)據(jù)塊作為存儲(chǔ)空間,那么該參數(shù)中的數(shù)據(jù)塊就作為候選的數(shù)據(jù)塊。

● PCTUSED:該參數(shù)定義了數(shù)據(jù)塊中已經(jīng)使用的空間的百分比數(shù)。如果該數(shù)據(jù)塊中已經(jīng)使用的空間的百分比低于該參數(shù)值,該數(shù)據(jù)塊會(huì)放入段中的空閑數(shù)據(jù)塊列表。該參數(shù)的默認(rèn)值為40%。

我們先使用例子4-13,查詢SCOTT用戶的表EMPLOYEES的參數(shù)設(shè)置。

例子4-13 查詢SCOTT用戶的表EMPLOYEES的參數(shù)設(shè)置

    SQL> select TABLE_name,TABLEspace_name,pct_free,pct_used
      2  from dba_TABLEs
      3  where owner = 'SCOTT'
      4* and TABLE_name = 'EMPLOYEES'
    
    TABLE_NAME           TABLESPACE   PCT_FREE   PCT_USED
    --------------------------------------- ------------------- ------------------ --------------
    EMPLOYEES            LIN                10         40

上述輸出結(jié)果顯示該表的參數(shù)PCT_FREE為10,PCT_USED為40。下面使用ALTER TABLE指令動(dòng)態(tài)修改表的參數(shù),如例子4-14所示。

例子4-14 動(dòng)態(tài)修改表的參數(shù)pctused和pctfree

    SQL> ALTER TABLE scott.employees
      2  pctused 50
      3  pctfree 30;
    
    表已更改。

為了驗(yàn)證修改結(jié)果,可以再次使用例子4-15來(lái)查看結(jié)果。

例子4-15 查看例子4-14對(duì)表參數(shù)pctused和pctfree的修改結(jié)果

    SQL> select TABLE_name,TABLEspace_name,pct_free,pct_used
      2  from dba_TABLEs
      3  where owner = 'SCOTT'
      4  and TABLE_name = 'EMPLOYEES';
    
    TABLE_NAME           TABLESPACE   PCT_FREE   PCT_USED
    -------------------- ---------- ---------- ----------
    EMPLOYEES            LIN                30         50

說(shuō)明

由于Oracle中參數(shù)之間的相互關(guān)聯(lián)性,修改一個(gè)參數(shù)很可能會(huì)影響其他參數(shù)的作用,所以,讀者在剛開始學(xué)習(xí)Oracle時(shí)不要輕易修改系統(tǒng)的各種默認(rèn)參數(shù)。

主站蜘蛛池模板: 濮阳市| 岳池县| 登封市| 剑阁县| 宜兰县| 湘潭县| 彭水| 葵青区| 佛教| 龙里县| 南澳县| 翁源县| 鸡泽县| 榆林市| 历史| 于田县| 广平县| 平舆县| 通海县| 烟台市| 海城市| 怀来县| 永康市| 乌什县| 榆社县| 龙陵县| 定襄县| 广灵县| 滨州市| 天峨县| 晋城| 乐东| 改则县| 方城县| 甘洛县| 长武县| 扬州市| 台江县| 三都| 平利县| 醴陵市|