1、cpu問題
考慮使用更高的cpu代替當前cpu。
對於多cpu,考慮cpu之間的負載分配
考慮在其他體系上設計系統,當前值。
2、內存和高速緩存
內存的優化包括操作系統,數據庫,應用程序的內存優化。
過多的分頁與交換可能降低系統的性能。
內存分配也是影響系統性能的主要原因。
保證保留列表具有較大的鄰接內存塊。
調整數據塊緩衝區大小(用數據塊的個數表示)是一個重要內容。
將最頻繁的使用數據保存在存儲區中。
3、磁盤(I/O)資源問題
磁盤讀寫進度對數據庫系統至關重要的,數據庫對象在物理設備上的合理分佈能改善性能。
磁盤鏡像會減慢磁盤寫的速度。
通過把日誌和數據庫對象分佈在不同的硬盤上,可以提高系統的性能。
把不同的數據放在不同的硬盤上。可以提高讀寫速度。經常把數據庫,回滾段、日誌放在不同的設備上。
把表放在一塊硬盤上,把飛簇的索引放在另一塊硬盤上,保證物理讀寫更快。
4、優化應用系統網絡設置
可以通過數組接口來減少網絡呼叫。不是一次提取一行,而是在單個往來往返中提取10行,這樣做效率較高
並行操作資源限制參數(併發用戶的數目、會話數)。
影響資源開銷的參數。
與I/O有關的參數
5、優化應用系統網絡設置
可以通過數組接口來減少網絡呼叫。不是一次提取一行,而是在單個往來往返中提取10行,這樣做效率較高。
調整會話數據單元的緩衝區大小。
共享服務器進程比專用服務進程提供較好的性能。
三、數據庫服務器性能問題及原因分析
1、單一類型事務響應時間過長
數據庫服務器負載、糟糕的數據設計、事務粒度過大、批任務對普通用戶性能的影響。
2、併發處理能力差
3、鎖衝突嚴重
資源鎖定造成的數據庫事務超時、數據庫死鎖。
四、數據庫相關
1、數據庫性能問題的一般解決辦法
監視性能相關數據。
定位資源佔用較大的事務並做出必要的優化或調整。
定位鎖衝突,修改鎖衝突發生嚴重的應用邏輯。
對規模較大的數據或者無法通過一般優化解決的鎖衝突進行分佈。
2、oracle與提高性能有關的特性
索引、並行執行、簇與散列簇、分區、多線程服務器、同時讀取多塊數據。
3、oracle配置的關鍵參數
MAX_DSPATCHERS:這個參數指定了系統允許同時進行的調度進程的最大數量。
MAX_SHARED_SERVERS:這個參數指定了系統允許同時進行的共享服務器進程的最大數量。如果系統中出現的人爲死鎖過於頻繁,那麼管理員應該增大這個參數的值。
PARALLEL_ADAPTIVE_MULTI_USER:當這個參數的值爲TRUE時,系統將啓動一個能提高使用並行執行的多用戶系統性能的自適應算法。這個算法將根據查詢開始時的系統負載自動降低查詢請求的並行度。
PARLLEL_MIN_SERVERS:這個參數指定了實例並行執行進程的最小數量。其值就是實例啓動時Oracle創建的並行執行進行數。
PARLLEL_THREADS_PER_CPU:這個參數指定了實例默認的並行度和並行自適應以及負載平很算法。它指明瞭並行執行過程中一個CPU能處理的進程或線程數。
PARTITION_VIEW_ENABLED:這個參數指定了優化器是否使用分區視圖。oracle推薦用戶使用分區表(這個在oracle8之後引入的)而不是分區視圖。分區視圖只是爲了提供oracle的後向兼容性。
REVOVERY_PARALLELISM:這個參數指定了恢復數據庫系統時使用的進程數。
4、oracle的並行執行特性
RDBMS的絕大多數操作都可以分爲以下3類:
被CPU限制的操作:這類操作的速度和單CPU運行的速度一樣。通過並行化操作,多個CPU可並行處理系統負載,因爲可以更快完成該操作。
被I/O限制的操作:這類操作花了絕大部分時間等待系統完成I/O操作。當系統中同時出現多個I/O請求時,絕大多數RAID控制器將很好工作。另外,當一個線程需要等待完成I/O操作時,可充分利用CPU來處理另一個線程的CPU部分。
被競爭限制的操作:並行處理不能改善由資源競爭所限制的操作。
5、應當首先根據如下一些因素考慮並行度:
計算機的CPU能力:CPU的數量和能力將影響系統能運行的查詢進程數量。
系統處理大量進程的能力:一些操作系統能處理很多併發線程,而另一些操作系統則沒有這方面的能力。
系統負載:如果系統現在的運行已經達到了極限,那麼對並行度的調整不會有太大的效果。如果系統運行已達其能力極限的90%,那麼大多的查詢進程將使系統不堪重負。
系統處理的查詢數量:如果系統的大部分操作是更新操作,但仍有少量的重要查詢存在,那麼開發人員可能希望系統運行多個查詢進程。
系統的I/O能力:如果磁盤上的數據是分片或是使用磁盤陣列存儲的,那麼系統能夠處理多個並行查詢。
操作類型:系統是否需要處理很多的全表掃描或排序:並行查詢服務器非常有助於這類操作。
6、關於並行度的一些建議:
諸如排序之類的需要大量CPU資源的操作應當使用較低的並行度。其原因是這類受限於CPU的操作已經充分利用的CPU,而不需要等待系統的I/O操作。
諸如全表掃描之類的需要大量磁盤I/O的操作應當採用較高的並行度。需要等待磁盤I/O的操作越多,系統就越能受益於並行操作。
如果系統中有大量的併發進程,那麼應當採用較低的並行度。因爲太多的進程將使系統不堪重負。
7、Oracle同時讀取多塊數據
當系統執行表掃描時,oracle具備同時讀取多個數據塊的能力,這種能力提高了系統的I/O速度。通過同時讀取多塊數據,oracle能夠從磁盤上讀取更大的數據塊,從而避免了對磁盤上數據進行搜索的操作。通過降低磁盤搜索和讀取更大的數據塊,可以降低系統的I/O開銷和CPU開銷。
8、oracle 的分區
分區方案:
Range Partitioning:這種方案根據數據的範圍,比如月、年等對錶中的數據進行分區。
List Partitioning:這種方案和Range Partitioning分區方案很類似,但這種方案是按照數據的值而不是數據的範圍來進行分區劃分的。
Hash Partitioning:這種分區方案使用散列函數來實現對數據的自動分區。
Sub-Partitioning:這種方法就是開發人員熟悉的複合分區方法。這種方法允許開發人員同時使用多種分區方案。
分區有以下幾方面的好處:
對能被分區的大尺寸表進行掃描時,分區可降低I/O操作和CPU的使用率。
可在分區的層次上而不是表的層次上加載數據。
能以刪除分區的方式刪除數據,而不必使用select語句來刪除大量數據。
對用戶和應用程序而言,分區是完全透明的。
可在分區層次上而不是在表層次上維護數據。
9、oracle的多線程服務器
用戶可以通過專用服務器進程連接到oracle實例,也可以通過多線程服務器進程連接到oracle實例。因爲每一個專用的服務器進程都將佔用大量的內存資源和系統資源,所以有必要對多用戶連接採用多線程服務器進程。
多線程服務器進程允許多個用戶使用一定數量的共享服務器進程。共享服務器進程使用共享緩衝池對用戶請求進行排隊並返回數據,從而大大減少CPU和內存的使用。
10、oracle故障診斷
數據庫故障診斷通過獲得系統sql語句執行性能數據,例如每一條sql語句在oracle數據庫中執行的平均時間,來識別問題發生位置。
爲了分析故障位置,將故障診斷數據(oracle Diagnostics)與交易執行響應時間(Transaction Response Time)數據關聯起來。例如:某交易“enter”的平均響應時間高,使用故障診斷(Oracle diagnostics),就可以查找到是什麼原因導致了這個問題。