當前位置:吉日网官网 - 傳統節日 - 影響數據庫性能的主要因素是什麽?

影響數據庫性能的主要因素是什麽?

1,1,調整數據結構的設計。這部分是在開發信息系統之前完成的。程序員需要考慮是否使用ORACLE數據庫的分區功能,是否為頻繁訪問的數據庫表建立索引。\x0d\\x0d\2、2、調整應用結構設計。這部分也是在信息系統開發之前完成的。程序員需要考慮應用使用什麽樣的架構,是使用傳統的客戶端/服務器兩層架構,還是瀏覽器/Web/數據庫三層架構。不同的應用程序架構需要不同的數據庫資源。\x0d\\x0d\3、3、調整數據庫SQL語句。應用的執行最終會歸結到數據庫中SQL語句的執行,所以SQL語句的執行效率最終決定了ORACLE數據庫的性能。ORACLE建議使用ORACLE語句優化器和行級管理器來調整和優化SQL語句。\x0d\\x0d\4,4,調整服務器內存分配。在信息系統運行過程中優化內存分配,數據庫管理員可以根據數據庫的運行情況,調整數據庫系統全局區(SGA區)的數據緩沖區、日誌緩沖區和* * *共享池的大小。您還可以調整程序全局區(PGA區)的大小。需要註意的是,SGA面積越大越好。如果SGA面積過大,會占用操作系統使用的內存,造成虛擬內存的頁面交換,使系統降低。\x0d\\x0d\5、5、調整硬盤I/O,這壹步是在信息系統開發之前完成的。數據庫管理員可以將組成同壹個表空間的數據文件放在不同的硬盤上,以實現硬盤之間的I/O負載平衡。\x0d\\x0d\6,6。調整操作系統參數,比如運行在UNIX操作系統上的ORACLE數據庫,可以調整UNIX數據緩沖池的大小和每個進程可以使用的內存量。\x0d\\x0d\其實以上數據庫優化措施是相互關聯的。ORACLE數據庫的性能惡化基本上是用戶響應時間長,需要用戶長時間等待。但是,性能惡化的原因是多種多樣的,有時多個因素* * *導致性能惡化,這就要求數據庫管理員具備全面的計算機知識,對影響數據庫性能的主要原因保持敏感。此外,壹個好的數據庫管理工具對於優化數據庫性能也非常重要。\x0d\\x0d\ORACLE數據庫性能優化工具\x0d\\x0d\常用的數據庫性能優化工具有:\ x0d \ x0d \ 1,1,ORACLE數據庫在線數據字典,可以反映ORACLE的動態運行,對調整數據庫性能很有幫助。\x0d\\x0d\2、2、操作系統工具,如UNIX操作系統的vmstat和iostat,可以檢查系統級內存和硬盤I/O的使用情況,這些工具有時對於管理員發現系統瓶頸出現在哪裏很有用。\x0d\\x0d\3,3。SQL跟蹤工具,可以記錄SQL語句的執行。管理員可以使用虛擬表來調整實例,並使用SQL語句跟蹤文件來調整應用程序性能。SQL語言跟蹤工具將結果輸出到操作系統文件,管理員可以使用TKPROF工具查看該文件。\x0d\\x0d\4、4、ORACLE Enterprise Manager(OEM),這是壹個圖形化的用戶管理界面,用戶可以用它方便地管理數據庫,而不必記住復雜的ORACLE數據庫管理命令。\x0d\\x0d\5、5、解釋計劃——SQL語言優化命令,可以幫助程序員寫出高效的SQL語言。\x0d\\x0d\ Oracle數據庫的系統性能評估\ x0d \ \ x0d \不同類型的信息系統需要不同的數據庫參數。數據庫管理員需要根據自己的信息系統類型關註不同的數據庫參數。\ x0d \ x0d \ 1、1、聯機事務處理信息系統(OLTP),這類信息系統壹般需要大量的插入和更新操作,典型的系統有民航售票系統、銀行儲蓄系統等。OLTP系統需要確保數據庫最終用戶的並發性、可靠性和速度。這類系統使用的ORACLE數據庫主要考慮以下參數:\ x0d \ \ x0d \ l lIs數據庫回滾段夠用嗎?\ x0d \ \ x0d \ l您是否需要對ORACLE數據庫進行索引、聚合和哈希處理?\ x0d \ \ x0d \ l系統全局區域(SGA)大小夠嗎?\ x0d \ \ x0d \ l SQL語句高效?\x0d\\x0d\2、2、數據倉庫系統,這個信息系統的主要任務是從ORACLE的海量數據中進行查詢,得出數據之間的壹些規律。對於這種類型的ORACLE數據庫,數據庫管理員需要考慮以下參數:\ x0d \ x0d \ l l是采用B*-索引還是位圖索引?\ x0d \ \ x0d \ l lIs並行SQL查詢用於提高查詢效率?\x0d\\x0d\l l使用PL/SQL函數編寫存儲過程嗎?\ x0d \ x0d \ l l如果需要,需要建立並行數據庫,提高數據庫的查詢效率\ x0d \ x0d \ SQL語句的調整原則\ x0d \ x0d \ SQL語言是壹種靈活的語言,同樣的功能可以通過不同的語句實現,但是語句的執行效率卻有很大的不同。程序員可以使用EXPLAIN PLAN語句來比較各種實現方案,選擇最佳方案。壹般來說,程序員寫SQL語句需要滿足以下規則:\ x0d \ x0d \ 1,1,盡量使用索引。試比較以下兩條SQL語句:\ x0d \ x0d \語句a: select dname,dept from dept where dept not in \ x0d \ \ x0d \(select dept from EMP);\x0d\\x0d\語句b: select dname,deptno from dept where not exists \ x0d \ \ x0d \(select deptno from EMP where dept . deptno = EMP . deptno);\x0d\\x0d\這兩個查詢語句的結果是相同的,但是當執行語句A時,ORACLE將掃描整個emp表,而不使用在emp表上構建的deptno索引。執行語句B時,由於子查詢中使用了聯合查詢,所以ORACLE只掃描emp表的部分數據,使用deptno列索引,所以語句B的效率比語句a要高壹些\x0d\\x0d\2,2。選擇聯合查詢的聯合順序。考慮下面的例子:\ x0d \ x0d \ select stuff from tabaa,tabb,tabc \ x0d \ x0d \其中a . acol between:a high \ x0d \ AND b . bcol between:blow AND:b high \ x0d \ \ x0d \ AND c . ccol between:chlow AND:chigh \ x0d \ \ x0d \ AND a . key 1 = b . key 1 \ x0d \ \ x0d \ AMD a . key 2 = c\x0d\\x0d\在這個SQL例子中,程序員首先需要選擇要查詢的主表,因為主表要掃描全表數據,所以主表要有最小的數據,所以例子中表A中acol列的範圍要小於表B和表c中對應列的範圍\x0d\\x0d\3,3。在子查詢中小心使用IN或NOT IN語句,使用where (NOT) exists要好得多。\x0d\\x0d\4,4。謹慎使用視圖的聯合查詢,尤其是更復雜視圖之間的聯合查詢。壹般把視圖的查詢分解成數據表的直接查詢比較好。\x0d\\x0d\5,5。您可以在參數文件中設置SHARED_POOL_RESERVED_SIZE參數。該參數在SGA***共享池中保留連續的內存空間,這有利於存儲大型SQL包。\x0d\\x0d\6,6。ORACLE公司提供的DBMS_SHARED_POOL程序可以幫助程序員將壹些常用的存儲過程“釘”在SQL區,而不被換出內存。這有助於程序員將常用的存儲過程“固定”到內存中,以提高最終用戶的響應時間。\x0d\\x0d\CPU參數的調整\ x0d \ \ x0d \ CPU是服務器的重要資源,服務器良好的工作狀態是工作高峰時CPU利用率在90%以上。如果空閑時間CPU利用率在90%以上,說明服務器缺乏CPU資源。如果在工作高峰時CPU利用率仍然較低,說明服務器CPU資源還是相對過剩的。\x0d\\x0d\使用相同的命令查看CPU的使用情況。對於UNIX操作系統的服務器,可以使用sar _u命令查看CPU的使用情況,對於NT操作系統的服務器,可以使用NT性能管理器查看CPU的使用情況。\x0d\\x0d\數據庫管理員可以通過查看v$sysstat數據字典中的統計項“本次會話使用的CPU”來了解ORACLE數據庫使用的CPU時間,通過查看統計項“OS用戶級CPU時間”來了解操作系統用戶模式下的CPU時間。看“OS系統調用CPU時間”的統計,可以知道操作系統的系統模式下的CPU時間。操作系統的總CPU時間是用戶模式和系統模式時間的總和。如果ORACLE數據庫使用的CPU時間占操作系統總CPU時間的90%以上,說明服務器CPU基本上被ORACLE數據庫使用,這是合理的。相反,這意味著服務器CPU被其他程序占用,ORACLE數據庫無法獲得更多的CPU時間。\x0d\\x0d\數據庫管理員還可以查看v$sesstat數據字典,獲取當前連接ORACLE數據庫的每個會話占用的CPU時間,從而知道哪個會話消耗的服務器CPU更多。\ x0d \ \ x0d \資源不足的情況有很多:SQL語句的重解析、低效的SQL語句、鎖沖突都會造成CPU資源不足。\x0d\\x0d\1。數據庫管理員可以執行以下語句來檢查SQL語句的解析情況:\ x0d \ \ x0d \ select * from v $ sysstat \ x0d \ x0d \ where name in \ x0d \ \ x0d \(' parse time CPU。\x0d\\x0d\其中parse time cpu為系統服務時間,parse time elapsed為響應時間,用戶等待時間\ x0d \ x0d \ waite time = parse time elapsed _ parse time CPU \ x0d \ \ x0d \由此可以得到用戶SQL語句的平均解析等待時間= waitetime/parsecount。這個平均等待時間應該接近於0。如果平均解析等待時間過長,數據庫管理員可以使用下面的語句\ x0d \ \ x0d \ select SQL _ text,parse _ calls,executions from v $ sqlarea \ x0d \ x0d \ order by parse _ calls;\x0d\\x0d\找出哪些SQL語句解析效率比較低。程序員可以優化這些語句或增加ORACLE參數SESSION_CACHED_CURSORS的值。\x0d\\x0d\2。數據庫管理員也可以使用以下語句:\ x0d \ \ x0d \ select buffer _ gets,executions,SQL _ text from v $ sqlarea\x0d\\x0d\看看低效的SQL語句,優化這些語句也有助於提高CPU的利用率。\x0d\\x0d\3,3。數據庫管理員可以通過v$system_event數據字典中的“無閂鎖”統計項檢查ORACLE數據庫的沖突情況。如果沒有沖突,latch free將找不到結果。如果沖突太大,數據庫管理員可以減小spin_count參數的值,以消除高CPU利用率。\x0d\\x0d\內存參數的調整\x0d\\x0d\內存參數的調整主要是指ORACLE數據庫的系統全局區(SGA)的調整。SGA主要由三部分組成:* *共享池、數據緩沖區和日誌緩沖區。\x0d\\x0d\1,1,* *共享池由兩部分組成:* *共享SQL區和數據字典緩沖區,* *共享SQL區是存儲用戶SQL命令的區域,數據字典緩沖區存儲數據庫操作的動態信息。數據庫管理員執行以下語句:\ x0d \ x0d \ select(sum(pins-reloads))/sum(pins)" lib cache " from v $ library cache;\x0d\\x0d\檢查* * * SQL區域的利用率。這個利用率應該在90%以上,否則就需要增加* * *共享池的大小。數據庫管理員還可以執行以下語句:\ x0d \ x0d \ select(sum(gets-get misses-usage-fixed))/sum(gets)“row cache”from v $ row cache;\x0d\\x0d\檢查數據字典緩沖區的利用率,也應該在90%以上,否則需要增加* * *共享池的大小。\x0d\\x0d\2,2,數據緩沖區。數據庫管理員可以使用以下語句:\ x0d \ x0d \ select name,value from v $ sysstat where name in(' db block gets ',' consistent gets ',' physical reads ');\x0d\\x0d\檢查數據庫數據緩沖區的使用情況。查詢結果可以用來計算數據緩沖區的命中率= 1-(物理讀取/(db塊獲取+壹致獲取))。\x0d\\x0d\這個命中率應該在90%以上,否則需要增加數據緩沖區的大小。\x0d\\x0d\3,3,日誌緩沖區。數據庫管理員可以執行以下語句:\ x0d \ x0d \ select name,value from v $ sysstat where name in('重做條目','重做日誌空間請求');檢查日誌緩沖區的使用情況。查詢結果可以用來計算日誌緩沖區的應用失敗率:\ x0d \ x0d \應用失敗率= =requests/entries,應用失敗率應該接近0,否則日誌緩沖區太小,需要增加ORACLE數據庫的日誌緩沖區。
  • 上一篇:每天練壹次“中藥壹”——2065 438+09天津醫考執業藥師(2019.9.20)
  • 下一篇:熱巴拉傳統服裝
  • copyright 2024吉日网官网