Tải bản đầy đủ (.pdf) (5 trang)

Những thói quen tốt khi viết câu lệnh T-SQL- P8 potx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (285.85 KB, 5 trang )

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:
SELECT * FROM
AdventureWorks.Production.Product
GO
SELECT * FROM
AdventureWorks.Production.Product
GO
Như bạn thấy, câu lệnh thứ hai có chứa vài khoảng
trắng thừa giữa FROM và tên đối tượng. Các khoảng
trắng thừa này là nguyên nhân khiến máy chủ SQL
nghĩ rằng đây là hai câu lệnh khác nhau, từ đó dẫn
đến việc tạo ra hai sơ đồ lưu cache khác nhau cho hai
câu lệnh. Trong trường hợp này, hiển nhiên bạn dễ
dàng nhận ra sự khác biệt giữa hai câu lệnh bởi lẽ các
khoảng trắng nằm ở giữa câu lệnh. Thế nhưng nếu
bạn vô tình thêm khoảng trắng phía trước mệnh đề
SELECT hoặc phía cuối câu lệnh, bạn sẽ không thể
nhận ra các khoảng trắng và câu lệnh sẽ trông giống
hệt nhau. Tuy nhiên, máy chủ SQL thì có thể nhìn
thấy, và thế là nó tạo ra nhiều sơ đồ lưu cache vì các
khoảng trắng thừa đó.
Khi máy chủ SQL nhìn vào đoạn code, nó sẽ đem so
sánh với các sơ đồ sẵn có trong cache thủ tục. Nếu
xác định đoạn code giống hệt sơ đồ lưu cache sẵn có,
máy chủ SQL không cần biên dịch và lưu sơ đồ vào
bộ nhớ nữa. Máy chủ SQL sẽ tái sử dụng các sơ đồ
có trong cache đối với những đoạn code giống nhau.
Để tối ưu hóa mã nguồn, bạn cần đảm bảo việc tái sử
dụng sơ đồ lưu cache bất cứ khi nào có thể.


Khi bạn đang xây dựng mã nguồn ứng dụng trong đó
có sử dụng các câu lệnh T-SQL mà không dùng SP,
bạn cần phải cẩn trọng để đảm bảo nhận được sơ đồ
có khả năng tái sử dụng cao nhất có thể. Chúng ta
thường dùng phương pháp copy - paste khi muốn sử
dụng cùng một đoạn code trong các phần khác nhau
của ứng dụng. Tuy nhiên như bạn thấy trong các ví
dụ trên, bạn cần cẩn thận khi thực hiện thao tác này.
Chỉ cần một vài khoảng trắng thừa hoặc một ghi chú
nhỏ cũng khiến máy chủ SQL tạo ra nhiều sơ đồ lưu
cache khác nhau.
Nâng hiệu suất lên tối đa và giảm thiểu bộ nhớ
Để tối ưu hóa mã nguồn, nếu chỉ quan tâm đến thiết
kế cơ sở dữ liệu thôi thì chưa đủ, bạn còn cần để ý
đến từng chi tiết nhỏ hơn chẳng hạn như các khoảng
trắng và ghi chú. Nếu bạn không lưu tâm đến những
chi tiết quanh các câu lệnh T-SQL giống nhau, bạn có
thể khiến máy chủ SQL tạo ra nhiều sơ đồ lưu cache.
Có thể việc có vài sơ đồ lưu cache thừa 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.

×