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

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.
Phần 1
Phần 2
Khám phá sơ đồ lưu bộ nhớ đệm
Bạ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ụ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ột số 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ến máy chủ SQL phải thực hiện thêm nhiều việc
để biên dị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ộ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ê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ọi cù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áy chủ SQL nếu bạn viết câu lệ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ạn khám phá các sơ đồ lưu. Bằng

SELECT * FROM AdventureWorks.Production.Product return records
GO
SELECT stats.execution_count AS exec_count,
p.size_in_bytes as [size],
[sql].[text] as [plan_text]
FROM sys.dm_exec_cached_plans p
outer apply sys.dm_exec_sql_text (p.plan_handle) sql
join sys.dm_exec_query_stats stats ON stats.plan_handle = p.plan_handle
GO
Trong đoạn code trên, trước tiên tôi giải phóng cache thủ tục bằng cách chạ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ông nê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ớ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ếp hai 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ết quả nhận được khi chạy đoạn code trên:
exec_count size plan_text

1 40960 SELECT * FROM AdventureWorks.Production.Product return records
1 40960 SELECT * FROM AdventureWorks.Production.Product
Như bạn thấy, hai câu lệnh SELECT trên tạo ra hai sơ đồ lưu cache khác nhau 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 toàn giống nhau. Câu lệnh SELECT thứ hai hơi khác một chút vì
có thêm ghi chú. Ngoài ra, các bạn hãy để ý kích cỡ sơ đồ: 40960 byte - kích cỡ bộ nhớ
quá lớn dành cho một câu lệnh T-SQL rất đơn giản. Vì thế, bạn nên cẩn thận khi thêm ghi
chú vào code, tránh để máy chủ tạo ra nhiều sơ đồ thừa.
Một nguyên nhân khác dẫn đến việc tạo ra nhiều sơ đồ lưu cache cho những câu lệnh T-
SQL giống nhau đó là các khoảng trắng. Sau đây là hai câu lệnh giống nhau ngoại trừ các
khoảng trắng:

trong bộ nhớ không phải quá quan trọng, tuy nhiên là một lập trình viên, chúng ta cần cố
gắng hết khả năng để nâng cao hiệu suất máy chủ và giảm thiểu tài nguyên sử dụng. Và
một trong những cách để thực hiện mục tiêu trên, đó là tránh tạo ra nhiều sơ đồ lưu cache
cho các câu lệnh T-SQL giống nhau.


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status