書名: Oracle DBA基礎(chǔ)教程作者名: 林樹澤本章字?jǐn)?shù): 1516字更新時(shí)間: 2021-03-26 13:21:43
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ù)。
- 深入理解Android(卷I)
- Instant Testing with CasperJS
- The DevOps 2.3 Toolkit
- .NET 4.0面向?qū)ο缶幊搪劊夯A(chǔ)篇
- Java入門很輕松(微課超值版)
- Instant Typeahead.js
- 機(jī)械工程師Python編程:入門、實(shí)戰(zhàn)與進(jìn)階
- 深度強(qiáng)化學(xué)習(xí)算法與實(shí)踐:基于PyTorch的實(shí)現(xiàn)
- Getting Started with Python Data Analysis
- 自然語(yǔ)言處理Python進(jìn)階
- Unity UI Cookbook
- NetBeans IDE 8 Cookbook
- Hands-On Neural Network Programming with C#
- App Inventor少兒趣味編程動(dòng)手做
- PyQt編程快速上手