ORACLE神話的破滅
來源:中國政府采購招標(biāo)網(wǎng) 時(shí)間:2008/9/22
“神話”這個(gè)詞指的是Oracle的那些從未是真的或者曾經(jīng)是真的,但是現(xiàn)在不是真的的行為的基本情況。大多數(shù)的Oracle神話的起源都是技更換術(shù)產(chǎn)生的結(jié)果。
大多數(shù)的人都認(rèn)為今天的許多Oracle神話在他們那個(gè)年代都是真實(shí)的(例如,“磁盤負(fù)載平衡對于性能非常重要”),但是當(dāng)硬件和Oracle軟件都改進(jìn)了之后卻發(fā)現(xiàn)它們都變成了神話。
我們不要忘記Oracle的技術(shù)已經(jīng)超過了15年了,1989年的技術(shù)也與今天的技術(shù)大相徑庭。幸運(yùn)的是,大多數(shù)Oracle的專業(yè)人員都充分理解了Oracle神話的不斷改變,曾經(jīng)正確的建議今天是如何變得不再正確,并且成為了具有神話色彩的謊言。
古老的Oracle神話
有許多古老的Oracle技術(shù)在過去都是非常有用的,但是當(dāng)技術(shù)改變的時(shí)候,成為了神話。問題的混亂是上千家運(yùn)行在古老的硬件并且不支持發(fā)布的Oracle 軟件的Oracle店鋪帶來的。讓我們看一些比較古老的神話。
神話:對象在單區(qū)域內(nèi)執(zhí)行得更好
Oracle大學(xué)在20世紀(jì)90年代的早期教授了compress=y 輸出選項(xiàng)會到達(dá)改善結(jié)果表的性能。今天,本地管理的表空間(LMT)讓這個(gè)建議不再有效。
神話:數(shù)據(jù)緩沖命中率應(yīng)該保持在超過90%的概率
這個(gè)神話也是Oracle在90年代早期宣傳的,當(dāng)時(shí)幾乎全部的Oracle數(shù)據(jù)庫的I/O成為了瓶頸,并且SGA的尺寸也被32位的服務(wù)器技術(shù)所限制了;贠racle的產(chǎn)品,例如SAP,也都在他們的手冊中指出了數(shù)據(jù)緩沖命中率應(yīng)該超過90%。Oracle的作者Robert Freeman 提示到:
很多的情況都證明了要證明任何事情都是很簡單的。假設(shè)有一個(gè)基本的證據(jù),我可以證明緩沖區(qū)命中率毫無意義,或者我可以證明它是世界上最重要的事情了。
我知道有一些腳本可以運(yùn)行在你的數(shù)據(jù)庫上,從而產(chǎn)生任何你想要的數(shù)據(jù)緩沖命中率。這看上去是不是像一個(gè)神話?Oracle看起來并不這么認(rèn)為,基于比率的建議形成了Oracle 10g自動內(nèi)存管理工具的基礎(chǔ),還有v$db_cache_advice 的建議。
現(xiàn)在也還是存在一些Oracle神話——讓我們看一下。
現(xiàn)在的Oracle神話
現(xiàn)代的Oracle神話在很大程度上都是由于Oracle技術(shù)的更換,還有一些Oracle專業(yè)人員無法調(diào)整以適應(yīng)改變導(dǎo)致的。
神話:索引和表不需要分開
這個(gè)神話的產(chǎn)生根據(jù)Oracle在90年代早期提出的建議,當(dāng)時(shí)有關(guān)磁盤的爭論是一個(gè)主要的話題。直到不久之前,數(shù)據(jù)庫中索引和表的分離才被認(rèn)為是好的辦法,并且作為改善性能的方法被接受。
當(dāng)然,還有一部分原因是因?yàn)樗麄冊谕粋(gè)磁盤上,如果他們不分離的話,會互相沖突。將索引移動到一塊獨(dú)立磁盤上的表空間上,與表相分離,而不僅僅是分隔到獨(dú)立的表空間上,這通常都會帶來性能上的提高。
主要的論據(jù),由對單用戶系統(tǒng)的10046個(gè)追蹤所支持,就是在一個(gè)查詢中訪問表和索引的操作在本質(zhì)上不是異步的,而是線性的過程。然而,然而,即使是在單用戶的系統(tǒng)中,也沒有考慮到被請求的頭移動和與讀取索引以及表有關(guān)的磁盤延遲。在多用戶的環(huán)境中,也沒有考慮到以上所有的因素,以及多用戶訪問協(xié)同定位的表和索引產(chǎn)生的影響。
現(xiàn)在,當(dāng)合理地放置了RAID之后,許多有關(guān)協(xié)同定位的問題的爭論都沒有了或者轉(zhuǎn)移了。然而,將表和索引分割到幾個(gè)表空間中仍然使得維護(hù)更加簡單了。分隔到離散的表空間中使得追蹤I/O速率和特定對象或者對象類型成為可能,并且允許用戶使用多塊尺寸。
神話:頻繁更新的表和索引幾乎不需要重新組織
這個(gè)神話是由于Oracle的專家發(fā)表的聲明引起的,他宣稱Oracle的索引總是保持平衡的,重新構(gòu)建并不會給索引帶來多大的好處。下面我們看一下這個(gè)聲明,在某種程度上可以幫助我們理解碎片是如何生成的:
除非你想陷入無休止的組織、再組織、組織、再組織……的循環(huán)中去,你最好找一下原因。
在完美的世界中,你只要使用絕對正確的參數(shù)構(gòu)建一次即可,永遠(yuǎn)都不用再重新構(gòu)建,我恐怕這種情況永遠(yuǎn)都不會在現(xiàn)實(shí)世界中出現(xiàn)。就像期望只清掃你的房間一次,而這個(gè)房間里面裝滿了吵吵鬧鬧的10幾歲的孩子——這是毫無意義的。
今天,能夠理解表和索引具有很高頻率的并發(fā)插入、更新和刪除動作是一件好事情,它可以很快地獲得次佳的結(jié)構(gòu)并需要重新組織以便位多塊掃描操作減少I/O操作(使用Oracle的dbms_redefinition包,更改索引移動/重新構(gòu)建,更改索引接合,或者甚至是根據(jù)可用性需求更改表移動)。索引平衡的概念是分兩個(gè)叉的,B樹總是高度平衡的,它也可以變得稀疏或者向右旋轉(zhuǎn)的,所以就變得更寬或者負(fù)載不平衡。
神話:多個(gè)塊尺寸不會改善性能
這個(gè)神話是不朽的,因?yàn)槎鄠(gè)塊尺寸最初是為了支持可傳輸?shù)谋砜臻g而設(shè)計(jì)的,同時(shí)一些人還不能看到多個(gè)塊尺寸帶來的另一方面很重要的好處。不同的塊尺寸帶來的最大的好處就是更加有效地利用了受到限制的內(nèi)存區(qū)域(db_cache_size, db_32k_cache_size等)以及能夠減少多塊掃描讀取的邏輯I/O次數(shù)的對象智能隔離。
今天,Metalink 提示說多個(gè)塊尺寸參數(shù)是Oracle性能調(diào)整中最重要的部分了,并且還說Robin Schumacher 等專家們都證明了Oracle的索引可以在較大的塊尺寸中構(gòu)建更加優(yōu)化的B樹結(jié)構(gòu)。還有,重新組織高DML 索引,或者對隨機(jī)單行讀取(唯一索引訪問)小行數(shù)據(jù)的時(shí)候使用小的塊尺寸,可以減少db_cache_size 的尺寸,并且會因?yàn)楦嗟膲K適合了緩沖區(qū)的大小而減少PIO。
例如,一些實(shí)驗(yàn)試圖用小的、人造的單用戶實(shí)驗(yàn)來證明這個(gè)斷言,并且提出多個(gè)塊尺寸并不能給現(xiàn)實(shí)世界的數(shù)據(jù)庫帶來任何好處。然而,現(xiàn)實(shí)生活中的店鋪卻報(bào)告了一個(gè)有關(guān)多個(gè)塊尺寸和索引用的32k塊尺寸的截然不同的結(jié)果:
“我最近比較喜歡關(guān)注的問題就是有關(guān)32KB索引的問題:我們的客戶端(200GB+)從這個(gè)簡單的變化中看到I/O縮減了20%……”,EMEA的技術(shù)服務(wù)經(jīng)理Steve Taylor 說。
所以,在這里我們看到了技術(shù)的改變是如何將一項(xiàng)15年前本來有效的方式轉(zhuǎn)換為一個(gè)“神話”的,并最終得到了一個(gè)有關(guān)單用戶測試腳本的錯(cuò)誤結(jié)論,同樣,由于技術(shù)的改變它們還會繼續(xù)創(chuàng)建新的現(xiàn)代神話。
Oracle神話正在形成
當(dāng)Oracle的專業(yè)人員觀察了不同的數(shù)據(jù)庫行為之后得到了不一致的結(jié)論之后,神話還在繼續(xù)。
我們還可以看到Oracle公司大力推薦了一些提出觀點(diǎn)的先進(jìn)人物,但是他們卻針對Oracle的性能公開了誤導(dǎo)他人的言論,從而制造了新的神話:
“一致是不可能的,也不會被任何的優(yōu)化人員的設(shè)置所影響!彼麄冇绊懥藘(yōu)化人員處理事物的方式;但是他們卻沒有影響事物真正進(jìn)行的方式。
當(dāng)然,改變optimizer_mode, optimizer_index_cost_adj和 optimizer_index_caching 的值可以改變優(yōu)化人員對于是否應(yīng)該做一個(gè)完全的掃描或者索引訪問執(zhí)行計(jì)劃的判斷,這也會對所有查詢的一致性數(shù)量產(chǎn)生直接的影響。
目前Oracle的專業(yè)人員分成兩個(gè)截然不同的群體,每個(gè)群體都會Oracle的性能調(diào)整有著完全不同的看法,每個(gè)群體都認(rèn)為對方是造成持續(xù)不斷的Oracle神話的罪魁禍?zhǔn)住?
“經(jīng)驗(yàn)法則”神話——許多Oracle專業(yè)人員都相信“經(jīng)驗(yàn)法則”(ROT)是非常危險(xiǎn)的,并且都了解如果經(jīng)驗(yàn)法則可以被證明是錯(cuò)誤的,即使是在單個(gè)的人為的測試中,經(jīng)驗(yàn)法則在科學(xué)上來說都不再是正確的,因此也就是毫無用處了。
“腳本小子”神話——這個(gè)神話說的是運(yùn)行單用戶的SQL*Plus 腳本來“證明”的Oracle的運(yùn)行方式,在多用戶的數(shù)據(jù)庫中幾乎總是錯(cuò)誤的。
結(jié)論
這是我的由兩部分組成的文章中的第一部分,陳述了理解Oracle神話的基礎(chǔ),并展示了我們?nèi)绾沃獣設(shè)racle神話隨著時(shí)間改變。在我的下一個(gè)部分,我們將會詳細(xì)討論Oracle技術(shù)的相差巨大的多種方式,并看看它們是如何制造混亂的。
——————————————————————————————————————————————————
背景資料:Oracle公司的發(fā)展史
1977 年 拉里·艾利森 (Larry Ellison)、Bob Miner 和 Ed Oates 共同創(chuàng)建了軟件開發(fā)實(shí)驗(yàn)室 (Software Development Laboratories)。1970 年 IBM 的一名研究人員寫了一篇名為《大型共享數(shù)據(jù)庫的關(guān)系數(shù)據(jù)模型》的研究論文,他們?nèi)耸艿竭@篇文章的啟發(fā),決定構(gòu)建一種新型數(shù)據(jù)庫,稱為關(guān)系數(shù)據(jù)庫系統(tǒng) (relational database system) 。
他們所接手的第一個(gè)項(xiàng)目是為美國政府做的,他們將之命名為 Oracle。他們認(rèn)為 Oracle 意思是“智慧之源”,用來作為這個(gè)項(xiàng)目的名稱十分恰當(dāng),也會得到 CIA 的認(rèn)可。
1978 年 軟件開發(fā)實(shí)驗(yàn)室 從原來的圣克拉克遷至位于硅谷心臟的 Menlo Park 的 Sand Hill 大街上。
為了讓人們了解公司的主要業(yè)務(wù)范圍,他們將軟件開發(fā)實(shí)驗(yàn)室更名為關(guān)系軟件公司 (Relationa Software Inc. (RSI))。
1979 年 RSI 開發(fā)出第一款商用 SQL 數(shù)據(jù)庫 — V2(V1 根本就未推出過)。
1982 年 RSI 更名為 Oracle 系統(tǒng)公司 (Oracle System Corporation),Oracle 公司。用產(chǎn)品名稱為公司命名,幫助公司贏得了業(yè)界的認(rèn)同。
1983 年 Oracle 決定開發(fā)便攜式 RDBMS。Oracle 開發(fā)出 V3,這是第一款在 PC 機(jī)、小型機(jī)及大型機(jī)上運(yùn)行的便攜式數(shù)據(jù)庫。
1984 年 年收入達(dá)到 1,270 萬美元
Oracle 遷至貝爾蒙特市戴維斯 20 號一棟 84,000 平方英尺的辦公樓內(nèi)。
推出 Portable Toolset。
這一年設(shè)立了:
Oracle 加拿大公司
Oracle 荷蘭公司
Oracle 英國有限公司
1985 年 年收入達(dá)到 2,300 萬美元
這一年設(shè)立了:
Oracle 奧地利公司
Oracle 德國公司
Oracle 日本公司
Oracle 瑞典公司
Oracle 瑞士公司
1986 年 年收入達(dá)到 5,500 萬美元
1986 年 3 月 12 日推出 IPO(首次公開募股)。當(dāng)日公司股票以 15 美元開盤,20.75 美元收盤。推出第一個(gè)客戶端/服務(wù)器數(shù)據(jù)庫。
這一年設(shè)立了:
Oracle 澳大利亞公司
Oracle 芬蘭公司
Oracle 法國公司
Oracle 系統(tǒng)香港有限公司
Oracle 挪威公司
Oracle 西班牙公司
1987 年 年收入達(dá)到 1.31 億美元
Oracle 正式成為世界上最大的 DBMS 軟件公司。
Oracle 組建了由七個(gè)員工和兩種產(chǎn)品組成的應(yīng)用產(chǎn)品部,這標(biāo)志著它開始進(jìn)入企業(yè)應(yīng)用產(chǎn)品市場。
Oracle 開始開展咨詢與支持業(yè)務(wù),旨在幫助客戶更好地使用他們的軟件。
現(xiàn)在,Oracle 咨詢部已成為世界上第四大咨詢部門。
推出集成的 Case 和 4GL Toolset。
這一年設(shè)立了:
Oracle 墨西哥公司
1988 年 年收入達(dá)到 2.82 億美元
Oracle 成為世界上第四大軟件公司。
Oracle 推出 V6 數(shù)據(jù)庫。
Oracle 推出 Unix 關(guān)系財(cái)務(wù)應(yīng)用產(chǎn)品 (Unix Relational Financial Applications)。
這一年設(shè)立了:
Oracle 巴西公司
Oracle 中國公司
Oracle 塞浦路斯公司
Oracle 馬來西亞公司
Oracle 新西蘭公司
1989 年 年收入達(dá)到 5.71 億美元
Oracle 將其總部遷至紅木城海灣,F(xiàn)在那兒已建起了六座摩天大樓,周圍有無數(shù)的建筑,營造出一種園區(qū)氣氛。
Oracle 在 IBM 大型機(jī)、DEC 和 UNIX 小型機(jī)以及 OS/2 PC 機(jī)上,創(chuàng)下了事務(wù)處理業(yè)績的最佳記錄。
推出 OLTP 支持服務(wù)。
這一年設(shè)立了:
Oracle 智利公司
Oracle 希臘公司
Oracle 韓國公司
Oracle 葡萄牙公司
Oracle 土耳其公司
Oracle 委內(nèi)瑞拉公司
Oracle 臺灣公司
Oracle進(jìn)入中國市場
Oracle 現(xiàn)在的產(chǎn)品銷售范圍覆蓋全世界 86 個(gè)國家和地區(qū)。
1990 年 年收入達(dá)到 9.16 億美元
這一年設(shè)立了:
Oracle 比利時(shí)公司
Oracle 阿根廷公司
Oracle 哥倫比亞公司
Oracle 哥斯達(dá)黎加公司
Oracle 菲律賓公司
1991 年 年收入達(dá)到 10.28 億美元
任命 Jeff Henley 為首席財(cái)務(wù)官 (CFO)
Oracle中國公司正式在中國注冊為“北京甲骨文軟件系統(tǒng)有限公司
1992 年 年收入達(dá)到 11.79 億美元
任命 Raymond Lane 為首席運(yùn)營官 (COO)。
Oracle7 數(shù)據(jù)庫發(fā)布。
1993 年 年收入達(dá)到 15.03 億美元
推出 Cross GUI Toolset。
1994 年 年收入達(dá)到 20.01 億美元
Multi-media Server Database 發(fā)布。
1995 年 年收入達(dá)到 29.67 億美元
拉里·艾利森發(fā)布網(wǎng)絡(luò)計(jì)算機(jī)的概念:網(wǎng)絡(luò)計(jì)算機(jī)是一種帶有本地內(nèi)存的互聯(lián)網(wǎng)應(yīng)用設(shè)備,一種不含硬盤驅(qū)動器的快速微處理器。
Oracle 公司對外公布了其查詢和分析工具套件 — Discoverer/2000,它可幫助最終用戶訪問和分析自己公司的數(shù)據(jù)(如公司數(shù)據(jù)倉庫中的數(shù)據(jù))。Discoverer/2000 將數(shù)據(jù)以一種易于理解、非常直觀的形式展現(xiàn)出來,全公司的任一最終用戶都可利用這些數(shù)據(jù),而不受個(gè)人技術(shù)專長級別的限制。
1996 年 年收入達(dá)到 42.23 億美元
Oracle 組建了一個(gè)新的子公司 — 網(wǎng)絡(luò)計(jì)算機(jī)公司(Network Computer Inc.)推銷網(wǎng)絡(luò)計(jì)算機(jī)。發(fā)布 Oracle7.3 — Universal Server
1997 年 年收入達(dá)到 56.84 億美元
Oracle 公布了 Oracle Designer/2000 2.1 版本和 Oracle Developer/2000 2.1 版本,它極大地提高了數(shù)據(jù)庫應(yīng)用程序開發(fā)人員的生產(chǎn)力。
Oracle 推出其下一代網(wǎng)絡(luò)計(jì)算的數(shù)據(jù)庫 — Oracle8,這就大大降低了企業(yè)的計(jì)算成本,推動了一個(gè)信息獲取低成本、個(gè)性化的新時(shí)代的到來。
Oracle Applications R10.7 將 Oracle 的應(yīng)用產(chǎn)品同 Web 緊密聯(lián)系起來:有了用于 Web 的 Oracle Applications,企業(yè)內(nèi)外的用戶使用熟悉的、簡單易用的 Web 瀏覽器界面不但可以進(jìn)行關(guān)鍵性的事務(wù)處理,還可以獲取公司信息,并按照所了解的公司信息安排自己的活動。
1998 年 年收入達(dá)到 71.44 億美元
Oracle 推出 Oracle Applications Release 11?蛻魴C(jī)/服務(wù)器版本被徹底舍棄了。Release 11 是唯一的互聯(lián)網(wǎng)產(chǎn)品,并且對生產(chǎn)制造與供應(yīng)鏈、財(cái)務(wù)、人力資源和客戶關(guān)系管理等系列產(chǎn)品作了若干新的改進(jìn)。
Oracle 還推出了與 Oracle Applications Release 11 配套的商務(wù)智能系統(tǒng) (Business Intelligence System)。商務(wù)智能系統(tǒng)是一種易于使用的企業(yè)內(nèi)部網(wǎng)應(yīng)用產(chǎn)品,可從 Oracle Applications 中找到信息并將信息發(fā)送給業(yè)務(wù)經(jīng)理和主管人員,幫助他們解決所面臨的棘手問題。
1999 年 年收入達(dá)到 88.27 億美元
Oracle 的 Oracle8i 交付使用:這是世界上第一個(gè)互聯(lián)網(wǎng)數(shù)據(jù)庫,同時(shí)也是 Oracle 的互聯(lián)網(wǎng)平臺商務(wù)革新的核心部分。這個(gè)新的數(shù)據(jù)庫為 Oracle 的低成本基礎(chǔ)架構(gòu)上的互聯(lián)網(wǎng)應(yīng)用產(chǎn)品帶來了巨大的規(guī)模效益。
2000 年 年收入達(dá)到 101.30 億美元
Oracle 電子商務(wù)套件 (E-Business Suite),這是業(yè)界第一款完整的且全面集成的電子商務(wù)應(yīng)用產(chǎn)品套件。Oracle 使用自己的電子商務(wù)套件,僅一年時(shí)間就節(jié)省了 10 億美元,換言之,營業(yè)毛利提高了十個(gè)百分點(diǎn)。