韋德昌 遼寧錦州渤海大學信息科學與技術學院
Oracle數(shù)據(jù)庫應用系統(tǒng)的性能優(yōu)化
韋德昌 遼寧錦州渤海大學信息科學與技術學院
Oracle是被人們熟知的數(shù)據(jù)庫,隨著數(shù)據(jù)庫的用戶占用率不斷增多的現(xiàn)象,數(shù)據(jù)庫的整體性能出現(xiàn)滑坡。本文提出了關于Oracle數(shù)據(jù)庫性能優(yōu)化問題以及改善方案,直接影響系統(tǒng)性能和數(shù)據(jù)庫運行效率,通過研究和分析哪些的因素能夠影響Oracle數(shù)據(jù)庫的性能優(yōu)化,確定一種數(shù)據(jù)優(yōu)化方案為本文的研究目標,其中包括:內(nèi)存優(yōu)化技術、表分區(qū)技術、I/O優(yōu)化技術、索引技術和SQL優(yōu)化技術等,期望通過本文的方法使得數(shù)據(jù)庫操作性能達到最優(yōu)化,經(jīng)過本文研究表明:優(yōu)化的系統(tǒng)性能和系統(tǒng)運行效率都得以改善。
Oracle 數(shù)據(jù)庫 應用系統(tǒng) 性能優(yōu)化 內(nèi)存分配
當前,Oracle數(shù)據(jù)庫被廣泛地應用到各種領域中,如政府機關、公安警務、電信業(yè)務、金融領域、能源等多個職能部門,并已逐漸深入到企業(yè)數(shù)據(jù)庫管理平臺,但是隨著Oracle逐漸深入擴大,Oracle是用戶使用量最多的管理系統(tǒng),對于選擇大型數(shù)據(jù)庫作為軟件開發(fā)的基礎平臺而言,是軟件運行的基礎部分。同時,系統(tǒng)性能也是數(shù)據(jù)庫評價的重要參數(shù)。但是,在實際實踐中,隨著用戶量不斷增多和訪問量急劇上升,系統(tǒng)中需要處理的數(shù)據(jù)不斷增多,系統(tǒng)的性能也隨之下降,有必要對其性能進行優(yōu)化,因此,在滿足系統(tǒng)需求條件之下,數(shù)據(jù)庫性能優(yōu)化變得極其重要,數(shù)據(jù)庫性能處于最佳和系統(tǒng)開銷最小,以達到系統(tǒng)運行的最優(yōu)的狀態(tài)。
2.1 如何提高系統(tǒng)吞吐量
數(shù)據(jù)庫吞吐量按照其在單位時間內(nèi)(單位:秒)所執(zhí)行的SQL語句總共條數(shù),其公示表示為:吞吐量=系統(tǒng)執(zhí)行事務語句條數(shù)/單位時間(秒),通常用TPS表示吞吐量,其最終要實現(xiàn)性能優(yōu)化問題,提高吞吐量是對數(shù)據(jù)庫系統(tǒng)性能加以提升。
2.2 如何縮短響應時間
數(shù)據(jù)庫系統(tǒng)的響應時間需要提交到后臺,提交SQL事務后返回查詢結果共計響應時間,為了提升系統(tǒng)的整體性能指標,通過減小系統(tǒng)用戶和請求時間與系統(tǒng)響應時間之差獲取的時間戳,來實現(xiàn)縮短用戶等待時間的目的,通過縮短系統(tǒng)響應時間,既可實現(xiàn)減少用戶請求時間,并提升系統(tǒng)性能和資源使用比。
2.3 如何優(yōu)化磁盤I/O
Oracle將數(shù)據(jù)儲放磁盤或者內(nèi)存數(shù)據(jù)塊中,如果想要往數(shù)據(jù)庫中讀寫數(shù)據(jù)操作時,必須有I/O操作,合理規(guī)劃磁盤的讀寫數(shù)據(jù)操作,基于高速緩存技術實現(xiàn)吞吐量的提高,用戶請求縮短系統(tǒng)響應時間,有效利用系統(tǒng)物理內(nèi)存空間,避免過多的使用磁盤I/O讀寫操作。
2.4 如何提高數(shù)據(jù)庫命中率
Oracle數(shù)據(jù)庫用戶進程所使用的全部數(shù)據(jù)盡量都在高速緩沖區(qū)中獲取,因為針對高速緩沖區(qū)的讀寫速度快。用戶獲取數(shù)據(jù)目標能否在緩沖區(qū)中得到滿足,并縮短了數(shù)據(jù)庫的響應時間,提高在高速緩沖區(qū)數(shù)據(jù)讀寫命中率,以這種方式衡量數(shù)據(jù)庫系統(tǒng)性能的一種方式。
2.5 如何實現(xiàn)合理使用內(nèi)存
在數(shù)據(jù)并發(fā)量要求較大的情況下,如果Oracle數(shù)據(jù)庫內(nèi)存空間不夠則影響數(shù)據(jù)庫處理效率降低,延遲用戶請求的響應時間,如果內(nèi)存空間合理使用,多數(shù)情況下可以得到最大效率和占用最小的系統(tǒng)內(nèi)存空間,以這兩個評價參數(shù)作為合理使用內(nèi)存的判斷,通過合理使用系統(tǒng)的內(nèi)存空間,方可大大提高數(shù)據(jù)庫的使用性能。
2.6 如何減小磁盤排序
當用戶請求提交的某一條SQL事務時,此事務中包括了聚合函數(shù)或者數(shù)據(jù)排序時,有可能數(shù)據(jù)排序在內(nèi)存中實現(xiàn),或許在物理磁盤上實現(xiàn)數(shù)據(jù)排序的功能。但是,由于數(shù)據(jù)庫讀寫操作在物理磁盤上進行,再加上磁盤自身結構存在的問題,其實現(xiàn)讀寫操作的速度遠遠低于位于內(nèi)存中的數(shù)據(jù),因此,數(shù)據(jù)庫的優(yōu)化原則避免在物理磁盤上實現(xiàn)數(shù)據(jù)排序操作。
影響數(shù)據(jù)性能的原因有很多種因素,例如:操作系統(tǒng)性能、CPU參數(shù)設置、內(nèi)存分配不當、Oracle數(shù)據(jù)庫配置問題、數(shù)據(jù)讀寫的I/O操作沖突、數(shù)據(jù)在網(wǎng)絡傳輸速度偏低以及SQL語句出現(xiàn)邏輯錯誤等,以上因素都會影響數(shù)據(jù)庫的整體性能。
①操作系統(tǒng)性能。Oracle的服務器在某種程度上所依賴于運行在操作系統(tǒng)上的服務器,操作系統(tǒng)參數(shù)配置不當會影響數(shù)據(jù)的性能。
②CPU參數(shù)設置。CPU是數(shù)據(jù)庫運行的重要硬件,CPU資源被事務占用過高的比例,會導致其他事務暫停運行,而使其他事務的響應時間延遲,當系統(tǒng)空閑時,CPU占用率已經(jīng)達到80%,表明Oracle服務器參數(shù)設置不當。
③I/O數(shù)據(jù)讀寫沖突操作。由于磁盤操作只運行一個進程讀寫操作,當幾個進程同時進行讀寫磁盤數(shù)據(jù)時,數(shù)據(jù)庫會針對進程進行互斥操作防止數(shù)據(jù)讀寫沖突。
④Oracle參數(shù)設置。后臺進程與實例之間都位于系統(tǒng)的內(nèi)存中,正確設置Oracle參數(shù)會優(yōu)化數(shù)據(jù)庫系統(tǒng)性能。
⑤內(nèi)存分配不當。當操作系統(tǒng)為了擴大虛擬內(nèi)存而進行重新分配內(nèi)存,它實際上利用了磁盤空間。當實際內(nèi)存不能滿足軟件需求時,操作系統(tǒng)不斷的從磁盤空間與內(nèi)存進行頁面的替換操作,優(yōu)化內(nèi)存分配不當操作的主要目是為了減少內(nèi)存交換次數(shù),減少分頁,盡量在高速緩存中進行數(shù)據(jù)讀取操作等。
⑥數(shù)據(jù)在網(wǎng)絡傳輸速度偏低。網(wǎng)絡在某種程度上影響數(shù)據(jù)庫系統(tǒng)的整體性能,如果網(wǎng)速慢則導致網(wǎng)絡負荷量增加,從而降低數(shù)據(jù)的傳輸速率和系統(tǒng)的吞吐量,延長用戶請求等待的響應時間。
⑦SQL語句出現(xiàn)邏輯錯誤。存在大量遞歸的SQL事務,如果全表掃描所需要的等待時間較長,數(shù)據(jù)庫表結構設置和約束條件設置不合理,不合理的設置I/O數(shù)據(jù)讀取操作,使用非標準SQL語句參數(shù),使用執(zhí)行效率低的SQL事務實現(xiàn)數(shù)據(jù)的讀取操作。
4.1 優(yōu)化軟件系統(tǒng)
數(shù)據(jù)庫的性能體現(xiàn)在軟件系統(tǒng)性能上,很多問題由于軟件系統(tǒng)某些缺陷導致數(shù)據(jù)庫的死鎖、運行效率降低等。企業(yè)的信息化系統(tǒng)為了加快軟件系統(tǒng)的開發(fā)進程,對軟件系統(tǒng)開發(fā)和測試設計上不合理,系統(tǒng)測試不全面、不合理、不精確。例如說,在進行大規(guī)模系統(tǒng)測試時使用簡單的測試方案,系統(tǒng)在運行一個時期之后出現(xiàn)性能下降的現(xiàn)象,這表明軟件的整體性能存在問題的體現(xiàn)。測試時必須要結合多用戶、高并發(fā)量的測試過程,并充分分析測試結論。一個軟件系統(tǒng)的整體性能的優(yōu)劣完全取決于Oracle數(shù)據(jù)庫的性能。
4.2 優(yōu)化數(shù)據(jù)庫的SQL語句
SQL語句的優(yōu)化是提高數(shù)據(jù)庫性能的重要方面。優(yōu)化的SQL語句不僅降低I/O數(shù)據(jù)讀取操作次數(shù),而且重要的是降低占用網(wǎng)絡傳輸帶寬。因此,高可靠的數(shù)據(jù)庫系統(tǒng)不單單是完成簡單的數(shù)據(jù)存取操作,更重要的是完成已經(jīng)優(yōu)化的SQL事務,從根本上提高數(shù)據(jù)庫系統(tǒng)運行效率。常見的SQL優(yōu)化語句包括下面幾個:
為多個數(shù)據(jù)表建立索引結構、盡量避免語句操作在字符串查詢結構中包含多個模糊字母,并盡量使用讀操作模擬加鎖操作等。
數(shù)據(jù)庫系統(tǒng)的全部操作都是通過執(zhí)行SQL事務來完成的,其中不乏有簡單的增刪改查操作。因此,在很大程度上,Oracle數(shù)據(jù)庫的整體性能好壞決定SQL事務的運行效率,為了盡量提高SQL事務的運行效率,另外,編寫SQL語句應該關注下面的內(nèi)容:
①建立數(shù)據(jù)表分區(qū),減少全表掃描操作,占用系統(tǒng)內(nèi)存,實現(xiàn)數(shù)據(jù)分區(qū)查詢操作。
②對于常用數(shù)據(jù)表實現(xiàn)查詢操作,建立表索引以減少執(zhí)行的SQL事務數(shù)量。
③常用的多個數(shù)據(jù)表存儲到統(tǒng)一的數(shù)據(jù)塊中。
“以我觀物,萬物皆著我色彩”,這一段歌詞中豐富的典故使用加上恰如其分的修辭格使人們瞬間產(chǎn)生在“名落孫山”的秀才眼中世界原來是如此悲涼。
④在數(shù)據(jù)查詢時,針對需要多表連接查詢的數(shù)據(jù)操作需要有充分表連接條件。
優(yōu)化Oracle數(shù)據(jù)庫系統(tǒng)性能需要通過實踐積累經(jīng)驗、總結的改進過程,必須要熟悉影響數(shù)據(jù)庫整體性能的主要因素,針對影響因素而采取不同方案加以優(yōu)化系統(tǒng)性能,同時也要考慮到基于先進優(yōu)化技術對數(shù)據(jù)庫系統(tǒng)加以優(yōu)化操作,使得系統(tǒng)的整體性能達到最優(yōu)的狀態(tài)。
4.3 優(yōu)化數(shù)據(jù)庫系統(tǒng)內(nèi)存參數(shù)
SGA表示數(shù)據(jù)庫系統(tǒng)內(nèi)存的全局參數(shù)設置區(qū)。它能夠被服務器和聯(lián)網(wǎng)用戶所共享,其中:共享數(shù)據(jù)池、高速緩沖區(qū),日志訪問區(qū)。共享數(shù)據(jù)池是存放SQL事務和數(shù)據(jù)字典的空間。高速緩沖區(qū)的緩存空間越大,表示可容內(nèi)存數(shù)據(jù)多,磁盤I/O操作次數(shù)減少,數(shù)據(jù)庫性能就得到極大優(yōu)化;日志訪問區(qū)如果設置緩存區(qū)過小,會導致存儲空間不足的情況,降低數(shù)據(jù)庫系統(tǒng)的性能。
4.4 優(yōu)化數(shù)據(jù)庫緩沖區(qū)性能
為減少訪問磁盤I/O操作帶來的開銷,應優(yōu)化高速緩沖區(qū)的空間,使得進程盡量在高速緩沖區(qū)上獲取數(shù)據(jù),盡量減少用戶請求時發(fā)生等待時間。當加大BufferCache的存儲空間時,可以設置DB_ CACHE_SIZE參數(shù)變大,使用多個數(shù)據(jù)緩沖池時,緩存池中數(shù)據(jù)盡量保存在其中,通過使用多個數(shù)據(jù)緩沖池的目的是為了提高數(shù)據(jù)在高速緩存區(qū)上的命中率。
4.5 優(yōu)化磁盤I/O
數(shù)據(jù)庫要實現(xiàn)將最終數(shù)據(jù)存儲到物理磁盤上。因此,避免不了發(fā)生磁盤I/O讀寫操作,數(shù)據(jù)庫性能也因此受到影響,此時已經(jīng)消耗Oracle數(shù)據(jù)庫最多的操作時間,為了避免對系統(tǒng)性能帶來的影響,監(jiān)控磁盤I/O讀寫操作是非常關鍵的步驟。影響磁盤I/O讀寫操作包括:磁盤讀寫進程死鎖現(xiàn)象、I/O操作次數(shù)過多等。
4.6 磁盤碎片整理
磁盤數(shù)據(jù)碎片的產(chǎn)生由于刪除數(shù)據(jù)導致的,因為系統(tǒng)刪除數(shù)據(jù)操作出現(xiàn),系統(tǒng)數(shù)據(jù)存儲區(qū)域不斷發(fā)生變化,磁盤數(shù)據(jù)碎片分別為:表級碎片和索引級碎片。
①表級碎片由于設置合適的數(shù)據(jù)塊數(shù)量,由于數(shù)據(jù)庫的數(shù)據(jù)存儲是間斷的,在創(chuàng)建數(shù)據(jù)庫表結構時,根據(jù)用戶需求數(shù)據(jù)記錄大小來選擇相應的數(shù)據(jù)規(guī)模,提高系統(tǒng)中數(shù)據(jù)塊利用效率。
②索引級碎片是因為查詢表的索引結構過于頻繁而致,經(jīng)過B-TREE數(shù)據(jù)結構和葉子的數(shù)據(jù)排序而導致,可以減少查詢索引結構的數(shù)據(jù),尤其是系統(tǒng)中變化頻率較少數(shù)據(jù)塊,目的是降低索引碎片的形成。
軟件系統(tǒng)工程,需要工程師認真設計系統(tǒng)優(yōu)化問題,對數(shù)據(jù)庫性能進行優(yōu)化操作。Oracle數(shù)據(jù)庫性能優(yōu)化設計與優(yōu)化階段,需要在數(shù)據(jù)庫運行時不斷優(yōu)化系統(tǒng)的性能,為優(yōu)化一個高效的數(shù)據(jù)庫系統(tǒng)打下基礎。
[1]蓋國強.循序漸進Oracle數(shù)據(jù)庫管理、優(yōu)化與備份恢復[M].北京:人民郵電出版社,2007
[2]趙夢勤,李秀蘭.ORACLE數(shù)據(jù)庫應用系統(tǒng)的優(yōu)化策略[J].計算機工程與應用.2003(27):217-218