Decode360's Blog

          業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            397 隨筆 :: 33 文章 :: 29 評(píng)論 :: 0 Trackbacks
          簇的管理
          ?
          ??? 簇是由共享相同數(shù)據(jù)塊的一組表組成的。因?yàn)檫@些表共享公共的列并且經(jīng)常一起被使用,所以將這些表組合在一起。因?yàn)槭褂么貙⒉煌淼南嚓P(guān)行一起存儲(chǔ)到相同的數(shù)據(jù)塊,所以可以有以下的好處:
          ?
          ??? 1、減少磁盤(pán)I/O,并改善訪問(wèn)簇表的聯(lián)結(jié)所花的時(shí)間。
          ??? 2、每個(gè)簇鍵值在簇和簇索引中僅存儲(chǔ)一次。
          ?
          ??? cluster
          ?
          ?
          一、管理簇的準(zhǔn)則
          ?
          1、為簇選擇合適的表
          ?
          ??? 需要使用簇的表一般滿(mǎn)足以下條件:
          ?
          ??? * 表主要被查詢(xún) (即表不總是被插入或更改)
          ??? * 表中的記錄經(jīng)常被一起或聯(lián)結(jié)查詢(xún)
          ?
          2、為簇鍵選擇合適的列
          ?
          ??? 一般來(lái)說(shuō),好的簇鍵具有足夠的唯一值,以便相應(yīng)于每個(gè)鍵值的行的組大概會(huì)填充同一個(gè)數(shù)據(jù)塊。
          ??? 每個(gè)簇鍵值的行太少了就會(huì)浪費(fèi)空間,并導(dǎo)致一點(diǎn)性能損失。而當(dāng)每個(gè)簇鍵值的行太多時(shí)就可能會(huì)導(dǎo)致額外的搜索以發(fā)現(xiàn)該鍵的行,可能會(huì)造成比沒(méi)有成簇時(shí)更差的性能。
          ?
          ??? 另注:簇索引不能是唯一的或包含一個(gè)long類(lèi)型的列。
          ?
          3、指定數(shù)據(jù)塊空間使用
          ?
          ??? 通過(guò)在創(chuàng)建簇時(shí)指定PCTUSED和PCTFREE參數(shù),可以影響空間的利用。
          ?
          4、指定平均簇鍵及其相關(guān)的行所需的空間
          ?
          ??? CREATE CLUSTER語(yǔ)句有一個(gè)可選的參數(shù)——SIZE。它是一個(gè)估計(jì)的平均簇鍵及其相關(guān)行所需的字節(jié)數(shù)。Oracle在執(zhí)行如下任務(wù)時(shí)使用SIZE參數(shù):
          ?
          ??? * 估計(jì)可以填充到簇?cái)?shù)據(jù)塊的簇鍵(及其相關(guān)的行)的數(shù)量時(shí)
          ??? * 限制放置到簇?cái)?shù)據(jù)塊中的簇鍵的數(shù)量時(shí)
          ?
          ??? 注:SIZE不限制簇鍵可以使用的空間,只是一個(gè)估算值。
          ?
          5、指定每個(gè)簇和簇索引行的位置
          ?
          ??? 可以在CREATE CLUSTER/INDEX 語(yǔ)句中指定TABLESPACE 以指定其不同的位置。將簇和簇索引創(chuàng)建在不同的存儲(chǔ)設(shè)備上的不同表空間,可以減少磁盤(pán)競(jìng)爭(zhēng)而同步得檢索表數(shù)據(jù)和索引數(shù)據(jù)。
          ?
          6、估計(jì)簇大小和設(shè)備存儲(chǔ)參數(shù)
          ?
          ??? 在創(chuàng)建簇之前就估算簇的大小有以下好處:
          ?
          ??? * 可以估算出所需磁盤(pán)空間,以確定合適的硬件選擇
          ??? * 估算單個(gè)簇的大小,以便更好得管理簇要使用的空間,設(shè)置存儲(chǔ)參數(shù),改善I/O性能
          ?
          ?
          二、創(chuàng)建簇
          ?
          1、創(chuàng)建簇
          ?
          ??? CREATE CLUSTER emp_dept (deptno NUMBER(3))
          ??? PCTUSED 80
          ??? PCTFREE 5
          ??? TABLESPACE users
          ??? NEXT 300K
          ??? MINEXTENTS 2
          ??? MAXEXTENTS 20
          ??? PCTINCREASE 33);
          ?
          ??? 注:本例沒(méi)有INDEX子句,則會(huì)默認(rèn)創(chuàng)建一個(gè)索引簇。
          ?
          2、創(chuàng)建簇表
          ?
          ??? CREATE TABLE emp (
          ??? empno NUMBER(5) PRIMARY KEY,
          ??? ename VARCHAR2(15) NOT NULL,
          ??? ...
          ??? deptno NUMBER(3) REFERENCES dept)
          ??? CLUSTER emp_dept (deptno);
          ?
          ??? CREATE TEBLE dept (
          ??? deptno NUMBER(3) PRIMARY KEY, ...)
          ??? CLUSTER emp_dept (deptno);
          ?
          ??? 注:可以將簇表和簇建立在不同的模式下,列名也不一定需要匹配,但是結(jié)構(gòu)必須匹配。
          ?
          3、創(chuàng)建簇索引
          ?
          ??? CREATE INDEX emp_dept_index
          ??? ON CLUSTER emp_dept
          ??? INITRANS 2
          ??? MAXTRANS 5
          ??? TABLESPACE users
          ??? STORAGE (INITIAL 50K
          ??? NEXT 50K
          ??? MINEXTENTS 2
          ??? MAXEXTENTS 10
          ??? PCTINCREASE 33)
          ??? PCTFREE 5;
          ?
          ?
          三、更改簇
          ?
          ??? 簇的以下設(shè)置可以被更改:
          ?
          ??? * 物理屬性(PCTFREE、PCTUSED、INITRANS、MAXTRANS & STORAGE)
          ??? * 為存儲(chǔ)簇鍵值的所有行所需空間的平均值(SIZE)
          ??? * 默認(rèn)的并行度
          ?
          ??? 另外,可明確地給簇分配新的盤(pán)區(qū),或回收在簇的末端的任何未使用盤(pán)區(qū)。
          ?
          ??? ALTER CLUSTER emp_dept
          ??? PCTFREE 30
          ??? PCTUSED 60;
          ?
          ?
          四、刪除簇
          ?
          ??? 刪除不包含表的簇及其簇索引:
          ??? DROP CLUSTER emp_dept;
          ?
          ??? 刪除包含表的簇,并同時(shí)刪除簇表:
          ??? DROP CLUSTER emp_dept INCLUDING TABLES;
          ??? --注:當(dāng)簇包含簇表且未增加INCLUDING TABLES子句,則會(huì)報(bào)錯(cuò)
          ?
          ??? 簇表中包含外鍵約束時(shí):
          ??? DROP CLUSTER emp_dept INCLUDING TABLES CASCADE CONSTRAINTS;
          ??? --若存在約束且未使用CASCADE CONSTRAINTS子句,則會(huì)報(bào)錯(cuò)
          ?
          ??? 刪除簇表:
          ??? DROP TABLE xxx;
          ?
          ??? 刪除簇索引:
          ??? DROP INDEX xxx;
          ??? --注:簇索引雖然可以刪除,但是沒(méi)有簇索引就無(wú)法使用簇,所以一般在重建時(shí)才刪除簇索引。
          ?
          ?
          五、簇的相關(guān)信息
          ?
          ??? DBA|ALL|USER_CLUSTERS:數(shù)據(jù)庫(kù)中所有簇的表述,包括DBMS_STATS包或ANALYZE語(yǔ)句產(chǎn)生的統(tǒng)計(jì)數(shù)據(jù)
          ??? DBA|USER_CLU_COLUMNS:將表列映射到簇列
          ?
          ?
          posted on 2009-03-17 23:16 decode360 閱讀(148) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 08.DBA
          主站蜘蛛池模板: 宁波市| 蓬莱市| 交城县| 镇巴县| 兴义市| 赤峰市| 卢氏县| 德格县| 阜宁县| 威海市| 军事| 玉林市| 临夏市| 榆中县| 景宁| 曲周县| 旬阳县| 富川| 介休市| 米脂县| 曲松县| 古蔺县| 孝感市| 滕州市| 广宗县| 开阳县| 德惠市| 交口县| 三亚市| 东宁县| 武邑县| 贵港市| 霸州市| 隆昌县| 肇州县| 潍坊市| 刚察县| 焦作市| 怀来县| 广丰县| 武隆县|