1. 程式人生 > >Oracle效能分析11:系統統計資訊

Oracle效能分析11:系統統計資訊

早期Oracle查詢優化器的開銷計算是基於執行SQL語句所需要的物理讀,這個方法被叫做I/O開銷模式(I/O cost model),這個方法的主要缺點是認為單塊讀和多塊讀開銷相當。在Oracle 8i中,初始化引數optimizer_index_caching和optimizer_index_cost_adj解決了這個問題,但引數的預設值僅適用於報告系統和資料倉庫。直到Oracle 9i,ORacle引入了一種新的CPU開銷模式(CPU cost model),消除了這個缺陷,但必須提供資料庫引擎所在的系統的效能資訊,即系統統計資訊。這篇文章將介紹系統統計資訊和收集系統統計資訊的方法。

系統統計資訊

系統統計資訊放在表aux_stats$中,可以通過下面的方法檢視該檢視中的資料(需要DBA使用者或者有該表的檢視許可權):

select * from aux_stats$;

SNAME			PNAME		PVAL1				PVAL2
---------------------------------------------------------------------
SYSSTATS_INFO	STATUS							COMPLETED
SYSSTATS_INFO	DSTART							08-30-2005 15:04
SYSSTATS_INFO	DSTOP							08-30-2005 15:04
SYSSTATS_INFO	FLAGS		1
SYSSTATS_MAIN	CPUSPEEDNW	484.974958263773
SYSSTATS_MAIN	IOSEEKTIM	10
SYSSTATS_MAIN	IOTFRSPEED	4096
SYSSTATS_MAIN	SREADTIM
SYSSTATS_MAIN	MREADTIM
SYSSTATS_MAIN	CPUSPEED
SYSSTATS_MAIN	MBRC
SYSSTATS_MAIN	MAXTHR
SYSSTATS_MAIN	SLAVETHR

表中的資料包括3個部分,使用SNAME區分:

1)SYSSTATS_INFO表示系統統計資訊狀態和時間
STATUS在正確收集時為COMPLETED;如果出現問題,顯示為BADSTATS,在這種情況下查詢優化器將不使用統計資訊;該欄位還可以為:MANUALGATHERING和AUTOGATHERING。

2)SYSSTATS_MAIN表示系統統計資訊結果集
該部分的資訊分為非工作量統計資訊(noworkload statistics)和工作量統計資訊(workload statistics),兩者的主要差別是度量I/O子系統效能的方法有所不同,後面具體討論。
非工作量統計在Oracle 10g之後總是提供,包括:

CPUSPEEDNW	一個CPU一秒鐘能處理的運算元,單位百萬次/秒
IOSEEKTIM	平均磁碟尋道時間,單位毫秒,預設10
IOTFRSPEED	平均每毫秒從磁碟傳輸的位元組數,預設為4096

工作量統計資訊必須顯示地收集後才可用,包括:

SREADTIM	單塊資料平均讀取時間,單位毫秒
MREADTIM	多塊資料平均讀取時間,單位毫秒
CPUSPEED	一個CPU一秒鐘能處理的運算元,單位百萬次/秒
MBRC		一次多塊讀操作的平均讀取資料塊數
MAXTHR		整個系統的最大I/O吞吐量(位元組/秒)
SLAVETHR	並行處理中從屬執行緒的平均I/O吞吐量(位元組/秒)

3)SYSSTATS_TEMP用來計算系統統計資訊,只有收集工作量統計資訊時才可用

收集系統統計資訊

使用工具包dbms_stats中的儲存過程gather_system_stats收集系統統計資訊,可以收集非工作量統計資訊或者工作量統計資訊。

非工作量統計資訊

從Oracle 10g開始,總是提供預設的非工作量統計資訊,如果顯式地刪除,下次資料庫啟動時會自動收集。收集非工作量統計資訊要在空閒的系統上進行,使用那個下面的語句:

begin
  dbms_stats.gather_system_stats(gathering_mode => 'noworkload');
end;

收集非工作量統計資訊只需要很短的時間,但有時需要重複收集多次才能生效。

工作量統計資訊

收集工作量統計資訊,不能使用空閒的系統,以為資料庫引擎要利用正常的資料庫負載來評估I/O子系統的效能。
工作量統計資訊的收集包含下面的步驟:

1)執行快照並存儲各種效能指標的初始值到資料字典表aux_stats$(列SNAME設定為SYSSTATS_TEMP)。使用下面的方式來啟動:

begin
  dbms_stats.gather_system_stats(gathering_mode => 'start');
end;

2)等待足夠的時間產生一個有代表性的負載時候再進行另一次快照,等待時間通常不少於30分鐘;

3)進行第二次快照,使用下面的語句:

begin
  dbms_stats.gather_system_stats(gathering_mode => 'stop');
end;

4)Oracle根據兩次快照之間的差值,計算出系統統計資訊,如果無法計算的話,將被設定為空。

你也可以指定gathering_mode為interval,並指定間隔時間來收集工作量統計時間,這樣就不用手工停止快照,下面的命令指定30分鐘後進行第二次快照:

begin
  dbms_stats.gather_system_stats(gathering_mode => 'interval',
                                 interval       => 30);
end;

需要注意上面的語句並不會延續30分鐘,它只是啟動一個作業排程後返回。
使用工作量統計資訊需要儘量避免收集到沒有代表性的工作量資訊,可以收集多天的工作量統計資訊,然後將mbrc、mreadtim、sreadtim和cpuspeed指標取平均值,maxthr和slavethr取最大值,再使用delete_system_stats過程刪除舊的系統統計資訊,然後使用set_system_stats設定新的系統統計資訊,儲存過程如下:

begin
  dbms_stats.delete_system_stats();
  dbms_stats.set_system_stats(pname => 'CPUSPEED', pvalue => 772);
  dbms_stats.set_system_stats(pname => 'SREADTIM', pvalue => 5.5);
  dbms_stats.set_system_stats(pname => 'MREADTIM', pvalue => 19.4);
  dbms_stats.set_system_stats(pname => 'MBRC', pvalue => 53);
  dbms_stats.set_system_stats(pname => 'MAXTHR', pvalue => 1136136192);
  dbms_stats.set_system_stats(pname => 'SLAVETHR', pvalue => 16870400);
end;

相關推薦

Oracle效能分析11系統統計資訊

早期Oracle查詢優化器的開銷計算是基於執行SQL語句所需要的物理讀,這個方法被叫做I/O開銷模式(I/O cost model),這個方法的主要缺點是認為單塊讀和多塊讀開銷相當。在Oracle 8i中,初始化引數optimizer_index_caching和optim

ORACLE analyse table方式收集表統計資訊導致SQL執行計劃不準確而效能下降

   最近,遇到一客戶,反饋業務響應慢,經過分析後最後鎖定到平時執行不到1秒的SQL語句,今天突然執行時間變成 半分鐘。處理過程如下:     取問題時段的AWR,檢視資料庫負載,發現數據庫負載不高:     檢視資料庫頂級等待事件,發現是檔案離散讀,基本可以鎖定是

shell實用技巧檔案統計資訊和銀行賬戶管理系統

需求        寫一個shell程式命名為wc.sh,統計檔案字元數、行數和單詞數。        寫一個shell程命名為bank.sh,完成以下功能:退出、存款、取款、新增賬戶、刪除賬戶、查詢賬戶、顯示所有賬戶,所有資訊儲存在account.dat檔案中,每次操作會實

Oracle效能分析開啟SQL跟蹤和獲取trace檔案|trace檔案解讀

Oracle效能分析1:開啟SQL跟蹤和獲取trace檔案 當Oracle查詢出現效率問題時,我們往往需要了解問題所在,這樣才能針對問題給出解決方案。Oracle提供了SQL執行的trace資訊,其中包含了SQL語句的文字資訊,一些執行統計,處理過程中的等待,以及解析階段(

c實用技巧檔案統計資訊和銀行賬戶管理系統

需求        寫一個shell程式命名為wc,統計檔案字元數、行數和單詞數。        寫一個shell程命名為bank,完成以下功能:退出、存款、取款、新增賬戶、刪除賬戶、查詢賬戶、顯示所有賬戶,所有資訊儲存在account.dat檔案中,每次操作會實時更新acc

效能調優11查詢統計

資料庫引擎的工作流程可以歸納為接收請求、執行請求和返回結果。資料庫引擎每接收到一個新的查詢請求(Query Request),查詢優化器就會執行以下工作流程:編譯請求,生成執行計劃,並把執行計劃快取到記憶體中,執行計劃,最後向客戶端返回查詢的結果。把執行計劃儲存到記憶體的目的是為了複用執行計劃,減少編譯查詢請

網站流量與效能分析指標PV/UV/PR/IP/QPS/併發數/吞吐量/響應時間

QPS: 每秒查詢率(Query Per Second) ,每秒的響應請求數,也即是最大吞吐能力。 QPS = req/sec = 請求數/秒 QPS統計方式 [一般使用 http_load 進行統計] QPS = 總請求數 / ( 程序總數 * 請求時間 ) QPS:

Oracle收集表的資料與統計資訊差異

drop table gather_tcount; create table gather_tcount (   TABLE_NAME  VARCHAR2(30) not null,   gather_time date,   num_rows    number,   user_table_num_rows

Android系統資訊獲取 之四系統語言資訊獲取

Android系統的當前系統語言,可以通過Locale類獲取,主要方法:Locale.getDefault().getLanguage(),返回的是es或者zh;通過Locale.getDefault().getCountry()獲取當前國家或地區,返回為CN或US;如果當前手機設定為中文- 中國,則使

php效能分析利器xhprof

xhprof是facebook團隊開發的用於研究php效能的擴充套件,並且提供了圖形化的介面展示效能引數和過程。對於各種php的專案的效能瓶頸研究有一定幫助,值得一用。 我在上一篇《Dockerfile搭建極簡LNMP環境》一文中已經建立好了LNMP環境,下面是基於這個容器進行xhprof的安裝和使用。 1

第一次作業基於Linux0.11操作系統的進程模型分析

機制 中斷處理程序 soft page tab nr_open sched move 關閉 1.前言 本文基於Linux0.11操作系統的源代碼,分析其進程模型。 Linux0.11下載地址:https://zhidao.baidu.com/share/20396e1704

systemd-analyze – 在Linux中查詢系統啟動效能統計資訊

您是否在使用 systemd 系統和服務管理器,並且您的 Linux 系統需要較長時間才能啟動,或者您希望檢視系統啟動效能的報告? 如果是的話,你已經登陸了正確的地方。 在本文中,我們將向您展示如何使用systemd-analyze來分析 Linux 系統啟動效能統計資訊, system

系統技術非業餘研究 » Iostat看不到裝置統計資訊的原因分析

最近在把玩些高速的SSD和nvram裝置的時候,發現iostat無法統計到這些裝置的資訊,很是奇怪,於是分析和總結了一把,挺有意思的。 現象描述如下: # uname -a Linux dr4000 2.6.32-131.17.1.el6.x86_64 #1 SMP Wed Oct 5 17:1

效能調優分析Oracle SQL執行計劃報告生成器

Oracle SQL執行計劃分析器功能的建立3步曲: 1 首先,編譯XYG_ALD_SESS_PKG的Package頭。 (XYG_ALD_SESS_PKG.sql) 2 接著要建立好下面的4個檢視物件。因為XYG_ALD_SESS_PKG包體會用到。(V

Oracle效能優化之統計分析

        Statistic 對oracle 是非常重要的。 它會收集資料庫中物件的詳細資訊,並存儲在相應的資料字典裡。 根據這些統計資訊, optimizer 可以對每個SQL 去選擇最好的執行計劃。所以我們每天應該設定一個計劃來定時統計分析相關資訊。具體計劃如下:

Ubuntu16.04系統下 解決“無法獲得鎖 /var/lib/dpkg/lock -open (11資源暫時不可用)、無法鎖定管理目錄(/var/lib/dpkg/),是否有其他進程正占用它?”的方法

方法 div 終端 例如 解決辦法 all -o 強制 安裝 在Ubuntu16.04下安裝軟件,例如:sudo apt-get install lrzsz時提示:   無法獲得鎖 /var/lib/dpkg/lock - open (11: 資源暫時不可用)  無法鎖定

Flume+Kafka+Storm+Redis構建大數據實時處理系統實時統計網站PV、UV+展示

大數據 實時計算 Storm [TOC] 1 大數據處理的常用方法 前面在我的另一篇文章中《大數據采集、清洗、處理:使用MapReduce進行離線數據分析完整案例》中已經有提及到,這裏依然給出下面的圖示: 前面給出的那篇文章是基於MapReduce的離線數據分析案例,其通過對網站產生的用戶訪問

1.報出問題 Please change caller according to com.intellij.openapi.project. IndexNotReadyException documentation 2.分析問題 提示資訊,不影響編譯 3.解決方案 重啟AS

1.報出問題: Please change caller according to com.intellij.openapi.project. IndexNotReadyException documentation 2.分析問題: 提示資訊,不影響編譯 3.解

統計分析正態性檢驗——SPSS操作指南

       在進行統計分析時,研究者們經常遇到不能確定總體分佈的情況,SPSS的正態性檢驗可以幫助解決這一問題。        先來看一下什麼是正態性檢驗。利用觀測資料判斷總體是否服從正態分佈的檢驗稱為正態性檢

Python中字典列表的使用實現名片資訊管理系統

直接附上程式碼: # 名片資訊管理系統 字典列表的使用 # 輸出列印資訊 print(" 名片管理系統 ") print("="*50) print("1:新增名片") print("2:修改名片") print("3:查詢名片") print("4:刪除名片") print("5:列印