我寫的SQL調優專欄:https://blog.csdn.net/u014427391/article/category/8679315
對於局部的,比如某個頁面列表sql,我們可以使用Oracle的執行計划進行sql調優,但是對於整個系統來說,你可以知道哪些sql比較耗時?當然可以通過查Oracle的共享池得到,不過Oracle系統本身就提供了幾種性能分析報告,比如AWR、ASH、ADDM、AWRSRPT等等報告,本博客介紹一下AWRSRPT性能分析報告
1.1 工具選擇
對於Oracle數據庫可以使用sqlplus或者plsql developer客戶端軟件
sqlplus 使用
可以使用sqlplus工具登錄
進入數據庫
sqlplus / as sysdba
查看用戶
show parameter db_name
用登錄之后才可以使用
plsql developer使用
plsql developer也可以使用,登錄之后,選擇文件(File)->新建(New)->命令窗口(Command Window)
1.2 自動創建快照
開始壓測后執行
exec DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();
可以通過dba_hist_wr_control查看當前的配置情況,當前awr為每1小時做一次數據快照,保留時間為8天。
select * from dba_hist_wr_control;
修改配置,每隔30分鍾收集一次,保存1天
execute dbms_workload_repository.modify_snapshot_settings(interval=>30,retention=>14000);
關閉自動收集
SQL>exec dbms_workload_repository.modify_snapshot_settings (interval=>0,retention=>24*60);
1.3 手工創建快照
除了自動創建快照,也可以手工創建快照
select dbms_workload_repository.create_snapshot() from dual;
1.4 AWRSQRPT報告生成
對於sqlplus客戶端的可以使用
@?/rdbms/admin/awrsqrpt.sql
對於plsql客戶端,我用絕對路徑去執行,@?的命令找不到文件
這個要根據自己的Oracle安裝路徑去修改,例如:
@D:/oracle/product/11.2.0/dbhome_1/RDBMS/ADMIN/awrsqrpt.sql
(1)AWRSQRPT報告格式
Enter value for report_type:html
報告格式,有兩種html和txt,這里我選擇html
(2)快照天數
Enter value for num_days:1
要手機快照的天數,我選擇1
(3)快照開始id
Enter value for begin_snap
id要選日志打印范圍內的
(4) 快照結束id
Enter value for end_snap
id要選日志打印范圍內的
(5) sql的id
Enter value for sql_id
查詢SQL_ID,sql_text可以從AWR拿
select sql_text, last_load_time, t.SQL_ID
from v$sql t
where last_load_time is not null
and sql_text like 'SELECT count(*) from%'
order by t.LAST_LOAD_TIME desc
(6) AWRSQRPT報告名稱
填寫AWRSQRPT報告的名稱,我可以填寫awrsqrpt_20190421.html,然后在打印的日志里有文件保存的路徑:,比如:D:\oracle\product\11.2.0\dbhome_1\RDBMS\ADMIN\awrsqrpt.html
二、AWRSQRPT報告性能分析
AWRSQRPT可以說是AWR和ASH的補充,可以看到執行計划的細節,oracle的執行計划會隨着環境的改變而改變,也會隨着數據改變而改變,所以會產生多個執行計划,而AWRSQRPT就是針對這種情況的報告,AWRSQRPT會有多個執行計划
有多個執行計划,這里產生了4個執行計划
AWRSQRPT之Plan statistic,其中一個執行計划
AWRSQRPT之Execution plan執行計划