SET SHOWPLAN_ALL (T-SQL)

Một phần của tài liệu Tối ưu hóa truy vấn trong cơ sở dữ liệu phân bố (Trang 30 - 39)

IV. CÁC KHÁI NIỆM TRONG VIỆC ĐIỀU CHỈNH TRUY VẤN PHỨC TẠP:

V.1. SET SHOWPLAN_ALL (T-SQL)

Microsoft SQL Server không thực thi câu lệnh SQL mà chỉ trả lại thông tin chi tiết về cách câu SQL được thực thi và đánh giá các yêu cầu về tài nguyên cho câu SQL.

Cú pháp:

SET SHOWPLAN_ALL {ON/OFF}

Việc thực thi lệnh SET SHOWPLAN_ALL xảy ra trong thời gian thực thi không phải trong thời gian dịch.

Khi SET SHOWPLAN_ALL ON được thực hiện, SQL Server trả lại thông tin về quá trình thực thi của mỗi câu lệnh mà không thực thi chúng. Khi tùy chọn (option) này được chọn, các thông tin về tất cả các lệnh SQL con đều được trả lại cho đến khi tùy chọn này được bỏ đi. Ví dụ, nếu lệnh CREATE TABLE được thực hiện trong khi SET SHOWPLAN_ALL ON, SQL Server sẽ báo lỗi về các câu truy vấn con có liên quan đếnbảng vừa được tạo trong câu lệnh tạo bảng ở trên, bởi vì bảng này không thực sự được tạo ra. Do đó, các tham chiếu con đến bảng này sẽ bị thất bại. Khi SET SHOWPLAN_ALL OFF, SQL Server thực thi các lệnh mà không tạo ra báo cáo.

SET SHOWPLAN_ALL thường được dùng trong các ứng dụng được viết để quản lý đầu ra của nó.

SET SHOWPLAN_ALL không thể thực hiện trong một stored procedure; nó phải được thực hiện trong một batch (gói các lệnh liên tiếp).

SET SHOWPLAN_ALL trả lại thông tin là một tập các hàng biểu diễn cho một cấu trúc cây có thứ bậc, mà cây này biểu diễn các bước SQL thực hiện khi thực thi một lệnh SQL. Mỗi lệnh SQL tương ứng một hàng trong bảng báo cáo, tiếp theo là các thông tin chi tiết về các bước thực thi.

Trong các hàng chia thành các cột sau: StmtText

Cho các hàng không phải kiểu PLAN_ROW, cột này chứa câu lệnh SQL. Cho các hàng kiểu PLAN_ROW, cột này chứa tên các tác vụ vật lý và tên các tác vụ luận lý. Theo sau cột này có thể có phần mô tả cho các tác vụ vật lý.

StmID

Số của câu SQL trong batch hiện tại. NodeID

ID của câu SQL hiện tại. Parent

ID của bước cha. PhysicalOP

Thuật toán hiện thực cho node này. Chỉ cho các hàng kiểu PLAN_ROW. LogicalOP

Argument

Cung cấp thông tin bổ sung về các tác vụ được thực hiện. Nội dung của cột này phụ thuộc vào tác vụ vật lý.

DefinedValues

Chứa danh sách các giá trị được phân cách bởi dấu phẩy. Các giá trị này có thể là các thuộc tính trong mệnh đề SECLECT và mệnh đề WHERE, hoặc thuộc tính do bộ xử lý SQL tạo ra để thực thi câu truy vấn. Chỉ cho các hàng kiểu PLAN_ROW.

EstimateRows

Số hàng ước lượng của tác vụ này. Chỉ cho các hàng kiểu PLAN_ROW. EstimateIO

Chi phí IO ước lượng được. Chỉ cho các hàng kiểu PLAN_ROW. EstimateCPU

Chi phí CPU ước lượng được cho tác vụ này. Chỉ cho các hàng kiểu PLAN_ROW. AvgRowSize

Kích thước trung bình của hàng (tính bằng Byte) được chuyển cho tác vụ. TotalSubtreeCost

Chi phí (tổng cộng) của tác vụ này và tất cả các tác vụ con của nó. OutputList

Danh sách được phân cách bởi dấu phẩy chứa các tên cột được kết bởi tác vụ hiện tại. Warnings

Chứa danh sách các thông điệp báo lỗi liên quan đến tác vụ hiện tại. Thông điệp báo lỗi có thể chứa chuỗi “NO STATS: ()” với một danh sách các tên cột. Thông điệp báo lỗi này có nghĩa là bộ tối ưu hóa truy vấn định tạo quyết định dựa trên các thông số thống kê cho cột này nhưng không có. Kết quả là bộ tối ưu hóa truy vấn phải đoán, điều này có thể dẫn đến một chiến lược thực thi truy vấn kém hiệu quả. Cột này cũng có thể chứa chuỗi “MISSING JOIN

PREDICATE”, có nghĩa là việc kết xảy ra mà không có mệnh đề kết. Việc đột nhiên mất một mệnh đề kết có thể làm cho câu truy vấn chạy mất thời gian và trả lại kết quả là một tập rất lớn. Nếu cảnh báo này xuất hiện, kiểm tra lại rằng sự thiếu mệnh đề kết là cố ý (ta kết hai bảng lại).

Type

Kiểu của node. Với node cha của mỗi truy vấn, cột này ghi kiểu của câu truy vấn giao dịch (ví dụ: SELECT, INSERT, EXECUTE, và vân vân...). Với các node con biểu hiện cho các kế hoạch thực thi, kiểu sẽ là PLAN_ROW.

Parallel

0 = tác vụ không chạy song song. 1 = tác vụ chạy song song.

Ví dụ:

Hai câu lệnh sau dùng SET SHOWPLAN_ALL để hiển thị cách SQL Server phân tích và tối ưu việc sử dụng chỉ mục trong các câu truy vấn.

Câu truy vấn thứ nhất dùng phép so sánh = trong mệnh đề WHERE trên cột dùng chỉ mục. Ta sẽ có kết quả là Clustered Index Seek trong cột Logical và tên của chỉ mục trong cột

Argument.

Câu truy vấn thứ hai dùng toán tử LIKE trong mệnh đề WHERE. Việc này buộc SQL Server dùng phương pháp duyệt chỉ mục clustered index và tìm dữ liệu thỏa mệnh đề WHERE. Ta sẽ có kết quả là Clustered Index Scan trong cột Logical và tên của chỉ mục trong cột

Argument, và Filter trong cột Logical và mệnh đề WHERE trong cột Argument.

Các giá trị trong cột EstimateRows và cột TotalSubtreeCost của câu truy vấn sử dụng chỉ mục nhỏ hơn so với câu thứ hai, điều này cho thấy câu truy vấn đầu được thực thi nhanh hơn nhiều và và dùng ít tài nguyên hơn câu truy vấn sau không dùng chỉ mục.

USE pubs GO SET SHOWPLAN_ALL ON GO -- First query. SELECT au_id FROM authors WHERE au_id = '409-56-7008' GO -- Second query. SELECT city FROM authors

WHERE city LIKE 'San%' GO

SET SHOWPLAN_ALL OFF GO

---

Kết quả:

(Ghi chú: UPKCL_auidind: clustered index tạo trên cột au_id)

--- StmtText

-- First query. SELECT au_id FROM authors

WHERE au_id = '409-56-7008'

|--Clustered Index Seek(OBJECT:([pubs].[dbo].[authors].[UPKCL_auidind]), SEEK:([authors]. [au_id]=[@1]) ORDERED)

StmtId :12 NodeId :1 Parent :1

PhysicalOp: Clustered Index Seek LogicalOp : Clustered Index Seek

Argument : OBJECT:([pubs].[dbo].[authors].[UPKCL_auidind]), SEEK:([authors]. [au_id]=[@1]) ORDERED DefinedValues :[authors].[au_id] EstimateRows 1.0 EstimateIO 6.3284999E-3 EstimateCPU 7.9600002E-5 AvgRowSize 16 TotalSubtreeCost 0.0064081 OutputList [authors].[au_id] Warnings NULL Type PLAN_ROW Parallel 0 EstimateExecutions 1.0 (2 row(s) affected) ---StmtText -- Second query. SELECT city FROM authors

WHERE city LIKE 'San%'

|--Clustered Index Scan(OBJECT:([pubs].[dbo].[authors].[UPKCL_auidind])) StmtId 13 13 NodeId 3 4 Parent 1 3 PhysicalOp Filter

Clustered Index Scan LogicalOp Filter

Clustered Index Scan Argument WHERE:(like([authors].[city],San%')) OBJECT:([pubs].[dbo].[authors].[UPKCL_auidind]) DefinedValues NULL [authors].[city] EstimateRows 2.0 23.0 EstimateIO 0.0 3.7578501E-2 EstimateCPU 4.1399999E-6 0.0001038 AvgRowSize 21 21 TotalSubtreeCost 3.7686441E-2 3.7682299E-2 OutputList [authors].[city] [authors].[city] Warnings NULL NULL Type PLAN_ROW PLAN_ROW Parallel 0 0

EstimateExecutions 1.0 1.0 (3 row(s) affected) --- Hình minh họa: --- V.2. SET STATISTICS IO (T_SQL)

Ra lệnh cho SQL Server hiển thị thông tin liên quan đến số lượng các hoạt động truy xuất đĩa tạo bởi lệnh Transact-SQL.

Cú pháp:

SET STATISTICS IO {ON/OFF}

Sau khi tùy chọn STATISTICS IO được chọn, các thông tin thống kê được hiển thị. Khi tắt, thông tin sẽ không được hiển thị. Sau khi tùy chọn được chọn, thông tin về tất cả các lệnh Transact-SQL con sẽ được hiển thị cho đến khi tùy chọn được tắt.

Có tất cả 5 mục trong kết quả thu được:

table: tên của bảng

scan coutn: số lượng scan (việc duyệt toàn bộ bảng) được thực hiện. logical reads: số trang bộ nhớ đọc từ cache.

physical reads: số trang bộ nhớ đọc từ đĩa.

read-ahead reads: số trang bộ nhớ đặt trong cache cho câu truy vấn.

Việc thiết lập tùy chọn SET STATISTICS IO được thực hiện trong thời gian thực thi, không phải trong thời gian dịch.

Quyền dùng SET STATISTICS IO mặc định được cấp cho mọi user.

Ví dụ: use pubs GO SET STATISTICS IO ON GO SELECT au_id FROM authors WHERE au_id = '409-56-7008' GO SELECT city FROM authors

WHERE city LIKE 'San%' GO

SET STATISTICS IO OFF GO use pubs GO SET STATISTICS IO ON GO SELECT au_id FROM authors WHERE au_id = '409-56-7008' GO

SELECT city FROM authors

WHERE city LIKE 'San%' GO

SET STATISTICS IO OFF GO --- Kết quả: --- au_id --- 409-56-7008 (1 row(s) affected)

Table 'authors'. Scan count 1, logical reads 2, physical reads 2, read-ahead reads 0. city

--- San Jose

San Francisco (2 row(s) affected)

---

Hình minh họa:

---

Một phần của tài liệu Tối ưu hóa truy vấn trong cơ sở dữ liệu phân bố (Trang 30 - 39)

Tải bản đầy đủ (DOCX)

(43 trang)
w