摘 要:移動公司的渠道管理系統是為了滿足復雜的酬金結算、考核表上報、渠道信息管理等而建設的。隨著業務量增大,數據庫在運行一段時間后會出現一定的性能問題,因此,對數據庫系統的性能調整變得尤為重要。文章通過對移動渠道管理系統所使用的Oracle數據庫進行優化實踐的分析,討論了優化的幾種有效方法。
關鍵詞:Oracle數據庫;索引;硬解析
引言
Oracle數據庫以支持大數據量、多用戶、高并發事務處理等優勢,越來越多的被應用在大型企業,如電信、銀行、電力等部門,隨著高訪問量所帶來的壓力逐漸增大,系統會出現吞吐量低,響應時間長等性能問題,為了解決這個問題有必要對數據庫進行優化,數據庫的優化可從兩方面進行分析研究,制定出優化策略。
1 影響Oracle數據庫系統性能的因素
Oracle數據庫性能問題受到多方面因素影響,包括硬件環境,網絡I/O,應用程序規范,數據庫參數配置,行遷移等
(1)數據庫服務器硬件環境:cpu,內存,網絡傳輸狀況等方面均會影響oracle的性能。
(2)數據庫參數配置:Oracle數據庫為用戶提供了大量的參數配置,根據具體的應用環境,調整參數配置,可以使數據庫達到更優,相反,錯誤的參數配置可能令數據庫性能低下。
(3)網絡I/O:計算機的輸入輸出(I/O)是很耗時的系統行為,I/O優化就是通過一定的措施減少I/O消耗時間。
(4)應用程序的實現:對于程序員而言,不合理的sql語句書寫直接影響到Oracle數據庫的性能,且后期更改難度大。如書寫sql語句不使用綁定變量,會使數據庫出現大量的硬解析,從而影響數據庫性能。
(5)行遷移:表中存在的數據,在update操作過程中,行可能會變長,此時,行會使用數據塊內的剩余空間,當數據塊內沒有剩余空間的時候,數據會選擇新的數據塊進行存放,行頭會保留在原數據塊中,指針指向新的數據塊內的行,造成讀取數據的時候產生兩次I/O,下降了數據庫的性能。
2 數據庫優化
2.1 內存區調整
(1)在Oracle 10g以及以上版本,提供了內存的自動管理,Oracle會根據應用的特點和服務器本身環境自動調整內存,SGA_TARGET參數就決定了是否使用SGA自動管理,該參數不為0時為自動管理,該參數為動態管理。
(2)將數據常駐內存:在生產數據庫中,有些經常被訪問的小表,可以將其常駐在內存中,以避免對該表訪問時頻繁產生磁盤I/O,以空間換時間,使響應速度增大。具體方法:
SQL> alter system set db_keep_cache_size = 200M;//開辟出200M的常駐區域;
SQL> alter table t1 storage (buffer_pool keep);//把表t1常駐在內存中。
2.2 磁盤I/O調整
(1)分開存儲數據文件和索引文件。Oracle數據庫在提取數據的時候會去索引和數據文件里讀數據,將這兩個文件分開存放在不同的硬盤上可以增加讀取速度以提高性能。
(2)日志文件的存放位置。日志文件寫操作比較頻繁,可以選擇存儲在固態硬盤等高速存儲上。
(3)使用分區來避免磁盤爭用。當一個表很大的時候,如:1GB(具體和環境有關),可以考慮分區,把一個表的分區存放在不同的磁盤上,吞吐量可以大大增加。分區的類型有多種,如范圍分區、哈希分區、組合分區、列表分區。
2.3 回滾段設置
回滾段保存著數據更新的前映像,當事物回滾時會用到此前映像,原則上講,建議每個回滾段能同時進行4個事物處理,但也應該根據系統需求來設定回滾段的數目。
2.4 碎片整理
SQL> ALTER TABLE T1 ENABLE ROW MOVEMENT;//允許表T1 可以在線回收碎片
SQL> ALTER TABLE T1 SHRINK SPACE;//進行空間回收
2.5 處理行遷移
利用移動表的存放位置來消除行遷移,操作語句為:
SQL> ALTER TABLE T1 MOVE TABLESPACE tablespace_name;
此操作會使T1表在數據庫中重新碼放,但是索引會失效,注意要重建索引。
2.6 綁定變量
移動渠道管理系統是OLTP(On-Line Transaction Processing聯機事務處理)系統,綁定變量是OLTP很受關注的一個技術點,OLTP數據庫系統中大量的sql語句并發執行,速度飛快,內存效率極高,綁定變量后會減少大量的sql語句解析消耗,從而減少數據庫壓力。
2.7 索引的建立與維護
索引是將無序的數據有序化,這樣可以在查詢數據的時候減少數據塊的讀取,實現快速定位數據。數據庫自動維護索引,但隨著大量的增刪改操作,索引會產生許多空洞,可以采用合并或重建索引的方法進行優化,以提高訪問速度。操作命令為:
SQL> ALTER index index1 coalesce;//合并索引的空洞
SQL> ALTER index index1 rebuild;//索引的重建
合并并不釋放索引段所擁有的空間,不處理正在變化的行,重建只能在沒有事物的情況下進行,如果有未提交的事物,則會報錯。
3 Oracle常用優化工具
(1)Oracle數據庫數據字典和動態性能視圖,Oracle動態性能視圖能反映出Oracle動態運行情況,對于數據庫的性能調整很有幫助。
(2)Oracle Statspack是DBA用來診斷數據庫的工具,在Oracle8i已經被引入,并經過多次調整增加的許多強有力功能,可以幫助DBA迅速定位數據庫瓶頸所在。此工具腳本存放在$ORACLE_HOME/RDBMS/ADMIN目錄下,spcreate.sql為建立用戶和表腳本,以后采集的數據庫信息會放在這個用戶和表內。spreport.sql為收集快照腳本。
(3)Oracle AWR(automatic workload repository自動工作負載信息庫),Oracle建議用戶用這個取代statspack,AWR實質是Oracle的一個內置工具,它采集與性能相關的統計數據,并從那些統計數據中導出性能量度,以跟蹤潛在問題。它產生兩種類型的輸出,文本格式和HTML格式,提供了非常友好的用戶報表。此工具腳本存放在$ORACLE_HOME/RDBMS/ADMIN目錄下,名字為awrrpt.sql。在sqlplus下可以直接執行,如:SQL>@$ORACLE_HOME/RDBMS/ADMIN/awrrpt.sql
(4)Oracle ASH(Active Session History),此工具從Oracle10gR2開始引入,和AWR相比,ASH側重于當前活動回話的信息分析,Oracle每秒鐘會對數據庫中活動的回話信息進行采樣,這些信息被存放在一個動態循環使用的內存區域中(位于SGA區),此區域是循環使用的,數據庫活動越頻繁,老的數據越會被快速覆蓋掉。軟件包也存放在$ORACLE_HOME/RDBMS/ADMIN目錄下,名字為ashrpt.sql。
4 結束語
文章針對移動渠道管理系統數據庫性能調整的實踐經驗,總結了導致數據庫性能下降的原因和優化方法,數據庫性能問題在最近幾年越來越受到DBA的關注,只有在實踐中反復實驗調整,才能使數據庫系統獲得最優性能。
參考文獻
[1][美]Richard J·Niemiec,Oracle 10g Performance Tuning Tips Techniques[M].北京:清華大學出版社,2010.
[2]譚懷遠.讓Oracle跑的更快,Oracle 10g性能分析與優化思路[M].北京:電子工業出版社,2010.
作者簡介:侯立根(1983-),河北邯鄲人,河北工程大學信電學院碩士研究生。