Thứ Hai, 10 tháng 10, 2022

Automatic Database Diagnostic Monitor (ADDM) trong Oracle Database

Bài viết này hướng dẫn cách tạo báo cáo Automatic Database Diagnostic Monitor (ADDM), cách đọc, phân tích, đánh giá từ đó nắm rõ DB của mình có gặp vấn đề gì không. Yêu cầu phải là bản Orale Database Enterprise (bản standard không có)  

  • Overview
  • Enterprise Manager
  • addmrpt.sql Script
  • DBMS_ADVISOR
  • Related Views
  • SQL Developer and ADDM Reports

Tổng quan

 Automatic Database Diagnostic Monitor (ADDM) phân tích dữ liệu trong Automatic Workload Repository (AWR) để xác định vấn đề nghẽn liên quan đến hiệu năng của database. Với mỗi mục (finding) sẽ đưa ra nguyên ngân gốc (root cause) và đưa ra khuyến nghị (recommend) để xử lý vấn đề, các thông tin này đữo lưu trong DB. Tham số STATISTICS_LEVEL đặt là TYPICAL (default) hoặc ALL. ADDM gồm các nội dung sau:

  • Tải CPU
  • Sử dụng bộ nhớ
  • Sử dụng I/O
  • SQL sử dụng nhiều tài nguyên
  • PL/SQL và Java  sử dụng nhiều tài nguyên
  • Vấn đề RAC
  • Vấn đề ứng dụng
  • Vấn đề cấu hình cơ sở dữ liệu
  • Vấn đề giao dịch đồng thời (Concurrency)
  • Xung đột Object

Có nhiều cách tạo ra báo cáo ADDM, ADDM sẽ hiển thị các findings (các vấn đề) được liệt kê sắp xếp liên quan đến hiệu năng (performance) cùng với các khuyến nghị (recommend) để giẢi quyết các vấn đề chính đã tìm ra. Ví dụ:

FINDING 1: 59% impact (944 seconds)
-----------------------------------
The buffer cache was undersized causing significant additional read I/O.

   RECOMMENDATION 1: DB Configuration, 59% benefit (944 seconds)
      ACTION: Increase SGA target size by increasing the value of parameter
         "sga_target" by 28 M.

   SYMPTOMS THAT LED TO THE FINDING:
      Wait class "User I/O" was consuming significant database time. (83%
      impact [1336 seconds])

Khuyến nghị gồm:

  • Thay đổi phần cứng
  • Thay đổi cấu hình DB
  • Thay đổi Schema
  • Thay đổi Ứng dụng
  • Các khuyến nghị khác

Việc phân tích hiệu suất I/O bị ảnh hưởng bởi tham số DBIO_EXPECTED  phải được đặt thành thời gian trung bình (tính bằng micro giây) cần để đọc một block từ đĩa. Các giá trị điển hình nằm trong khoảng từ 5000 đến 20000 microsoconds. Tham số có thể được thiết lập bằng cách sau đây:

EXECUTE DBMS_ADVISOR.set_default_task_parameter('ADDM', 'DBIO_EXPECTED', 8000);

Nơi rõ ràng để bắt đầu xem báo cáo ADDM là TOAD, Enterprise Manager Cloud hoặc SQL*Plus. 

Với Enterprise Manager, phần "Performance Analysis" trên trang "Home" là danh sách năm phát hiện hàng đầu từ nhiệm vụ phân tích ADDM cuối cùng. Các báo cáo cụ thể có thể được tạo ra bằng cách nhấp vào liên kết "Advisor Central", sau đó nhấp vào liên kết "ADDM". Trang kết quả cho phép bạn chọn ảnh chụp nhanh bắt đầu và kết thúc, tạo tác vụ ADDM và hiển thị báo cáo kết quả bằng cách nhấp vào một vài liên kết.

Lấy ADDM từ TOAD

Vào menu Database --> Monitor --> ADDM/AWR Report (OEM)

SQL Developer và ADDM Reports

Mở khung nhìn DBA  "View > DBA", chọn kết nối và node "Performance" . ADDM reports  có sẵn từ nút "Automatic Database Diagnostics Monitor" .

Lấy ADDM từ SQL*Plus với addmrpt.sql 

Chạy addmrpt.sql có thể được sử dụng để tạo báo cáo ADDM từ SQL*Plus. Tập lệnh được gọi như sau.

-- UNIX
@/u01/app/oracle/product/19.6.0/db_1/rdbms/admin/addmrpt.sql

-- Windows
@d:\oracle\product\19.6.0\db_1\rdbms\admin\addmrpt.sql

Sau đó, nó liệt kê tất cả các snapshot có sẵn và nhắc bạn nhập thông tin snapshot bắt đầu và kết thúc cùng với tên báo cáo.

Có thể xem ví dụ về báo cáo ADDM bên dưới bài viết.

DBMS_ADVISOR

Gói DBMS_ADVISOR có thể được sử dụng để tạo và thực thi bất kỳ tác vụ khuyến nghị (advisor) nào, bao gồm cả các tác vụ ADDM. Ví dụ sau đây cho thấy cách nó được sử dụng để tạo, thực thi và hiển thị một báo cáo ADDM điển hình.

BEGIN
  -- Tạo một nhiệm vụ ADDM.
  DBMS_ADVISOR.create_task (
    advisor_name      => 'ADDM',
    task_name         => '970_1032_AWR_SNAPSHOT',
    task_desc         => 'Advisor for snapshots 970 to 1032.');

  -- Đặt snapshot bắt đầu và kết thúc.
  DBMS_ADVISOR.set_task_parameter (
    task_name => '970_1032_AWR_SNAPSHOT',
    parameter => 'START_SNAPSHOT',
    value     => 970);

  DBMS_ADVISOR.set_task_parameter (
    task_name => '970_1032_AWR_SNAPSHOT',
    parameter => 'END_SNAPSHOT',
    value     => 1032);

  -- Thực thi nhiệm vụ 
  DBMS_ADVISOR.execute_task(task_name => '970_1032_AWR_SNAPSHOT');
END;
/

-- Hiển thị báo cáo 
SET LONG 1000000 LONGCHUNKSIZE 1000000
SET LINESIZE 1000 PAGESIZE 0
SET TRIM ON TRIMSPOOL ON
SET ECHO OFF FEEDBACK OFF

SELECT DBMS_ADVISOR.get_task_report('970_1032_AWR_SNAPSHOT') AS report
FROM   dual;

SET PAGESIZE 24

Giá trị của lệnh SET LONG phải được điều chỉnh để cho phép hiển thị toàn bộ báo cáo.

Các snapshot AWR có liên quan có thể được xác định bằng cách sử dụng view DBA_HIST_SNAPSHOT

Các view liên quan

Các view sau có thể được sử dụng để hiển thị đầu ra ADDM mà không cần sử dụng TOAD, SQL Developer, EM hoặc hàm GET_TASK_REPOR.

  • DBA_ADVISOR_TASKS - Thông tin cơ bản về các nhiệm vụ hiện có.
  • DBA_ADVISOR_LOG - Thông tin trạng thái về các nhiệm vụ hiện có.
  • DBA_ADVISOR_FINDINGS - Các phát hiện được xác định cho một nhiệm vụ hiện có.
  • DBA_ADVISOR_RECOMMENDATIONS - Khuyến nghị cho các vấn đề được xác định bởi một nhiệm vụ hiện có.

Chi tiết:

===Báo cáo mẫu ADDM Report ===

          ADDM Report for Task 'TASK_125'
          -------------------------------

Analysis Period
---------------
AWR snapshot range from 70 to 71.
Time period starts at 05-OCT-10 04.00.40 PM
Time period ends at 05-OCT-10 05.00.05 PM

Analysis Target
---------------
Database 'DB11G' with DB ID 196335337.
Database version 11.2.0.2.0.
ADDM performed an analysis of instance DB11G, numbered 1 and hosted at
oel5-11gR2-demo.localdomain.

Activity During the Analysis Period
-----------------------------------
Total database time was 1522 seconds.
The average number of active sessions was .43.

Summary of Findings
-------------------
   Description            Active Sessions      Recommendations
                          Percent of Activity
   ---------------------  -------------------  ---------------
1  Virtual Memory Paging  .43 | 100            1
2  Top SQL Statements     .19 | 44.19          4
3  PL/SQL Execution       .08 | 19.77          2
4  Commits and Rollbacks  .04 | 9.15           2
5  "User I/O" wait Class  .02 | 3.93           0


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


          Findings and Recommendations
          ----------------------------

Finding 1: Virtual Memory Paging
Impact is .43 active sessions, 100% of total activity.
------------------------------------------------------
Significant virtual memory paging was detected on the host operating system.

   Recommendation 1: Host Configuration
   Estimated benefit is .43 active sessions, 100% of total activity.
   -----------------------------------------------------------------
   Action
      Host operating system was experiencing significant paging but no
      particular root cause could be detected. Investigate processes that do
      not belong to this instance running on the host that are consuming
      significant amount of virtual memory. Also consider adding more physical
      memory to the host. -> Thêm RAM


Finding 2: Top SQL Statements
Impact is .19 active sessions, 44.19% of total activity.
--------------------------------------------------------
SQL statements consuming significant database time were found. These
statements offer a good opportunity for performance improvement.

   Recommendation 1: SQL Tuning
   Estimated benefit is .09 active sessions, 22.09% of total activity.
   -------------------------------------------------------------------
   Action
      Investigate the PL/SQL statement with SQL_ID "0w2qpuc6u2zsp" for
      possible performance improvements. You can supplement the information
      given here with an ASH report for this SQL_ID.
      Related Object
         SQL statement with SQL_ID 0w2qpuc6u2zsp.
         BEGIN :1 := orderentry.neworder(:2 ,:3 ,:4 ); END; --> Tối ưu
   Rationale
      The SQL Tuning Advisor cannot operate on PL/SQL statements.
   Rationale
      Database time for this SQL was divided as follows: 37% for SQL
      execution, 0% for parsing, 63% for PL/SQL execution and 0% for Java
      execution.
   Rationale
      SQL statement with SQL_ID "0w2qpuc6u2zsp" was executed 7094 times and
      had an average elapsed time of 0.1 seconds.

   Recommendation 2: SQL Tuning
   Estimated benefit is .04 active sessions, 9.3% of total activity.
   -----------------------------------------------------------------
   Action
      Run SQL Tuning Advisor on the SELECT statement with SQL_ID
      "c13sma6rkr27c".
      Related Object
         SQL statement with SQL_ID c13sma6rkr27c.
         SELECT PRODUCTS.PRODUCT_ID, PRODUCT_NAME, PRODUCT_DESCRIPTION,
         CATEGORY_ID, WEIGHT_CLASS, WARRANTY_PERIOD, SUPPLIER_ID,
         PRODUCT_STATUS, LIST_PRICE, MIN_PRICE, CATALOG_URL, QUANTITY_ON_HAND
         FROM PRODUCTS, INVENTORIES WHERE PRODUCTS.CATEGORY_ID = :B3 AND
         INVENTORIES.PRODUCT_ID = PRODUCTS.PRODUCT_ID AND
         INVENTORIES.WAREHOUSE_ID = :B2 AND ROWNUM < :B1
   Rationale
      The SQL spent 100% of its database time on CPU, I/O and Cluster waits.
      This part of database time may be improved by the SQL Tuning Advisor.
   Rationale
      Database time for this SQL was divided as follows: 100% for SQL
      execution, 0% for parsing, 0% for PL/SQL execution and 0% for Java
      execution.
   Rationale
      SQL statement with SQL_ID "c13sma6rkr27c" was executed 21305 times and
      had an average elapsed time of 0.0079 seconds. --> Tối ưu
Rationale Top level calls to execute the PL/SQL statement with SQL_ID "0w2qpuc6u2zsp" are responsible for 100% of the database time spent on the SELECT statement with SQL_ID "c13sma6rkr27c". Related Object SQL statement with SQL_ID 0w2qpuc6u2zsp. BEGIN :1 := orderentry.neworder(:2 ,:3 ,:4 ); END; Recommendation 3: SQL Tuning Estimated benefit is .03 active sessions, 6.98% of total activity. ------------------------------------------------------------------ Action Investigate the PL/SQL statement with SQL_ID "147a57cxq3w5y" for possible performance improvements. You can supplement the information given here with an ASH report for this SQL_ID. Related Object SQL statement with SQL_ID 147a57cxq3w5y. BEGIN :1 := orderentry.browseproducts(:2 ,:3 ,:4 ); END; Rationale The SQL Tuning Advisor cannot operate on PL/SQL statements. Rationale Database time for this SQL was divided as follows: 17% for SQL execution, 0% for parsing, 83% for PL/SQL execution and 0% for Java execution. Rationale SQL statement with SQL_ID "147a57cxq3w5y" was executed 8494 times and had an average elapsed time of 0.036 seconds. --> Tối ưu
Recommendation 4: SQL Tuning Estimated benefit is .02 active sessions, 5.81% of total activity. ------------------------------------------------------------------ Action Run SQL Tuning Advisor on the SELECT statement with SQL_ID "0y1prvxqc2ra9". Related Object SQL statement with SQL_ID 0y1prvxqc2ra9. SELECT PRODUCTS.PRODUCT_ID, PRODUCT_NAME, PRODUCT_DESCRIPTION, CATEGORY_ID, WEIGHT_CLASS, WARRANTY_PERIOD, SUPPLIER_ID, PRODUCT_STATUS, LIST_PRICE, MIN_PRICE, CATALOG_URL, QUANTITY_ON_HAND FROM PRODUCTS, INVENTORIES WHERE PRODUCTS.PRODUCT_ID = :B2 AND INVENTORIES.PRODUCT_ID = PRODUCTS.PRODUCT_ID AND ROWNUM < :B1 Rationale The SQL spent 100% of its database time on CPU, I/O and Cluster waits. This part of database time may be improved by the SQL Tuning Advisor. Rationale Database time for this SQL was divided as follows: 100% for SQL execution, 0% for parsing, 0% for PL/SQL execution and 0% for Java execution. Rationale SQL statement with SQL_ID "0y1prvxqc2ra9" was executed 25388 times and had an average elapsed time of 0.0023 seconds. --> Tối ưu
Rationale Top level calls to execute the PL/SQL statement with SQL_ID "147a57cxq3w5y" are responsible for 100% of the database time spent on the SELECT statement with SQL_ID "0y1prvxqc2ra9". Related Object SQL statement with SQL_ID 147a57cxq3w5y. BEGIN :1 := orderentry.browseproducts(:2 ,:3 ,:4 ); END; Finding 3: PL/SQL Execution Impact is .08 active sessions, 19.77% of total activity. -------------------------------------------------------- PL/SQL execution consumed significant database time. Recommendation 1: SQL Tuning Estimated benefit is .06 active sessions, 13.95% of total activity. ------------------------------------------------------------------- Action Tune the entry point PL/SQL "SOE.ORDERENTRY.NEWORDER" of type "PACKAGE" and ID 77490. Refer to the PL/SQL documentation for addition information. Rationale 106 seconds spent in executing PL/SQL "SOE.ORDERENTRY.NEWORDER" of type "PACKAGE" and ID 77490. --> Tối ưu
Recommendation 2: SQL Tuning Estimated benefit is .02 active sessions, 5.81% of total activity. --> Tối ưu
------------------------------------------------------------------ Action Tune the entry point PL/SQL "SOE.ORDERENTRY.BROWSEPRODUCTS" of type "PACKAGE" and ID 77490. Refer to the PL/SQL documentation for addition information. Finding 4: Commits and Rollbacks Impact is .04 active sessions, 9.15% of total activity. ------------------------------------------------------- Waits on event "log file sync" while performing COMMIT and ROLLBACK operations were consuming significant database time. --> Xem size redo log, thêm group redo log Recommendation 1: Application Analysis Estimated benefit is .04 active sessions, 9.15% of total activity. ------------------------------------------------------------------ Action Investigate application logic for possible reduction in the number of COMMIT operations by increasing the size of transactions. Rationale The application was performing 589 transactions per minute with an average redo size of 2072 bytes per transaction. Recommendation 2: Host Configuration Estimated benefit is .04 active sessions, 9.15% of total activity. ------------------------------------------------------------------ Action Investigate the possibility of improving the performance of I/O to the online redo log files. Rationale The average size of writes to the online redo log files was 2 K and the average time per write was 1 milliseconds. Rationale The total I/O throughput on redo log files was 0 K per second for reads and 22 K per second for writes. Rationale The redo log I/O throughput was divided as follows: 0% by RMAN and recovery, 100% by Log Writer, 0% by Archiver, 0% by Streams AQ and 0% by all other activity. Symptoms That Led to the Finding: --------------------------------- Wait class "Commit" was consuming significant database time. Impact is .04 active sessions, 9.15% of total activity. Finding 5: "User I/O" wait Class Impact is .02 active sessions, 3.93% of total activity. ------------------------------------------------------- Wait class "User I/O" was consuming significant database time. The throughput of the I/O subsystem was not significantly lower than expected. The Oracle instance memory (SGA and PGA) was adequately sized. No recommendations are available. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Additional Information ---------------------- Miscellaneous Information ------------------------- Wait class "Application" was not consuming significant database time. Wait class "Concurrency" was not consuming significant database time. Wait class "Configuration" was not consuming significant database time. CPU was not a bottleneck for the instance. Wait class "Network" was not consuming significant database time. Session connect and disconnect calls were not consuming significant database time. Hard parsing of SQL statements was not consuming significant database time. The database's maintenance windows were active during 99% of the analysis period.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile: 0902912888
⚡️ Skype: tranbinh48ca
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,khóa học pl/sql, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master