Đối với Cơ sở dữ liệu Oracle cung cấp thông tin này:
Mô tả các triệu chứng của sự cố
Mô tả hành vi gây ra vấn đề. Hoạt động của truy vấn có ổn định không hay sự cố chỉ xảy ra đôi khi, với các tham số cụ thể hoặc ngẫu nhiên đơn giản. Bạn có thể tái tạo hành vi này trong IDE (ví dụ:Nhà phát triển SQL) không?
Mô tả môi trường
Xác định phiên bản chính xác của Oracle
select * from v$version
Mô tả cách bạn kết nối với cơ sở dữ liệu:trình điều khiển, ORM, ngôn ngữ lập trình. Cung cấp tên và / hoặc số phiên bản.
Mô tả truy vấn
Đăng văn bản truy vấn. Cố gắng đơn giản hóa - hiển thị một ví dụ có thể tái tạo tối thiểu .
Ví dụ - bạn có vấn đề truy vấn kết hợp 10 bảng. Kiểm tra xem bạn có thấy các triệu chứng tương tự trong một truy vấn có 9 hoặc 8 phép nối hay không. Bước xuống cho đến khi bạn thấy sự cố và chỉ hiển thị truy vấn đã giảm.
Có, điều này tốn kém, nhưng nó làm tăng cơ hội bạn nhận được hỗ trợ! Truy vấn càng nhỏ thì càng thu hút được nhiều người ủng hộ.
Mô tả kế hoạch thực hiện
Để có được kế hoạch thực thi, hãy chạy câu lệnh này (thay thế văn bản truy vấn của bạn)
EXPLAIN PLAN SET STATEMENT_ID = '<some_id>' into plan_table FOR
select * from .... -- your query here
;
Kế hoạch thực thi được lưu trữ trong PLAN_TABLE
, để xem nó chạy truy vấn này
SELECT * FROM table(DBMS_XPLAN.DISPLAY('plan_table', '<some_id>','ALL'));
Hiển thị kết quả hoàn chỉnh (không chỉ bảng với kế hoạch thực hiện). Phần bổ sung quan trọng có thể là phần vị ngữ và phần ghi chú bên dưới.
Ví dụ cho select * from dual where dummy = :1;
Plan hash value: 272002086
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 | 2 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| DUAL | 1 | 2 | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$1 / [email protected]$1
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("DUMMY"=:1)
Column Projection Information (identified by operation id):
-----------------------------------------------------------
1 - "DUMMY"[VARCHAR2,1]
Không cắt và dán kết quả đồ họa về kế hoạch giải thích IDE của bạn.
Kế hoạch thực thi này có phải là kế hoạch thực được thực hiện không?
Thật không may là không phải luôn luôn như vậy. Có một số lý do được giải thích kế hoạch thực hiện có thể khác với kế hoạch thực.
Nếu bạn nghi ngờ (đặc biệt là khi bạn thấy một kế hoạch tốt, nhưng truy vấn chạy không tốt), bạn có thể tách kế hoạch khỏi bộ đệm ẩn DB cung cấp SQL_ID
.
SELECT t.* FROM table(DBMS_XPLAN.DISPLAY_CURSOR('<SQL_ID>',null,'ALL')) t;
Có thể tìm thấy SQL_ID cho truy vấn hiện đang chạy (hoặc đang chạy trong thời gian ngắn và vẫn được lưu vào bộ nhớ đệm) với đối sánh văn bản và / hoặc người dùng cơ sở dữ liệu:
select sql_id, sql_fulltext from v$sql a where
lower(sql_text) like lower('%<some identifying part of the query text>%')
and parsing_schema_name = '<user running the query>';
Nếu bạn có giấy phép AWR, bạn có thể nhận được kế hoạch thực thi từ đó, ngay cả đối với các truy vấn đang chạy trong lịch sử.
SELECT t.*
FROM table(DBMS_XPLAN.DISPLAY_AWR('10u2rj016s96k' )) t;
SQL_ID có thể được tìm thấy bằng cách sử dụng
select sql_id, sql_text
from dba_hist_sqltext a
where lower(sql_text) like lower('%<some identifying part of the query text>%')
Mô tả dữ liệu
Hiển thị DDL của các bảng và chỉ mục trên các bảng đó.
Đề cập đến nếu gần đây thống kê trình tối ưu hóa được thu thập và hiển thị dbms_stats
đã sử dụng thu thập tuyên bố.
Đối với (các) bảng quan trọng, hãy cung cấp thông tin về kích thước phân đoạn, số hàng, phân vùng, ...
Đối với các cột được sử dụng trong truy cập hoặc liên kết cung cấp thông tin về số lượng các giá trị riêng biệt. Các giá trị có được phân phối đồng đều hay lệch (ví dụ:một số lượng nhỏ các giá trị thường xuyên xảy ra và một số lớn các giá trị hiếm gặp). Bạn có xác định biểu đồ không?
Còn gì khác không?
Tất nhiên đây chỉ là thông tin cơ bản và các thông tin khác vẫn có thể được yêu cầu, chẳng hạn như thống kê hệ thống hoặc các thông số của trình tối ưu hóa. P>
Chúc may mắn!