系統瓶頸分析

系統瓶頸分析web

1、系統瓶頸分析示例算法

1sql

  交易的響應時間若是很長,遠遠超過系統性能需求,表示消耗CPU的數據庫操做,例如排序、執行aggregate functions(例如sam、min、max、count)等較多,能夠考慮是否有索引以及索引創建的是否合理;儘可能使用簡單的表聯接;水平分割大表格等方法來下降該值。數據庫

2數組

  分段排除錯誤。測試工具能夠模擬不一樣的虛擬用戶來單獨訪問web服務器、應用服務器和數據庫服務器,這樣就能夠在web端測出的響應時間減去以上各個分段測出的時間就能夠知道瓶頸在哪並着手調優。緩存

3服務器

  unix資源監控(NT操做系統同理)中指標內存頁交換速率(Paging rate),若是該值偶爾走高,代表當時有線程競爭內存。若是持續走高,則內存多是瓶頸。也多是內存訪問命中率低。「swap in rate」和「swap out rate」也有相似的解釋。網絡

4多線程

  unix資源監控(NT操做系統同理)中指標CPU佔用率(cpu utilization),若是該值持續超過95%,代表cpu是瓶頸,能夠考慮增長一個處理器或換一個更快的處理器。合理使用範圍在60%至70%。併發

5

  unix資源監控(NT操做系統同理)中指標磁盤交換率(Disk rate),若果該值參數值一直很高,代表I/O有問題。可考慮更換更快的硬盤系統、從新部署業務邏輯等,另外設置Tempdb in RAM,減低「max async IO」,「max lazy writer IO」等措施都會下降該值。

6

  tuxedo資源監控中指標列隊中的字節數(Bytes on queue),隊列長度應不超過磁盤數的1.5~2倍。要提升性能,可增長磁盤。注意:一個raid disk實際有多個磁盤。

7

  sqlserver資源監控中指標緩存點擊率(cache hit ratio),該值越高越好。若是持續低於80%,應考慮增長內存。注意該參數值是從sql server啓動後,就一直累加記數,因此運行一段時間後,該值不能反映系統當前值。

2、系統優化調整設置

一、CPU問題:

  考慮使用更高級的CPU代替當前的CPU。

  對於多CPU,考慮CPU之間的負載分配。

  考慮在其餘體系上設計系統,例如增長前置機,設置並行服務器等。

二、內存和高速緩存:

  內存的優化包括操做系統、數據庫、應用程序的內存優化。

  過多的分頁與交換可能下降系統的性能。

  內存分配也是影響系統性能的主要緣由。

  保證保留列表具備較大的鄰接內存塊。

  調整數據塊緩衝區大小(用數據塊的個數表示)是一個重要內容。

  將最頻繁使用的數據保存在存儲區中。

三、磁盤(I/O)資源問題

  磁盤讀寫進度對數據庫系統是相當重要的,數據庫對象在物理設備上的合理分佈能改善性能。

  磁盤鏡像會減慢磁盤寫的速度。

  經過把日誌和數據庫對象分佈在獨立的設備上能夠提升系統的性能。

  把不一樣的數據庫放在不一樣的硬盤上,能夠提升讀寫速度。常常把數據庫、回滾段、日誌放在不一樣的設備上。

  把表放在一塊硬盤上,把飛簇的索引放在另外一塊硬盤上,保證物理讀寫更快。

四、調整配置參數

  包括操做系統和數據庫的參數配置。

  並行操做資源限制的參數(併發用戶的數目、會話數)。

  影響資源開銷的參數。

  與I/O有關的參數。

五、優化應用系統網絡設置

  能夠經過數組接口來減小網絡呼叫。不是一次提取一行,而是在單個往來往返中提取10行,這樣作效率較高。

  調整會話數據單元的緩衝區大小。

  共享服務器進程比專用服務進程提供較好的性能。

3、數據庫服務器性能問題及緣由分析

一、單一類型事務響應時間過長

  數據庫服務器負載、糟糕的數據設計、事務粒度過大、批任務對普通用戶性能的影響。

二、併發處理能力差

三、鎖衝突嚴重

  資源鎖定形成的數據庫事務超時、數據庫死鎖。

4、數據庫相關

一、數據庫性能問題的通常解決辦法

  監視性能相關數據。

  定位資源佔用較大的事務並作出必要的優化或調整。

  定位鎖衝突,修改鎖衝突發生嚴重的應用邏輯。

  對規模較大的數據或者沒法經過通常優化解決的鎖衝突進行分佈。

二、oracle與提升性能有關的特性

  索引、並行執行、簇與散列簇、分區、多線程服務器、同時讀取多塊數據。

三、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:這個參數指定了恢復數據庫系統時使用的進程數。

四、oracle的並行執行特性

RDBMS的絕大多數操做均可以分爲如下3類:

         被CPU限制的操做:這類操做的速度和單CPU運行的速度同樣。經過並行化操做,多個CPU可並行處理系統負載,由於能夠更快完成該操做。

         被I/O限制的操做:這類操做花了絕大部分時間等待系統完成I/O操做。當系統中同時出現多個I/O請求時,絕大多數RAID控制器將很好工做。另外,當一個線程須要等待完成I/O操做時,可充分利用CPU來處理另外一個線程的CPU部分。

         被競爭限制的操做:並行處理不能改善由資源競爭所限制的操做。

五、應當首先根據以下一些因素考慮並行度:

         計算機的CPU能力:CPU的數量和能力將影響系統能運行的查詢進程數量。

         系統處理大量進程的能力:一些操做系統能處理不少併發線程,而另外一些操做系統則沒有這方面的能力。

         系統負載:若是系統如今的運行已經達到了極限,那麼對並行度的調整不會有太大的效果。若是系統運行已達其能力極限的90%,那麼大多的查詢進程將使系統不堪重負。

         系統處理的查詢數量:若是系統的大部分操做是更新操做,但仍有少許的重要查詢存在,那麼開發人員可能但願系統運行多個查詢進程。

         系統的I/O能力:若是磁盤上的數據是分片或是使用磁盤陣列存儲的,那麼系統可以處理多個並行查詢。

         操做類型:系統是否須要處理不少的全表掃描或排序:並行查詢服務器很是有助於這類操做。

六、關於並行度的一些建議:

  諸如排序之類的須要大量CPU資源的操做應當使用較低的並行度。其緣由是這類受限於CPU的操做已經充分利用的CPU,而不須要等待系統的I/O操做。

  諸如全表掃描之類的須要大量磁盤I/O的操做應當採用較高的並行度。須要等待磁盤I/O的操做越多,系統就越能受益於並行操做。

  若是系統中有大量的併發進程,那麼應當採用較低的並行度。由於太多的進程將使系統不堪重負。

七、Oracle同時讀取多塊數據

  當系統執行表掃描時,oracle具有同時讀取多個數據塊的能力,這種能力提升了系統的I/O速度。經過同時讀取多塊數據,oracle可以從磁盤上讀取更大的數據塊,從而避免了對磁盤上數據進行搜索的操做。經過下降磁盤搜索和讀取更大的數據塊,能夠下降系統的I/O開銷和CPU開銷。

八、oracle 的分區

分區方案:

  Range Partitioning:這種方案根據數據的範圍,好比月、年等對錶中的數據進行分區。

  List Partitioning:這種方案和Range Partitioning分區方案很相似,但這種方案是按照數據的值而不是數據的範圍來進行分區劃分的。

  Hash Partitioning:這種分區方案使用散列函數來實現對數據的自動分區。

  Sub-Partitioning:這種方法就是開發人員熟悉的複合分區方法。這種方法容許開發人員同時使用多種分區方案。

分區有如下幾方面的好處:

  對能被分區的大尺寸表進行掃描時,分區可下降I/O操做和CPU的使用率。

  可在分區的層次上而不是表的層次上加載數據。

  能以刪除分區的方式刪除數據,而沒必要使用select語句來刪除大量數據。

  對用戶和應用程序而言,分區是徹底透明的。

  可在分區層次上而不是在表層次上維護數據。

九、oracle的多線程服務器

  用戶能夠經過專用服務器進程鏈接到oracle實例,也能夠經過多線程服務器進程鏈接到oracle實例。由於每個專用的服務器進程都將佔用大量的內存資源和系統資源,因此有必要對多用戶鏈接採用多線程服務器進程。

  多線程服務器進程容許多個用戶使用必定數量的共享服務器進程。共享服務器進程使用共享緩衝池對用戶請求進行排隊並返回數據,從而大大減小CPU和內存的使用。

十、oracle故障診斷

  數據庫故障診斷經過得到系統sql語句執行性能數據,例如每一條sql語句在oracle數據庫中執行的平均時間,來識別問題發生位置。

  爲了分析故障位置,將故障診斷數據(oracle Diagnostics)與交易執行響應時間(Transaction Response Time)數據關聯起來。例如:某交易「enter」的平均響應時間高,使用故障診斷(Oracle diagnostics),就能夠查找到是什麼緣由致使了這個問題。

相關文章
相關標籤/搜索