Làm thế nào để bạn có được kế hoạch giải thích?


10

Ai đó có thể vui lòng giải thích một chút về kế hoạch giải thích không và làm thế nào để có được kế hoạch giải thích cho một truy vấn. Ngoài ra, nếu có bất kỳ tập lệnh sql nào có thể được sử dụng làm tiện ích cho việc này, điều đó sẽ rất tuyệt.


1
"nếu có bất kỳ tập lệnh sql nào có thể được sử dụng làm tiện ích cho việc này" bạn đang tìm kiếm loại tiện ích nào?
Derek Downey

2
Nhiều công cụ phát triển SQL có GUI rất dễ sử dụng để có kế hoạch thực hiện. Nhà phát triển Oracle SQL có một. Bạn có quyền truy cập vào bất kỳ công cụ như vậy, hoặc bạn đặc biệt muốn làm điều này từ các tập lệnh?
Thất vọngWithFormsDesigner

Tôi có Oracle SQL Developer nhưng muốn biết các tập lệnh.
dùng419534

2
Nếu bạn đã theo dõi một khóa học với Jonathan Lewis , thì bạn sẽ biết rằng có 8 cách khác nhau để đưa một kế hoạch thực hiện ra khỏi Oracle. Vui lòng upvote bình luận này nếu bạn muốn tôi thêm một câu trả lời liệt kê tất cả các phương pháp khác nhau.
Colin 't Hart

Câu trả lời:


9

Bạn có thể sử dụng gói DBMS_XPLAN :

SQL> explain plan for select * from dual;

Explained

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
--------------------------------------------------------------------
| Id  | Operation            |  Name       | Rows  | Bytes | Cost  |
--------------------------------------------------------------------
|   0 | SELECT STATEMENT     |             |     1 |     2 |     2 |
|   1 |  TABLE ACCESS FULL   | DUAL        |     1 |     2 |     2 |
--------------------------------------------------------------------
Note: cpu costing is off

5

Câu lệnh EXPLAIN PLAN hiển thị các kế hoạch thực hiện được chọn bởi trình tối ưu hóa cho các câu lệnh CHỌN, CẬP NHẬT, XÁC NHẬN và XÓA. Kế hoạch thực hiện câu lệnh là chuỗi các hoạt động mà cơ sở dữ liệu thực hiện để chạy câu lệnh.

EXPLAIN PLAN FOR ...

Thay thế ... bằng Câu lệnh SQL của bạn. Sau khi chạy này chạy như sau để xem kế hoạch:

SELECT * FROM table(dbms_xplan.display);

Để biết thêm thông tin, hãy xem phần Tổng quan hoặc Sử dụng trong Hướng dẫn điều chỉnh hiệu suất Oracle 11g.


1

Đây là một câu hỏi rất phổ biến, vì vậy tôi quyết định biến câu trả lời này thành một bài viết .

Kế hoạch thực hiện SQL ước tính

Kế hoạch thực hiện ước tính được tạo bởi Trình tối ưu hóa mà không thực hiện truy vấn SQL. Bạn có thể tạo kế hoạch thực hiện ước tính từ bất kỳ máy khách SQL nào bằng cách sử dụng EXPLAIN PLAN FOR hoặc bạn có thể sử dụng Oracle SQL Developer cho nhiệm vụ này.

KẾ HOẠCH GIẢI THÍCH CHO

Khi sử dụng Oracle, nếu bạn thêm EXPLAIN PLAN FORlệnh vào một truy vấn SQL đã cho, cơ sở dữ liệu sẽ lưu trữ kế hoạch thực hiện ước tính trong liên kết PLAN_TABLE:

EXPLAIN PLAN FOR
SELECT p.id
FROM post p
WHERE EXISTS (
  SELECT 1
  FROM post_comment pc
  WHERE
    pc.post_id = p.id AND
    pc.review = 'Bingo'
)
ORDER BY p.title
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY

Để xem kế hoạch thực hiện ước tính, bạn cần sử dụng DBMS_XPLAN.DISPLAY, như được minh họa trong ví dụ sau:

SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY (FORMAT=>'ALL +OUTLINE'))

Tùy chọn định dạng ALL + OUTLINE cho phép bạn biết thêm chi tiết về kế hoạch thực hiện ước tính hơn là sử dụng tùy chọn định dạng mặc định.

Nhà phát triển SQL SQL

Nếu bạn đã cài đặt SQL Developer, bạn có thể dễ dàng nhận được kế hoạch thực hiện ước tính cho bất kỳ truy vấn SQL nào mà không cần phải thêm lệnh EXPLAIN PLAN FOR:

nhập mô tả hình ảnh ở đây

Kế hoạch thực thi SQL thực tế

Kế hoạch thực thi SQL thực tế được Trình tối ưu hóa tạo ra khi chạy truy vấn SQL. Vì vậy, không giống như Kế hoạch thực hiện ước tính, bạn cần thực hiện truy vấn SQL để có được kế hoạch thực hiện thực tế của nó.

Kế hoạch thực tế không nên khác biệt đáng kể so với kế hoạch ước tính, miễn là số liệu thống kê bảng đã được thu thập đúng cách bởi cơ sở dữ liệu quan hệ cơ bản.

GATHER_PLAN_STATISTICS gợi ý truy vấn

Để hướng dẫn Oracle lưu trữ kế hoạch thực hiện thực tế cho một truy vấn SQL đã cho, bạn có thể sử dụng GATHER_PLAN_STATISTICSgợi ý truy vấn:

SELECT /*+ GATHER_PLAN_STATISTICS */
  p.id
FROM post p
WHERE EXISTS (
  SELECT 1
  FROM post_comment pc
  WHERE
    pc.post_id = p.id AND
    pc.review = 'Bingo'
)
ORDER BY p.title
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY

Để hình dung kế hoạch thực hiện thực tế, bạn có thể sử dụng DBMS_XPLAN.DISPLAY_CURSOR:

SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(FORMAT=>'ALLSTATS LAST ALL +OUTLINE'))

Kích hoạt THỐNG KÊ ở cấp kết nối DB

Nếu bạn muốn nhận các kế hoạch thực hiện cho tất cả các truy vấn được tạo trong một phiên nhất định, bạn có thể đặt STATISTICS_LEVELcấu hình phiên thành TẤT CẢ:

ALTER SESSION SET STATISTICS_LEVEL='ALL'

Điều này sẽ có tác dụng tương tự như đặt GATHER_PLAN_STATISTICSgợi ý truy vấn trên mỗi truy vấn thực hiện. Vì vậy, giống như với GATHER_PLAN_STATISTICSgợi ý truy vấn, bạn có thể sử dụng DBMS_XPLAN.DISPLAY_CURSORđể xem kế hoạch thực hiện thực tế.

Bạn nên đặt lại STATISTICS_LEVELcài đặt về chế độ mặc định sau khi hoàn tất việc thu thập các kế hoạch thực hiện mà bạn quan tâm. Điều này rất quan trọng, đặc biệt nếu bạn đang sử dụng nhóm kết nối và kết nối cơ sở dữ liệu được sử dụng lại.

ALTER SESSION SET STATISTICS_LEVEL='TYPICAL'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.