Danh mục

Những thói quen tốt khi viết câu lệnh T-SQL (Phần 3)

Số trang: 5      Loại file: pdf      Dung lượng: 168.89 KB      Lượt xem: 10      Lượt tải: 0    
10.10.2023

Phí lưu trữ: miễn phí Tải xuống file đầy đủ (5 trang) 0
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Những thói quen tốt khi viết câu lệnh T-SQL (Phần 3)Trong phần ba này, bài viết sẽ giới thiệu cho bạn cách viết câu lệnh TSQL để đẩy mạnh việc tái sử dụng sơ đồ lưu cache (bộ nhớ đệm).
Nội dung trích xuất từ tài liệu:
Những thói quen tốt khi viết câu lệnh T-SQL (Phần 3) Những thói quen tốt khi viết câu lệnh T-SQL (Phần 3)Trong phần ba này, bài viết sẽ giới thiệu cho bạn cách viết câu lệnh T-SQL đ ể đẩy mạnh việc tái sử dụng sơ đồ lưu cache (bộ nhớ đệm). Hiểu rõvấn đề các khoảng trắng và ghi chú tác động thế nào tới việc tạo sơ đồmới lưu cache hay tái sử dụng sơ đồ sẵn có sẽ giúp bạn giảm thiểu sốlượng sơ đồ mà ứng dụng của bạn phải lưu cache.Khám phá sơ đồ lưu bộ nhớ đệmBạn đã tận dụng được lợi thế từ việc lưu sơ đồ trên bộ nhớ đệm chưa?Bạn đã khai thác các sơ đồ lưu cache đến mức nào? Ứ ng dụng của bạnchỉ sử dụng chúng một lần hay tận dụng nhiều lần? Bạn có nhiều sơ đồlưu cache cho cùng một truy vấn trong cache thủ tục cùng lúc không?Khoảng trống các sơ đồ lưu cache sử dụng là bao nhiêu? Trên đây là mộtsố câu hỏi b ạn cần trả lời để chắc rằng bạn đã tối ưu hóa cache thủ tục vàgiảm thiểu số lượng sơ đồ lưu cache mà ứng dụng tạo ra. Có một vài vấnđề nhỏ trong cách viết câu lệnh T-SQL của bạn là nguyên nhân khiếnmáy chủ SQL phải thực hiện thêm nhiều việc để biên dịch và lưu cachecác sơ đồ thực thi cho cùng một đoạn code.Trước khi máy chủ SQL có thể tiến hành xử lý đoạn code T-SQL, nó cầntạo một bản sơ đồ thực thi. Để tạo bản sơ đồ thực thi, trước tiên máy chủSQL phải tiêu tốn những nguồn tài nguyên giá trị như CPU nhằm biêndịch code T-SQL. Khi sơ đ ồ được tạo xong, nó sẽ được lưu cache để cóthể tái sử dụng khi ứng dụng gọi cùng một câu lệnh T-SQL nhiều hơnmột lần. Bạn có thể cải thiện hiệu suất máy chủ SQL nếu bạn viết câulệnh T-SQL để tăng cường tái sử dụng sơ đồ lưu cache với những đoạn T-SQL thường xuyên được thực thi.Với sự xuất hiện của SQL Server 2005, Microsoft cung cấp các DMV(Dynamic Management Views - Cửa sổ quản lý động) cho phép bạnkhám phá các sơ đ ồ lưu. Bằng cách sử dụng các DMV, bạn có thể tìmhiểu được nhiều điều về các sơ đ ồ lưu cache. Sau đây là danh sách tóm tắtnhững thứ bạn có thể nhận biết: Các đoạn text liên quan tới sơ đồ lưu cache  Số lần sơ đồ lưu cache được thực thi  Kích cỡ sơ đồ lưu cache Ở đoạn sau của bài viết, tôi sẽ hướng dẫn các bạn cách sử dụng DMV đểtìm hiểu thông tin sơ đồ lưu cache.Tạo nhiều sơ đồ vì các ghi chú hoặc khoảng trắng thừaTôi chắc rằng các bạn đều ủng hộ ý tưởng đặt code vào các thủ tục lưu trữ(Stored Procedure - SP). Chúng ta thực hiện việc này nhằm tăng khả năngtái sử dụng code trong khuôn khổ một ứng dụng đơn lẻ hoặc trên nhiềuứng dụng. Tuy nhiên, không phải tất cả các đoạn code được thực thi bởimáy chủ SQL đều nằm trong các SP. Vài ứng dụng có thể được viết bằngcác lệnh T-SQL dạng in-line (lệnh thô). N ếu bạn đang viết các đoạn mãT-SQL dạng thô, bạn cần phải cẩn thận khi ghi chú hoặc đặt khoảng trắngbởi nó có thể là nguyên nhân khiến máy chủ SQL tạo nhiều sơ đồ lưucache cho cùng một đoạn code T-SQL.Sau đây là một ví dụ gồm hai câu lệnh T-SQL khác nhau:SELECT * FROM AdventureWorks.Production.ProductGOSELECT * FROM AdventureWorks.Production.Product -- return recordsGONhư b ạn thấy, tôi có hai câu lệnh T-SQL giống nhau. Cả hai đều trả về tấtcả bản ghi từ bảng AdventureWorks.Production.Product. Vậy bạn nghĩmáy chủ SQL sẽ tạo ra bao nhiêu sơ đồ lưu cache khi chạy đoạn mã trên?Để trả lời câu hỏi này, tôi sẽ tìm hiểu thông tin sơ đồ lưu cache b ằng cáchsử dụng các DMV trong SQL Server 2005 và SQL Server 2008. Để xemcác sơ đồ tạo bởi hai câu lệnh T-SQL trên, tôi sẽ chạy đoạn code sau:DBCC FREEPROCCACHEGOSELECT * FROM AdventureWorks.Production.ProductGOSELECT * FROM AdventureWorks.Production.Product -- return recordsGOSELECT stats.execution_count AS exec_count, p.size_in_bytes as [size], [sql].[text] as [plan_text]FROM sys.dm_exec_cached_plans pouter apply sys.dm_exec_sql_text (p.plan_handle)sqljoin sys.dm_exec_query_stats stats ONstats.plan_handle = p.plan_handleGOTrong đo ạn code trên, trước tiên tôi giải phóng cache thủ tục bằng cáchchạy lệnh DBCC FREEPROCCACHE. Lệnh này xóa bỏ toàn bộ sơ đồthực thi trong bộ nhớ. Tuy nhiên tôi cũng xin có lời lưu ý rằng bạn khôngnên sử dụng lệnh này khi làm việc trong doanh nghiệp bởi nó sẽ xóa bỏtoàn bộ sơ đồ lưu cache. Điều này có thể gây ra những tác động to lớn tớicông việc của bạn do những sơ đồ thường dùng đều bị biên dịch lại. Saukhi giải phóng cache thủ tục, tôi chạy tiếp hai câu lệnh SELECT khácnhau. Cuối cùng, tôi liên kết thông tin từ các DMV lại để trả về thông tinsơ đồ lưu cache của hai câu lệnh SELECT. Sau đây là kết quả nhận đượckhi chạy đoạn code trên:exec_count size plan_text---------- ----- ---------1 40960 SELECT * FROMAdventureWorks.Production.Product -- returnrecords1 40960 SELECT * FROMAdventureWorks.Production.ProductNhư b ạn thấy, hai câu lệnh SELECT trên tạo ra hai sơ đồ lưu cache khácnhau và mỗi sơ đồ được thực thi 1 lần (exec_count number). Sở dĩchuyện này xảy ra là vì hai câu lệnh SELECT không hoàn ...

Tài liệu được xem nhiều: