R12.1 / R12.2 là những nâng cấp khá lớn và tốn thời gian. Chúng tôi cần tìm tất cả các sql đang chạy lâu dài để giải quyết các vấn đề về hiệu suất nâng cấp R12.2. Vì mỗi lần lặp lại mất rất nhiều thời gian, điều quan trọng là chúng tôi đã cố gắng tìm ra các vấn đề về hiệu suất trong số lần lặp ít hơn và khắc phục chúng cho phù hợp
Dưới đây là các truy vấn hữu ích hàng đầu của AWR để giải quyết các vấn đề về hiệu suất nâng cấp R12.2
Nếu SQL vẫn còn trong bộ nhớ (bộ đệm con trỏ), thì điều sau có thể được sử dụng để xác định các SQL đang chạy lâu có thể chưa được ghi vào AWR (ở ảnh chụp nhanh cuối cùng)
SELECT * FROM (SELECT ss.sql_id, ROUND (SUM (ss.elapsed_time / 1000000), 0) elapsed_time_secs, ROUND (SUM (ss.cpu_time / 1000000), 0) cpu_time_secs, SUM (ss.disk_reads) disk_reads, SUM (ss.direct_writes) direct_writes, SUM (ss.buffer_gets) buffer_gets, SUM (ss.px_servers_executions) px_server_execs, SUM (ss.rows_processed) row_processed, SUM (ss.executions) ap dung, SUM (ss.application), SUM (ss.application) ss.sharable_mem) sharable_mem, SUM (ss.total_sharable_mem) total_sharable_mem TỪ v $ sqlstats ss NHÓM THEO ss.sql_id ĐẶT HÀNG BẰNG 2 MÔ TẢ) WHERE ROWNUM <=100;
Tập lệnh SQL sau sẽ báo cáo SQL chạy lâu nhất giữa hai ảnh chụp nhanh AWR
SELECT * FROM (SELECT dhs.sql_id, ROUND (SUM (dhs.elapsed_time_delta / 1000000), 0) elapsed_time_secs, ROUND (SUM (dhs.cpu_time_delta / 1000000), 0) cpu_time_secs, SUM (dhs.disk_reads_reads) SUM (dhs.buffer_gets_delta) buffer_gets, SUM (dhs.px_servers_execs_delta) px_server_execs, SUM (dhs.rows_processed_delta) rows_processed, SUM (dhs.executions_delta), ROUND (SUM (dhs.elta) iowait (dhs.clwait_delta / 1000000), 0) clwait_secs, ROUND (SUM (dhs.ccwait_delta / 1000000), 0) ccwait_secs, ROUND (SUM (dhs.apwait_delta / 1000000), 0) apwait_secs FROM dba_hist_sqlstat cơ sở dữ liệu WHERE, v $ dhs dhs.dbid =d.dbid VÀ snap_id> &begin_snap và snap_id <=&end_snap NHÓM THEO dhs.sql_id ĐẶT HÀNG BẰNG 2 MÔ TẢ) WHERE ROWNUM <=100;
Trong đó &begin_snap và &end_snap là ID ảnh chụp nhanh bắt đầu và kết thúc.
Đầu ra của câu lệnh này sẽ giống như sau:
SQL_ID ELAPSED_TIME_SECS CPU_TIME_SECS DISK_READS BUFFER_GETS…. ------------- ----------------- ---------------- ----- -----------…. 5vaxut40xbrmr 367440 42999 34838244 3795838289…. 943ra4b7zg28x 264369 170788 441127 562033013…. fkkrk9frwqfdr 70370 6448 3599284 469639133…. 4847s6dt6sds9 68298 38896 7125573 1327384554…. 2k3uw8n473r30 63600 27402 20043712 587615960….
Lưu ý:Thời gian đã trôi qua là thời gian đã trôi qua tối đa cho tất cả người lao động của một công việc.
Trình quản lý doanh nghiệp cũng có thể được sử dụng để xác định SQL đắt tiền khi nó xảy ra.
Nhận báo cáo con trỏ hiển thị cho SQL chạy dài
Đối với STATISTICS_LEVEL =ALL và _rowsource_execution_stosystem =TRUE. Việc lấy tất cả thông tin phải được thực hiện hết sức chậm trễ vì nếu không những thông tin này sẽ bị chuyển ra khỏi SGA
SET trang 0 SET dòng 300 SET LONG 10000SET LONGCHUNKSIZE 10000 SPOOL.txt SELECT * FROM TABLE (dbms_xplan.display_cursor (' ', NULL, 'ALL + ALLSTATS')); TẮT SPOOL;
Nếu SQL không còn trong bộ nhớ nhưng nằm trong AWR, hãy sử dụng báo cáo Hiển thị AWR để thay thế:
SET các trang 0 SET dòng 300 SET LONG 10000 SET LONGCHUNKSIZE 10000 SPOOL .txt SELECT * FROM TABLE (dbms_xplan.display_awr ('', NULL, NULL, 'ALL'))); TẮT SPOOL;
Lưu ý:Lưu ý rằng báo cáo Hiển thị AWR (DBMS_XPLAN.DISPLAY_AWR) không báo cáo về thực tế:báo cáo này không có tùy chọn + ALLSTATS và không có thống kê thực tế nào cho các bước kế hoạch thực thi được lưu trữ trong AWR
Lưu ý quan trọng:con trỏ hiển thị và báo cáo AWR chỉ hiển thị sql_text (1000 ký tự đầu tiên) chứ không phải sql_fulltext. Vì vậy, nếu cần, hãy chạy tập lệnh SQL sau để lấy toàn bộ văn bản SQL
SET trang 0 SET dòng 300 SET LONG 10000 SET LONGCHUNKSIZE 10000 SPOOL.txt SELECT sql_id, sql_text, sql_fulltext FROM v $ SQL WHERE sql_id =' '; TẮT SPOOL;
Nhận báo cáo theo dõi SQL cho SQL bằng cách sử dụng truy vấn song song / DML
Ưu điểm chính của điều này là nó cung cấp một cái nhìn tốt về cách SQL / DML song song hoạt động qua các giai đoạn của kế hoạch và các nô lệ song song
set trimspool on set trim on set pages 0 set long 10000000 set long chunksize 10000000 set linesize 200 set termout off spool sql_monitor_for_.htm biến my_rept CLOB; BEGIN:my_rept:=dbms_sqltune.report_sql_monitor (sql_id => ' ', report_level => 'ALL', type => 'HTML'); CHẤM DỨT; / print:my_rept spool off; đặt termout trên
Where &begin_snap và &end_snap và là ID ảnh chụp nhanh bắt đầu và kết thúc.
Cách tìm ra thời điểm chạy sql cụ thể
CHỌN dhs.sql_id, dsn.snap_id, dsn.begin_interval_time, dsn.end_interval_time, ROUND (SUM (dhs.elapsed_time_delta / 1000000), 0) elapsed_time_secs FROM dba_hist_sqlstat dhs, ddbahs dsdd database d.dbid AND dsn.snap_id =dhs.snap_id AND dsn.dbid =dhs.dbid AND dsn.instance_number =dhs.instance_number AND dhs.sql_id ='' AND dsn.snap_id> &begin_snap và dsn.snap_id <=&end_snap NHÓM BỞI dhs.sql_id, dsn.snap_id, dsn.begin_interval_time, dsn.end_interval_time ĐẶT HÀNG BỞI dsn.snap_id;
Trong đó &begin_snap và &end_snap là ID ảnh chụp nhanh bắt đầu và kết thúc.
Đầu ra của câu lệnh này sẽ giống như sau:
SQL_ID SNAP_ID BEGIN_INTERVAL_TIME END_INTERVAL_TIME ELAPSED_TIME_SECS 2k3uw8n473r30 8278 04-JAN-13 23.00.25.5560 05-JAN-13 00.00.21.1620 23123 2k3uw8n473r30 08279 05 -.38.1620 37.00 37.00 tại JAN-1380Cách tìm số liệu thống kê CBO trên Môi trường Ebiz
CHỌN chủ sở hữu, table_name, num_rows, TO_CHAR (last_analyzed, 'DD-MON-YYYY HH24:MI:SS') last_analyzed FROM all_tables WHERE chủ sở hữu IN (SELECT upper (oracle_username) sname FROM fnd_oracle_userid WHERE oracle_id GIỮA 900 VÀ 999 VÀ read_only ='U' UNION TẤT CẢ CHỌN DISTINCT trên (oracle_username) sname FROM fnd_oracle_userid a, fnd_product_installations b WHERE a.oracle_id =b.oracle_id) ĐẶT HÀNG THEO chủ sở hữu, table_name;Đầu ra của câu lệnh này sẽ giống như sau:
OWNER TABLE_NAME NUM_ROWS LAST_ANALYZED --------------------------------- --- ABM ABM_ACC_MAP_SUM_REP 0 06-DEC-2016 08:46:33 ABM ABM_ACT_ACC_RU_DAT 0 06-DEC-2016 08:46:35 ABM ABM_ACT_STA_RU_DAT 0 06-DEC-2016 08:46:36Cách nhận báo cáo AWR sau khi nâng cấp
Có thể lấy báo cáo AWR cho
• Toàn bộ thời gian quá trình nâng cấp đang chạy.
• Trong thời gian thực hiện các công việc dài hạn (tức là giữa các ảnh chụp nhanh được thực hiện ngay trước khi công việc bắt đầu và ngay sau khi hoàn thành) .
• Từng ảnh chụp nhanh riêng lẻ.Cách tạo báo cáo AWR
(1) Truy cập $ ORACLE_HOME / rdbms / admin
(2) Chạy awrrpt.sql tạo báo cáo AWR.
(3) Luôn chọn loại báo cáo HTML.
(4) Trên một phiên bản Oracle RAC, awrrpti.sql thường là đủ, vì quá trình nâng cấp sẽ chỉ được chạy trên một nút Oracle RAC.
Báo cáo AWR có thể được tự động hóa. Điều này rất hữu ích nếu tạo ra một số lượng lớn các báo cáo AWR, đặc biệt là đối với các ảnh chụp nhanh liên tiếp. Xem phần “Tự động hóa báo cáo AWR” trong tài liệu Hỗ trợ Oracle của tôi “Chẩn đoán hiệu suất với kho lưu trữ khối lượng công việc tự động (Tài liệu 1674086.1)”.
Lưu ý rằng một số đối tượng cố định và đối tượng từ điển (đặc biệt là WRH $ _LATCH_CHILDREN, đặc biệt nếu Statistics_level =ALL, hoặc có khoảng thời gian lưu giữ cao hoặc khoảng thời gian chụp nhanh ngắn) sẽ tăng lên đáng kể trong quá trình nâng cấp. Vì vậy, có thể cần thu thập số liệu thống kê từ điển và đối tượng cố định trước khi chạy AWR.Các bài viết có liên quan
Kho lưu trữ khối lượng công việc tự động
Oracle ASH (Lịch sử phiên hoạt động)
Điều chỉnh hiệu suất Oracle
Cách tạo tác vụ ADDM và kiểm tra báo cáo của nó
Cách tìm chi tiết phiên trong cơ sở dữ liệu Oracle