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. . 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ể. 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. Đ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.