久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

statpack的安裝和使用方法

156次閱讀
沒有評論

共計 7099 個字符,預計需要花費 18 分鐘才能閱讀完成。

這篇文章主要講解了“statpack 的安裝和使用方法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“statpack 的安裝和使用方法”吧!

簡介

Oracle Statspack 是用來診斷數據庫性能的強有力的工具,通過 Statspack 我們很容易的確定 Oracle 的所有瓶頸,記錄數據庫的性能狀態。

安裝步驟

一、Statpack 原理:

運行 oracle 自帶腳本,生成一系列的統計表。

生成快照,采樣。

根據快照生成報告。

二、安裝準備

檢查部分參數值

–job_queue_process: 取值范圍為 0 到 1000,總共可創建多少個 job 進程,為了能夠建立自動任務,執行數據收集,此參數大于零

alter system set job_queue_processess=60;

—timed_statistics,設置為 true,使收集的時間信息存儲在 V$sessstats 和 V$sysstats 等動態性能視圖中,但會消耗資源,可以在使用 Satspack 之前設為 true,采樣過后,把該參數動態修改為 false.
alter system set timed_statistics=true;
2.  腳本
使用此功能,需要運行 oracle 自帶腳本,在數據庫中生成一系列的表和視圖,用于收集各種信息。腳本位于 %oracle_home%\rdbms\admin(224 數據庫的該目錄為 /oracle/app/product/10.2.0/Db_1/rdbms/admin)目錄下,oracle816 下是一組以 stat 開頭的文件,以后的版本是一組以 sp 開頭的文件。

三、安裝

 1.shell 中切換到 oracle 用戶:su – oracle

2. 以 sysdba 身份登錄 sqlplus。
9i 及以后版本,可以用 sys 用戶以 sysdba 身份登錄:sqlplus / as sysdba
(最好轉到腳本所有目錄 %oracle_home%\rdbms\admin,便于執行腳本)

3. 創建表空間,用于保存采樣數據

create  tablespace  perfstat  datafile  /data/cams/perfstat.dbf   size 500m;

Statspack 的報表數據還是相當占空間的,特別是在多次連續采樣的情況下,所以不能太小,最小 100M,否則創建對象會失敗。

查詢表空間:select file_name from dba_data_files;

4. 運行腳本,安裝 statspack
在 sqlplus 中執行命令:

@$ORACLE_HOME/rdbms/admin/spcreate.sql

– 腳本會創建用戶 perfstat,需要指定此用戶密碼。
輸入 perfstat_password 的值: perfstat

– 需要輸入用戶 perfstat 使用的表空間:指定新建的表空間即可。
輸入 default_tablespace 的值:   perfstat

– 需要指定用戶 perfstat 使用的臨時表空間。
輸入 temporary_tablespace 的值: tmp10

– 安裝成功,可以看到如下信息:
Creating Package STATSPACK…

程序包已創建。

沒有錯誤。
Creating Package Body STATSPACK…

程序包體已創建。

沒有錯誤。

NOTE:
SPCPKG complete. Please check spcpkg.lis for any errors.

– 查看錯誤信息
NT 下:
host find ORA- *.LIS
host find err- *.LIS

Unix 下:
grep ORA- *.lis
grep err *.lis

如果出現錯誤,可以運行腳本刪除相關內容:@%oracle_home%\rdbms\admin\spdrop.sql
(注意:也要在 sysdba 下運行腳本刪除相關對象)
然后再重新運行腳本安裝。

這個安裝過程創建了一系列的表,用于存入采樣數據。
查看新建表:
select dt.table_name from dba_tables dt where dt.owner= PERFSTAT
conn perfstat/perfstat
select table_name from user_tables;

安裝完成后,系統會自動切換到 perfstat 用戶下。

四、測試 statpack

運行 statspack.snap 可以產生系統快照,運行兩次,產生兩次快照。

SQL execute statspack.snap;

PL/SQL 過程已成功完成。

SQL execute statspack.snap;

PL/SQL 過程已成功完成。

然后執行腳本 @%oracle_home%\rdbms\admin\spreport.sql 就可以生成基于兩個時間點的報告。
– 需要輸入起始快照 ID 和結束快照 ID,以及報告文件名。
(快照 ID 必須存在)
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
輸入 begin_snap 的值: 1
Begin Snapshot Id specified: 1

輸入 end_snap 的值: 13
End   Snapshot Id specified: 13

輸入 report_name 的值: e:\s1report.txt

– 查看產生的快照
select t.snap_id,to_char(t.snap_time, yyyy-mm-dd hh:mi:ss) as S_Time,t.snapshot_exec_time_s from STATS$SNAPSHOT t;

五、規劃自動任務

安裝之后,我們就可以設置定時任務,定時采樣,收集數據。

使用腳本 spauto.sql 來定義自動任務。

@$ORACLE_HOME/rdbms/admin/spauto.sql

spauto.sql 在關鍵內容:
begin
 select instance_number into :instno from v$instance;
 dbms_job.submit(:jobno, statspack.snap; , trunc(sysdate+1/24, HH), trunc(SYSDATE+1/24, HH) , TRUE, :instno);
 commit;
end;

執行 spquto,就建立了一個每小時執行一次的數據收集計劃。

這個 Job 任務定義了收集數據 (執行 statspack.snap) 的時間間隔為 1 小時:
一天 24 小時,1440 分鐘 –
1/24, HH 每小時一次
1/48, MI 每半小時一次
1/144, MI 每 10 分鐘一次
1/288, MI 每 5 分鐘一次

關于采樣間隔,通常建議 1 小時,如有特殊需要,可以設置更短,如半小時。但不推薦更短。因為 statpack 的執行本身需要消息資源,太短的采樣對系統的性能會產生較大的影響(甚至會使 statspack 的執行出現在采樣數據中)

六.生成報告

同測試一樣
用 perfstat 用戶連接
執行腳本 %oracle_home%\rdbms\admin\spreport.sql,輸入起始快照 ID 和結束快照 ID,以及報告文件名,生成 statspack 報告。

注:一次 statspack 報告不能跨越一次停機,但是之前或之后的連續區間,收集的信息依然有效,你可以選擇之前或之后的采樣生成 report.
如果中間停過機,會收到以下錯誤信息:

第 1 行出現錯誤:
ORA-20200: The instance was shutdown between snapshots 1 and 31
ORA-06512: 在 line 48

七、后續處理

1,移除定時任務
當你完成一個采樣報告,你應該及時移除這個 job 任務。遺漏一個無人照顧的 job 是非常危險的……

– 查看任務并移除任務
select job, next_date, next_sec, what from user_jobs;
execute dbms_job.remove(ID)

2,刪除歷史數據

1),刪除采樣數據
只要刪除 stat$snapshot 數據表中的相應數據,其他表中的數據會相應的級連刪除。
select max(snap_id) from stats$snapshot;
delete from stats$snapshot where snap_id =166;

刪除過程中,你可以看到所有相關的表都被鎖定了。
select a.object_id, a.oracle_username, b.object_name
from v$locked_object a,dba_objects b
where a.object_id=b.object_id

2),truncate 統計信息表:使用腳本 sptrunc.sql 刪除所有的采樣數據但保留 statspack 的庫結構。
如果有大量數據,直接 delete 采樣數據是非常緩慢的。使用腳本 sptrunc.sql 可以快速的刪除所有統計信息。
查看腳本,可以看出是用 truncate table 截掉所有相關的表中的內容。
truncate table STATS$FILESTATXS;
truncate table STATS$TEMPSTATXS;

delete from STATS$DATABASE_INSTANCE;

3),刪除 statspack 所有數據和各種對象:使用腳本 spdrop.sql。全部刪除,不留痕跡! 但有表空間在~~

八、調整 statspack 的收集門限

statspack 有兩種類型的收集選項
level– 級別:控制收集數據的類型
threshold– 門限:設置收集的數據閥值
都保存在表 stats$statspack_parameter 中

1,級別(level)– 有三種快照級別,默認值為 5

– 查看當前 level 級別:
select snap_level from stats$statspack_parameter;

1)level=0:一般性能統計。包括等待事件,系統事件,系統統計,回滾段統計,行緩存,SGA,會話,鎖,緩沖池統計等等。

2)level=5:在 level0 的基礎上,增加 SQL 語句的收集。SQL 語句收集結果記錄在 ststs$sql_summary 表中。

3)level=10:增加子鎖統計,包括 level5 的所有內容,還會將附加子鎖的入 stats$latc_children 表中。使用這個級別需要慎重,建議在 oracle support 的指導下進行。

可以通過 statspack 包修改缺省的級別設置,如:
SQL execute statspack.snap(i_snap_level= 0,i_modify_parameter= true
通過這條語句,
以后的收集級別都將是 0 級。

如果你只是想修改本次收集級別,可以忽略 i_modify_parameter 參數,如下:
SQL execute statspack.snap(i_snap_level=  

2,快照門限 – 只應用于 stats$sql_summary 表中獲取的 Sql 語句。
因為每一個快照都會收集很數據,及 sql 語句,所以 stats$sql_summary 很快就會成為 statspack 中最大的表。

– 查看當前各種門限
select executions_th,disk_reads_th,parse_calls_th,buffer_gets_th from stats$statspack_parameter;

各種門限:
1)executions_th–sql 語句執行的數量(默認值 =100)
2)disk_reads_th–sql 語句執行的磁盤讀入數量(默認值 =1000)
3)parse_calls_th–sql 語句執行的解析調用數量(默認值 =1000)
4)buffer_gets_th–sql 語句執行的緩沖區獲取數量(默認值 =10000)

任何一個門限值超過以上參數就會產生一條記錄。
通過調用 statspack.modify_statspack_parameter 函數我們可以改變門限的默認值:
SQL execute statspack.modify_statspack_parameter(i_buffer_get_th= 100000,i_disk_reads_th= 100000;

九.Statspack 報告分析

Statspack 報告分為如下部分
1.  數據庫總體信息
含實例、版本、是否 RAC、CPU、物理內存、oracle 內存設置等等
2.  每秒每事務的資源消耗情況
3.  實例的各組件的命中率
4.  共享池總體情況(Shared Pool Statistics)
5.  等待時間最長的前 5 個等待事件(Top 5 Timed Events)
含前 5 等待事件,兩次采樣間 cpu 占用,內存分配等信息。Oracle 各版本等待事件并不完全相同,數量依版本升高而增加,關于各項等待事情的說明,三思之前的 學習動態性能表 系列文章中有過介紹,有心的朋友可以去搜搜看。
6. DB 所有等待事件(Wait Events)–Total wait time =0.001 的事件。
7.  后臺等待事件(Background Wait Events)–Total wait time =0.001 的事件。
8.  柱狀顯示的等待事件(Wait Event Histogram)– 顯示各等待事件不同響應時間的比例
9.  根據 CPU 開銷進行排序的 SQL(SQL ordered by CPU)
10.  根據執行時間進行排序的 SQL(SQL ordered by Elapsed)
11.  根據 BufferGets 進行排序的 SQL(SQL ordered by Gets)
12.  根據物理讀進行排序的 SQL(SQL ordered by Reads)
13.  根據執行次數排序的 SQL(SQL ordered by Executions)
14.  根據解析調用次數排序的 SQL(SQL ordered by Parse Calls)
15.  實例記錄的各項活動的統計數據(Instance Activity Stats)
16.  表空間的 IO 統計(Tablespace IO Stats)
17.  數據文件的 IO 統計(File IO Stats)
18.  數據文件讀柱狀圖形式統計(File Read Histogram Stats)
19. Buffer 池統計數據(Buffer Pool Statistics)– 含實例恢復的統計數據,buffer 池大小設置建議等等。
20. PGA 統計數據(PGA Aggr Target Stats)– 含 PGA 緩存命中率,柱狀圖形式的統計以及 PGA 設置建議等等。
21.  進程的內存占用情況(Process Memory Summary Stats)– 含占用內存較多的進程等。
22. undo 段摘要
23. undo 段統計
24.  鎖存器的當前情況
25.  鎖存器睡眠等待統計
26.  鎖存器失敗情況
27.  數據字典 cache 性能統計(Dictionary Cache Stats)
28.  庫緩存的活動情況(Library Cache Activity)
29. Rule 集(Rule Sets)
30.  共享池設置建議(Shared Pool Advisory)
31. SGA 摘要(SGA Memory Summary)
32. SGA 統計信息(SQL Memory Statistics)
33.  系統參數(init.ora Parameters)

報告很長,確實非常全面。如何分析,還需要再學習。

十、實際應用

  經初步分析決定自動采集 8:00-18:00 這個時間段中 5 個時間點的快照,每兩小時采集一次,并把每天的快照信息存儲下來,對 10:00 和 14:00 這兩個點的快照形成報告。

  在 sqlplus 中運行 5 個 job,這 5 個 job 每天定時對不同時間點自動生成快照,8 點采集的腳本內容:

 begin
 select instance_number into :instno from v$instance;
 dbms_job.submit(:jobno, statspack.snap; , trunc(sysdate) +(8*60)/(24*60), trunc(SYSDATE+1, HH) , TRUE, :instno);
 commit;
end;
其他時間點的 job 內容類似,只是更改 dbms_job_submit()函數的第二個參數值。

在 sqlplus 中執行這 5 個 job。

      由于要自動生成性能報告,而 admin 目錄中的 spreport.sql 文件在執行的時候需要鍵入快照編號以及報告名稱,所以對此文件進行了改寫,改寫之后執行該文件后會自動對當天 10 點和 16 點兩個時間點的快照生成報告,報告名稱命名方式為 sp_日期_起始快照編號_結束快照編號.txt 存儲路徑為 /oracle 目錄下。自動生成報告的 sql 文件需定時執行,oracle 的 dbms_job.submit()不支持對 sql 文件的調用,所以采取在 shell 中調用   crontab 定時工具執行生成報告的 sql 文件:

在 oracle 用戶下輸入 crontab –e 0 23 * * * sqlplus sys/sys as sysdba @ /oracle/app/product/10.2.0/Db_1/rdbms/admin/spreport.sql

表示每天 23 點執行后面的任務

感謝各位的閱讀,以上就是“statpack 的安裝和使用方法”的內容了,經過本文的學習后,相信大家對 statpack 的安裝和使用方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-01發表,共計7099字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 浦北县| 宁乡县| 彭泽县| 方正县| 滨海县| 永定县| 新乡县| 柳河县| 米易县| 宁安市| 清镇市| 乌兰浩特市| 内江市| 文水县| 宜黄县| 门头沟区| 汶上县| 浪卡子县| 丹阳市| 宁阳县| 政和县| 屏山县| 宁强县| 左贡县| 绥滨县| 柘荣县| 香河县| 明水县| 杭州市| 邵武市| 广水市| 崇仁县| 香河县| 苍溪县| 日照市| 永德县| 明光市| 泽库县| 东阿县| 关岭| 县级市|