Danh mục

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

Số trang: 4      Loại file: pdf      Dung lượng: 219.04 KB      Lượt xem: 13      Lượt tải: 0    
Hoai.2512

Phí lưu trữ: miễn phí Tải xuống file đầy đủ (4 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:

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).
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 3Những thói quen tốt khi viết câu lệnh T-SQL (Phần 3)Nguồn:quantrimang.comQuản Trị Mạng - Trong phần ba này, bài viết sẽ giới thiệu cho bạn cách viết câulệ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ưucache 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ạn chỉ sử dụngchú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ùngmột truy vấn trong cache thủ tục cùng lúc không? Khoảng trống các sơ đồ lưucache sử dụng là bao nhiêu? Trên đây là một số câu hỏi bạn cần trả lời để chắcrằng bạn đã tối ưu hóa cache thủ tục và giảm thiểu số lượng sơ đồ lưu cachemà ứ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ủabạn là nguyên nhân khiến máy chủ SQL phải thực hiện thêm nhiều việc để biêndịch và lưu cache cá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ần tạo mộtbản sơ đồ thực thi. Để tạo bản sơ đồ thực thi, trước tiên máy chủ SQL phải tiêutốn những nguồn tài nguyên giá trị như CPU nhằm biên dị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ọicùng một câu lệnh T-SQL nhiều hơn một lần. Bạn có thể cải thiện hiệu suất máychủ SQL nếu bạn viết câu lệnh T-SQL để tăng cường tái sử dụng sơ đồ lưucache 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 (DynamicManagement Views - Cửa sổ quản lý động) cho phép bạn khám phá các sơ đồlưu. Bằng cách sử dụng các DMV, bạn có thể tìm hiểu được nhiều điều về cácsơ đồ lưu cache. Sau đây là danh sách tóm tắt nhữ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ìmhiể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ăng tá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. Tuynhiên, không phải tất cả các đoạn code được thực thi bởi máy chủ SQL đều nằmtrong các SP. Vài ứng dụng có thể được viết bằng cá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ẩnthận khi ghi chú hoặc đặt khoảng trắng bởi nó có thể là nguyên nhân khiến máychủ SQL tạo nhiều sơ đồ lưu cache 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 -- returnrecordsGONhư bạn thấy, tôi có hai câu lệnh T-SQL giống nhau. Cả hai đều trả về tất cả bảnghi 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ách sử dụng các DMV trong SQLServer 2005 và SQL Server 2008. Để xem các sơ đồ tạo bởi hai câu lệnh T-SQLtrên, tôi sẽ chạy đoạn code sau:DBCC FREEPROCCACHEGOSELECT * FROM AdventureWorks.Production.ProductGOSELECT * FROM AdventureWorks.Production.Product -- returnrecordsGOSELECT 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 ON stats.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ách chạylệnh DBCC FREEPROCCACHE. Lệnh này xóa bỏ toàn bộ sơ đồ thực thi trongbộ nhớ. Tuy nhiên tôi cũng xin có lời lưu ý rằng bạn không nên sử dụng lệnh nàykhi làm việc trong doanh nghiệp bởi nó sẽ xóa bỏ toàn bộ sơ đồ lưu cache. Điềunày có thể gây ra những tác động to lớn tới công việc của bạn do những sơ đồthường dùng đều bị biên dịch lại. Sau khi giải phóng cache thủ tục, tôi chạy tiếphai câu lệnh SELECT khác nhau. Cuối cùng, tôi liên kết thông tin từ các DMV lạiđể trả về thông tin sơ đồ lưu cache của hai câu lệnh SELECT. Sau đây là kếtquả nhận được khi chạy đoạn code trên:exec_count size plan_text---------- ----- ---------1 40960 SELECT * FROMAdventureWorks.Production.Product -- return records1 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ác nhauvà mỗi sơ đồ được thực thi 1 lần (exec_count number). Sở dĩ chuyện này xảy ralà vì hai câu lệnh ...

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

Gợi ý tài liệu liên quan: