Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Truy vấn của tôi chạy nhanh hơn trong khoảng thời gian thứ hai, làm cách nào để ngăn điều đó lại?

Xóa bộ nhớ đệm để đo hiệu suất là có thể nhưng rất khó sử dụng.

Một biện pháp rất tốt để theo dõi hiệu suất đạt được của các nỗ lực điều chỉnh là đếm số khối đã đọc trong quá trình thực thi truy vấn. Một trong những cách dễ nhất để làm điều này là sử dụng sqlplus với tính năng tự động dò tìm, như sau:

set autotrace traceonly
<your query>

kết quả đầu ra

...
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          1  consistent gets
          0  physical reads
          0  redo size
        363  bytes sent via SQL*Net to client
        364  bytes received via SQL*Net from client
          4  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

Số khối được đọc, có thể là từ bộ nhớ cache hoặc từ đĩa, là consistent gets .

Một cách khác là chạy truy vấn với số liệu thống kê tăng lên, tức là với gợi ý gather_plan_statistics và sau đó xem xét kế hoạch truy vấn từ bộ đệm con trỏ:

auto autotrace off
set serveroutput off
<your query with hint gather_plan_statistics>
select * from table(dbms_xplan.display_cursor(null,null,'typical allstats'));

Số khối được đọc được xuất ra trong cột buffers .

---------------------------------------------------------------------------------------------------------------------
| Id  | Operation        | Name           | Starts | E-Rows | Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers |
---------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT |                |      3 |        |     1 (100)|          |      3 |00:00:00.01 |       3 |
|   1 |  SORT AGGREGATE  |                |      3 |      1 |            |          |      3 |00:00:00.01 |       3 |
|   2 |   INDEX FULL SCAN| ABCDEF         |      3 |    176 |     1   (0)| 00:00:01 |    528 |00:00:00.01 |       3 |
---------------------------------------------------------------------------------------------------------------------


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để bạn đặt Incemental thành true cho nhiều bảng có cùng một chủ sở hữu bằng cách sử dụng DBMS_STATS.set_table_prefs?

  2. Oracle ROWID dưới dạng tham số hàm / thủ tục

  3. Cơ sở dữ liệu Oracle bị treo hoàn toàn trong các truy vấn CẬP NHẬT

  4. Bỏ qua thông số phạm vi ngày trong mệnh đề where khi thông số không được nhập

  5. Thủ tục PL / SQL:Làm thế nào để trả về một câu lệnh select?