□宋 萍 賈艷芳 董 晨 任利鋒
在實際的應用和開發過程中,數據庫性能通常受資源、并發活動、服務器等因素影響。其中吞吐量、響應時間、命中率、內存使用情況、磁盤I/O量是Oracle數據庫性能評價的一些主要評價指標。
(一)系統吞吐量。數據庫中的吞吐量直接影響到了用戶請求的執行時間,這個吞吐量是SQL語句的數量除以執行時所用時間得到的,因此吞吐量越小,表明系統在一定時間內執行結束的SQL語句越少,造成資源浪費。反之系統資源可以得到充分利用。可以通過用最少的時間完成更多的任務量或者減少總的用戶響應時間,從而減少總時間兩種辦法來增加數據庫系統的吞吐量。
(二)用戶響應時間。數據庫響應時間受許多方面的影響,分析SQL語句的響應時間,需要根據不同的應用環境與具體情況進行分析。可以通過減少等待時間和增加吞吐量從而實現提高性能或者通過減少用戶訪問同一數據庫造成沖突率。
(三)數據庫命中率。數據通過高速緩沖區進行存取,所以數據命中率直接影響了數據庫的性能。這個命中率是命中數/(命中數+沒有命中數)。數據庫命中率并非越大越好,有較高的水平并不能代表有良好的性質與效用。
(四)內存使用情況。合理的使用內存可以影響數據庫性能,如果可使用內存多,可有效提高數據庫的性能,減少或者消除瓶頸的產生。
(五)所需磁盤的I/O量。如果數據很分散,也會影響數據的查詢時間,從而導致用戶響應時間過長。降低用戶響應時所需的時間,也有效提高了用戶任務的數量并且可以通過降低I/O開銷從而實現增加用戶任務所需要的吞吐量。
想要優化數據庫的響應效率,就要先知道可以被優化的因素,影響數據庫效率的因素主要有以下幾點。
(一)硬件能力。硬件能力主要包括CPU、內存、輸入輸出和網絡因素。其中Oracle數據庫是一個多用戶的數據庫,對CPU性能要求更高,CPU的能力相對于其他因素起著主要作用,CPU的配置和處理能力直接影響了數據庫性能,導致CPU占用率過高的因素有很多,查詢語句的高并發是主要原因之一,這一點可以通過優化SQL語句或者調整CPU參數來解決。內存也是影響原因之一,內存越大,I/O響應時間越短。其中網絡I/O也是數據庫性能中的重要影響因素之一。
(二)系統環境。Oracle數據庫非常依賴于操作系統,系統環境主要是指數據庫的參數配置,如果系統環境配置不合理會影響數據庫性能,不恰當的參數配置可能會導致磁盤競爭、啟動時out of memory報錯等問題,嚴重影響數據庫系統的效率。配置參數主要由內存分配、I/O設置、回滾設置等組成。
(三)數據庫內部因素。主要是指索引、阻塞、等待、隱式轉換、參數嗅探和統計信息等因素索引在磁盤上占用空間,并且減慢插入、刪除和更新的速度,降低執行效率。所以給不常用的數據表建立索引不僅不能提高數據表的查詢效率,相反,會增加系統負擔以及維護成本。
(四)系統規模。并發量和數據量是指同一時間段內由于用戶訪問量過高而影響數據庫正常使用的情況,而解決并發問題可以通過分表、分流、橫向擴展等方法。
隨著當今對于數據庫系統的需求日益增高,對數據庫性能的要求也日益苛刻,從而要求從各個角度優化數據庫系統的性能,而影響數據庫系統效率的主要因素大致可分為三方面:一是CPU利用率方面,二是內存分配方向,三是SQL語句的優化方向。
(一)對于CPU利用率的優化。要想提高數據庫效率,對CPU的利用率的提高是必不可少的,CPU的使用狀態會對Oracle數據庫的總體響應時間產生極為重要的影響,從而影響數據庫的執行效率。CPU總需要運行的時間包括兩個方面,分別是CPU操作對于用戶來說響應的時間即os user level cpu time以及CPU對于系統操作進行響應的時間即os system call cpu time。通過研究可以發現,導致CPU資源利用率相對較低的原因較多,其中起著主要因素的一個原因是SQL語句較低的效率問題。開始需要知道的一點是,在對Oracle數據庫系統與之對應的應用程序進行統一調配的過程中,Oracle數據庫系統的CPU使用時間如果能夠達到CPU90%的全部使用時間或更多,那么就代表著Oracle數據庫系統與之對應的應用程序處于相對正常的執行狀態,star-u指令可以查看CPU當前的使用效率,主要作用就是對CPU作相應的運行記錄,當前需要注意的是,系統響應時間減去服務時間就是用戶等待時間的計算方式。
(二)對于內存分配的優化。Oracle的內存可以按照共享和私有的角度分為SGA和PGA(process global area or private global area),對內存的優化也主要從這兩方面著手,優化SGA可以通過調整其中的數據庫組件參數來達到提高系統響應效率的目的,其中對于參數Pre_page_sga的調整顯得尤為重要,該參數可以將整個SGA加載到物理內存中,從而有效提高系統執行效率。而PGA(Process Global Area)是為每個連接到Oracle database的用戶進程保留的內存。而上述兩種內存結構又包括很多方面,主要討論以下三方面的分析和調優。
1.對于共享池的優化。可以對SHARE_POOL_SIZE根據實際需要每個節點進行自定義調整,安置共享池的主要作用就是對于之前查詢過的LQS進行保存,從而提高二次查詢的相應速度,相應的,如果共享池容量過小,過多語言的載入就會影響系統的性能,反之,如果共享池容量過大,連僅執行一次的語句也要緩存,會造成不必要的浪費。
2.對緩沖區高速緩存的優化。調整數據緩沖區的容量大小有助于減少系統磁盤的I/O開銷,所以應對高速緩沖區進行優化,盡可能減小用戶請求響應時間,優化日志緩沖區之前,要了解日志緩沖區的運行情況,通過查詢結果來計算緩沖區的申請失敗率,了解了運行情況之后可以通過提高init.ora中的log_buffer的值來提高響應速度。
3.對日志緩沖區的優化。對于每個dml或ddl語句,Oracle服務器進程復制到重做日志緩沖區上,重做條目包含一些信息,用于重做或重構dml或ddl操作,用于占據日志緩沖區的連續的有序空間,并恢復數據庫,可以有效優化日志緩沖區。
(三)對于SQL語句的優化。對SQL語句的本質進行判斷,是優化SQL語句的前提,優化SQL語句有利于降低I/O請求,降低網絡占用率,可以從根本上提高數據庫效率。建立索引是一種良好的優化SQL語句的方案,通常,索引被建立在經常訪問的數據表中的主鍵上,使用索引查找要比全表掃描速度要快,所以應盡量減少全盤掃描的操作,在聯結多個表時也可以使用索引提高效率,通常在大型表中索引可以極大優化相應速度,但是索引需要定期維護,不恰當的索引會使響應速度變慢,有必要對索引進行定期重構。
對Oracle數據庫所對應應用系統的性能進行調整和優化需要結合相應的硬件環境,它貫穿在整個數據庫系統研發進程中,提升Oracle數據庫應用系統性能,保證業務處理穩定性始終是優化數據庫性能的主要目標,而上述三方面的優化途徑可以有效提高數據庫響應速度,從而提高系統性能。