国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > Oracle > 正文

在Oracle9i中使用多種Block Size

2024-08-29 13:44:16
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  
  Oracle9i為Oracle數(shù)據(jù)庫(kù)引擎帶來(lái)了一些令人吃驚的復(fù)雜性。它推出了許多新的內(nèi)部特性,包括bitmap free lists,基于redo log的復(fù)制,動(dòng)態(tài)SGA,還有一個(gè)可能是最重要的特性,可以支持多種塊大小(Block Size)。   當(dāng)你忽略全部的高級(jí)特性時(shí),Oracle的工作就是傳送數(shù)據(jù),磁盤(pán)的I/O治理和調(diào)整對(duì)于任何的Oracle數(shù)據(jù)庫(kù)都是一個(gè)重要的部分。任何可以令磁盤(pán)I/O減少的工作都對(duì)Oracle數(shù)據(jù)庫(kù)系統(tǒng)有一個(gè)正面的影響。  假如我們查看一下各種各樣調(diào)整Oracle數(shù)據(jù)庫(kù)性能的方法,就會(huì)發(fā)現(xiàn)其實(shí)Oracle性能調(diào)整的共同目標(biāo)都是減少磁盤(pán)的I/O。例如,調(diào)整一個(gè)SQL語(yǔ)句以除去一個(gè)全表搜索的操作可以令查詢運(yùn)行得更快,因?yàn)檫@樣可以直接地減少需要由磁盤(pán)上讀取的數(shù)據(jù)塊。調(diào)整實(shí)例的參數(shù),例如DB_CACHE_SIZE也可以減少磁盤(pán)的開(kāi)銷。  要理解怎樣使用多種塊大小來(lái)提升Oracle數(shù)據(jù)庫(kù)的性能,我們首先查看一下磁盤(pán)I/O的基本特性。任何時(shí)候由磁盤(pán)上訪問(wèn)一個(gè)Oracle數(shù)據(jù)塊時(shí),我們通常會(huì)見(jiàn)到三種延遲。第一種也是最重要的延遲來(lái)源于讀-寫(xiě)頭的移動(dòng)時(shí)間。這個(gè)時(shí)間是指讀-寫(xiě)頭需要將自己定位到正確的柱面所需要的時(shí)間。還有選擇延遲的時(shí)間,這是讀-寫(xiě)頭等待相應(yīng)的塊出現(xiàn)在它的下面,第三個(gè)延遲來(lái)源于將數(shù)據(jù)由磁盤(pán)傳回到Oracle SGA。  其實(shí)99%的延遲都是在真正訪問(wèn)實(shí)際數(shù)據(jù)塊前發(fā)生的,那么我們就可以知道讀取一個(gè)32K的塊所需要的時(shí)間其實(shí)和讀取一個(gè)2K大小的塊相差不大。也就是說(shuō),磁盤(pán)的延遲時(shí)間都是差不多的,它和塊的大小無(wú)關(guān)。因此我們可以得出這樣的結(jié)論:假如每次I/O都能夠讀取最大的塊,那么Oracle數(shù)據(jù)庫(kù)所需要的整體I/O就會(huì)變少。  緩沖的原理并不是Oracle數(shù)據(jù)庫(kù)特有的。對(duì)于內(nèi)存的訪問(wèn)是以納秒計(jì)算的,而對(duì)磁盤(pán)的訪問(wèn)通常是用毫秒計(jì)算的。假如我們可以將Oracle的數(shù)據(jù)塊都放入磁盤(pán)的緩沖中,性能將有著很大的提升。隨著Oracle的成熟和內(nèi)存變得越來(lái)越便宜,我們將會(huì)發(fā)現(xiàn)Oracle數(shù)據(jù)庫(kù)的系統(tǒng)全局空間(SGA)的大小通常都超過(guò)10GB。這樣對(duì)于Oracle數(shù)據(jù)庫(kù)的性能有著很大的提升,因?yàn)樵谧x取時(shí),Oracle數(shù)據(jù)塊都處在內(nèi)存中,相對(duì)于需要由磁盤(pán)上得到數(shù)據(jù)塊,這樣將會(huì)快成千上萬(wàn)倍。  內(nèi)存緩沖中保留著Oracle訪問(wèn)過(guò)的數(shù)據(jù)塊,在緩沖中的數(shù)據(jù)讀取速度要比由磁盤(pán)中讀取要快14,000倍。內(nèi)存數(shù)據(jù)緩沖已經(jīng)由Oracle7的單一緩沖發(fā)展為Oracle8i中的三個(gè)數(shù)據(jù)緩沖。它們的名字分別是KEEP pool,RECYCLE pool和 DEFAULT pool(如圖1所示)。****************圖一***************

  Oracle數(shù)據(jù)緩沖  在Oracle9i中我們?nèi)匀挥腥齻€(gè)數(shù)據(jù)緩沖,不過(guò)我們還可以為Oracle服務(wù)器支持的每個(gè)塊大小創(chuàng)建一個(gè)數(shù)據(jù)緩沖(如圖2所示)。************圖2-Oracle9i的8個(gè)數(shù)據(jù)緩沖*******  在每個(gè)數(shù)據(jù)緩沖中,由數(shù)據(jù)緩沖的命中率可以知道一個(gè)數(shù)據(jù)塊處在內(nèi)存中的可能性。在數(shù)據(jù)緩沖間分配內(nèi)存頁(yè)以確保內(nèi)存緩沖的最優(yōu)利用是Oracle治理員的工作。有時(shí)通過(guò)增加一些緩沖就有明顯的效果(見(jiàn)圖3)************圖三***************(增加到一個(gè)小的數(shù)據(jù)緩沖的內(nèi)存頁(yè))  隨著內(nèi)存緩沖的增加,增加頁(yè)面帶來(lái)的好處就會(huì)下降(如圖4所示)。**************圖4***************  在大的數(shù)據(jù)緩沖下,由此而帶來(lái)的好處下降  索引和大的數(shù)據(jù)塊  在Oracle9i前,Oracle的專家發(fā)現(xiàn)通過(guò)將整個(gè)數(shù)據(jù)庫(kù)移植到更大的數(shù)據(jù)塊,可以減少磁盤(pán)的I/O,從而令整個(gè)系統(tǒng)的性能得到提升。由表面看來(lái)這有點(diǎn)不符合常理,人們可能會(huì)問(wèn)"假如我只需要一個(gè)80字節(jié)的行,那么讀取16K的塊又有什么好處呢?"  這個(gè)問(wèn)題的答案和索引有關(guān)。大部分經(jīng)過(guò)很好地調(diào)優(yōu)的Oracle數(shù)據(jù)庫(kù)都擁有和表數(shù)據(jù)差不多大小的索引。對(duì)于索引來(lái)說(shuō),大的數(shù)據(jù)塊無(wú)疑可以減少I(mǎi)/O,從而可以提升整個(gè)數(shù)據(jù)庫(kù)的性能。  所以,Oracle9i數(shù)據(jù)庫(kù)治理員要做的第一件事可能就是創(chuàng)建一個(gè)32K的表空間,一個(gè)相應(yīng)的32K大小的數(shù)據(jù)緩沖,然后將他們系統(tǒng)中的全部索引移植到這個(gè)32K的表空間中。通過(guò)這樣,Oracle9i數(shù)據(jù)庫(kù)就可以在一次磁盤(pán)I/O中讀取相當(dāng)數(shù)量的索引節(jié)點(diǎn)分枝,因此可以減輕系統(tǒng)的壓力并且提高總體的性能。

  將對(duì)象分配到多個(gè)塊緩沖中  通過(guò)這種方式,我們就可以在Oracle數(shù)據(jù)庫(kù)創(chuàng)建多個(gè)數(shù)據(jù)緩沖,那么我們?cè)鯓記Q定放些什么數(shù)據(jù)到這些數(shù)據(jù)緩沖中呢?  讓我們先來(lái)看一些更常見(jiàn)的技巧。  隔離大表的全表搜索--對(duì)于要進(jìn)行全表搜索的大表將會(huì)從最大的塊大小中得益,它們應(yīng)該被放在使用最大塊大小的表空間。  仔細(xì)設(shè)置db_recycle_cache_size--假如你沒(méi)有為服務(wù)器設(shè)置db_cache_size到支持的最大塊大小,你將不應(yīng)該使用db_recycle_cache_size參數(shù)。代替的是,你將要?jiǎng)?chuàng)建一個(gè)db_32k_cache_size(或者是你設(shè)置的最大值),并且將那些經(jīng)常需要進(jìn)行全表搜索的大表分配到最大的緩存中。  數(shù)據(jù)字典(Data Dictionary)使用默認(rèn)的緩沖--你應(yīng)該確保數(shù)據(jù)字典(例如你的SYSTEM表空間)經(jīng)常全部緩沖到一個(gè)數(shù)據(jù)緩沖池中。要記住,確保SYSTEM表空間的數(shù)據(jù)緩沖擁有足夠的內(nèi)存來(lái)緩沖全部的數(shù)據(jù)字典塊要比數(shù)據(jù)字典的塊大小重要。  隔離索引--在許多情況下,Oracle的SQL語(yǔ)句將會(huì)通過(guò)一個(gè)索引范圍搜索來(lái)得到索引的信息,根據(jù)SQL語(yǔ)句的條件,通過(guò)b樹(shù)或者bitmap索引來(lái)搜索一定范圍的值。因此,將盡量多的索引放到內(nèi)存中是有好處的。Oracle 9i數(shù)據(jù)庫(kù)治理員首先要做的其中一件事情就是將他們?nèi)康腛racle索引轉(zhuǎn)移到一個(gè)使用大的數(shù)據(jù)塊的表空間中,索引性能將會(huì)由大的塊中得到好處。  隔離隨機(jī)訪問(wèn)讀取--對(duì)于那些由磁盤(pán)中隨機(jī)讀取很少行數(shù)的數(shù)據(jù)庫(kù)來(lái)說(shuō),Oracle DBA可以移動(dòng)這些類型的表到一個(gè)2K的表空間中。我們要記住,雖然磁盤(pán)已經(jīng)越來(lái)越便宜,但是這樣做會(huì)讀取一些與查詢無(wú)關(guān)的內(nèi)容到內(nèi)存中,這是我們不希望看到的。
因此,對(duì)于小的、隨機(jī)訪問(wèn)的表,Oracle DBA通常使用小的塊大小。  隔離LOB列的表--對(duì)于那些包含有raw, long raw或者in-line LOBs的表,將它們移動(dòng)到大的數(shù)據(jù)塊中將會(huì)極大地提升磁盤(pán)I/O的性能。有經(jīng)驗(yàn)的DBA將會(huì)檢查dba_tables.avg_row_len來(lái)確保塊大小要比平均的行大。這樣將可以減少Row chaining的發(fā)生,同時(shí)整個(gè)LOB都可以在一次磁盤(pán)I/O中讀取,避免了Oracle必須讀取多個(gè)塊而帶來(lái)的開(kāi)銷。  隔離全表搜索的大表--在Oracle8i中首次推出recycle pool,它的想法是全表搜索的數(shù)據(jù)塊通常都不會(huì)被其它事務(wù)重新讀取),從而可以將它們快速地由Oracle SGA中清除,這樣就可以將寶貴的內(nèi)存用在那些有更大機(jī)會(huì)被其它事務(wù)重新讀取的數(shù)據(jù)塊上。在Oracle9i中,你可以設(shè)置recycle pool使用一個(gè)更小的塊大小。  檢查平均的行長(zhǎng)--表空間的塊大小要比其中表的平均行長(zhǎng)要大(dba_tables.avg_row_len)。假如它比平均行長(zhǎng)小,這時(shí)就會(huì)發(fā)生rows chaining和過(guò)多的磁盤(pán)I/O。  使用大的塊作數(shù)據(jù)排序--你的TEMP表空間將會(huì)由最大支持的塊中受益。這樣磁盤(pán)排序句可以發(fā)生在大的塊中,從而減少磁盤(pán)I/O。  查看數(shù)據(jù)緩沖使用情況的工具  將Oracle對(duì)象放到獨(dú)立的數(shù)據(jù)緩沖中的過(guò)程是很簡(jiǎn)單的,Oracle9i還提供了一些工具作輔助。許多Oracle的治理員都沒(méi)有意識(shí)到這些處于數(shù)據(jù)緩沖中的塊消耗一個(gè)不對(duì)稱的數(shù)據(jù)空間,而Oracle9i提供了大量的腳本來(lái)讓你查看哪些對(duì)象是經(jīng)常處在數(shù)據(jù)緩沖中的。  以下的查詢是用來(lái)計(jì)算當(dāng)前緩沖中的全部segment的塊數(shù)目。根據(jù)你的緩沖大小,這樣或者需要很多排序空間。column object_name format a40column number_of_blocks format 999,999,999,999column object_name format a40column number_of_blocks format 999,999,999,999SELECT  o.object_name,  COUNT(1) number_of_blocksFROM  DBA_OBJECTS o,  V$BH bhWHERE  o.object_id = bh.objdAND  o.owner != 'SYS'GROUP BY  o.object_nameORDER BY  count(1) desc;  以下讓我們看一下緩沖中的對(duì)象名和數(shù)據(jù)塊的數(shù)目OBJECT_NAME  NUMBER_OF_BLOCKS---------------------------------------- ----------------ORDER_TABLE   123,273ORDER_IDX    112,492CUSTOMER     83,272. . . OEM_EXT       701   創(chuàng)建獨(dú)立的數(shù)據(jù)緩沖  在Oracle9i中,將表或者索引塊分配到不同數(shù)據(jù)塊大小的表空間是很簡(jiǎn)單的。在創(chuàng)建一個(gè)表空間時(shí),我們會(huì)使用一個(gè)新的blocksize參數(shù)。在以下的例子中,我們?cè)贠racle數(shù)據(jù)庫(kù)中創(chuàng)建了一個(gè)32K的表空間。create tablespace 32k_tablespacedatafile '/u01/oradata/mysid/32k_file.dbf'size 100Mblocksize  32k;  我們一旦創(chuàng)建了表空間,下一步是根據(jù)上面的blocksize來(lái)設(shè)置一個(gè)數(shù)據(jù)庫(kù)緩沖。要記住,Oracle 9i不再使用init.ora文件,所以我們要通過(guò)alter database語(yǔ)句來(lái)動(dòng)態(tài)地創(chuàng)建帶名字的緩沖。alter system set db_2k_cache_size=200M; alter system set db_4k_cache_size=500M; alter system set db_8k_cache_size=800M; alter system set db_16k_cache_size=1600M;   一旦我們創(chuàng)建了帶名字的內(nèi)存緩沖和表空間,我們就可以將Oracle對(duì)象轉(zhuǎn)移到新的表空間中。對(duì)于將對(duì)象由一個(gè)表空間轉(zhuǎn)移到另一個(gè),有多種方法,而許多的Oracle治理員已經(jīng)習(xí)慣使用create table as select or CTAS語(yǔ)法來(lái)移動(dòng)表格。對(duì)于index,則可以使用alter index rebuild轉(zhuǎn)移到另一個(gè)表空間。  結(jié)論  對(duì)于Oracle9i的許多新特性,許多有經(jīng)驗(yàn)的DBA都認(rèn)為塊的大小對(duì)于調(diào)整Oracle數(shù)據(jù)庫(kù)是最重要的。治理員現(xiàn)在可以使用多達(dá)7個(gè)獨(dú)立和不同的數(shù)據(jù)池,可以對(duì)每個(gè)數(shù)據(jù)對(duì)象使用的數(shù)據(jù)緩沖塊的數(shù)目進(jìn)行更大的控制。通過(guò)考察不同的緩沖訪問(wèn)特性,可以大大地減少磁盤(pán)I/O,從而極大地提高數(shù)據(jù)庫(kù)的性能。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 花垣县| 玉树县| 特克斯县| 兴仁县| 望都县| 贡觉县| 萍乡市| 喀喇沁旗| 汝阳县| 松桃| 敖汉旗| 元江| 通化市| 永寿县| 泗洪县| 秦皇岛市| 贞丰县| 高邑县| 汝南县| 井研县| 石屏县| 墨竹工卡县| 长治县| 腾冲县| 尚义县| 察隅县| 玉溪市| 平定县| 丹阳市| 龙井市| 阳城县| 邻水| 南宫市| 顺平县| 长岭县| 治多县| 绍兴市| 南充市| 平昌县| 鲜城| 虹口区|