Tôi thường được hỏi về sự khác biệt giữa SQL Profile và SQL Plan Baseline và tại sao SQL Profile có thể được chia sẻ nhưng SQL Plan Baseline thì không. Vì vậy, tôi nghĩ sẽ là một ý tưởng hay nếu viết một bài giải thích sự khác biệt giữa chúng và cách chúng tương tác. Nhưng trước tiên hãy tóm tắt ngắn gọn từng tính năng.
Trình tối ưu hóa truy vấn (optimizer) thường sử dụng thông tin như thống kê đối tượng và hệ thống, môi trường biên dịch, giá trị ràng buộc (bind biến), v.v. để xác định plan (plan) tốt nhất cho một câu lệnh SQL. Trong một số trường hợp, các khiếm khuyết/thiếu các đầu vào này hoặc trình tối ưu hóa có thể dẫn đến một plan kém.
SQL Profile chứa thông tin bổ trợ giúp giảm thiểu những vấn đề này. Khi được sử dụng cùng với các đầu vào thông thường, SQL Profile giúp trình tối ưu hóa giảm thiểu sai lầm và do đó có nhiều khả năng chọn plan án tốt nhất.
SQL Plan Baseline cho một câu lệnh SQL bao gồm một tập hợp các plan đã được chấp nhận. Khi câu lệnh được phân tích cú pháp, trình tối ưu hóa sẽ chỉ chọn plan tốt nhất trong số tập hợp này. Nếu một plan khác được tìm thấy bằng quy trình lựa chọn dựa trên chi phí (cost) thông thường, trình tối ưu hóa sẽ thêm nó vào lịch sử plan nhưng plan này sẽ không được sử dụng cho đến khi nó được xác minh là hoạt động tốt hơn plan được chấp nhận hiện tại và được phát triển.
Vì vậy, các SQL Profile cung cấp thông tin bổ sung cho trình tối ưu hóa để giúp chọn plan tốt nhất; chúng không ràng buộc trình tối ưu hóa vào bất kỳ plan cụ thể nào, đó là lý do tại sao chúng có thể được chia sẻ. Mặt khác, SQL Plan Baseline hạn chế trình tối ưu hóa chỉ chọn từ một tập hợp các plan được chấp nhận. Phương pháp dựa trên chi phí vẫn được sử dụng để chọn một plan, nhưng chỉ trong tập hợp các plan này. SQL Plan Baseline là một chiến lược lựa chọn plan thận trọng hơn so với SQL Profile. Vì vậy, khi nào bạn nên sử dụng SQL Profile so với SQL Plan Baseline?
Bạn nên sử dụng SQL Profile nếu bạn chỉ muốn giúp trình tối ưu hóa một chút trong quá trình tính phí của nó mà không hạn chế nó trong bất kỳ plan cụ thể nào. Cách tiếp cận này có thể cực kỳ hữu ích khi bạn muốn hệ thống thích ứng ngay lập tức với những thay đổi như thống kê đối tượng mới. Bạn nên sử dụng đường cơ sở của plan SQL nếu bạn thận trọng hơn và muốn kiểm soát plan nào được sử dụng. Nếu bạn đang sử dụng SQL Plan Baseline và nhận thấy rằng trình tối ưu hóa đôi khi không chọn plan tốt nhất từ danh sách được chấp nhận hoặc không tìm thấy plan chi phí tốt nhất để thêm vào lịch sử plan, thì bạn cũng có thể sử dụng SQL Profile. Điều gì xảy ra nếu một câu lệnh SQL có cả SQL Profile và SQL Plan Baseline?
Nếu bạn nhớ lại, Quản lý plan SQL (SPM - SQL Plan Management) có ba thành phần, chụp lại plan, lựa chọn plan và phát triển plan. Sự hiện diện của một SQL Profile ảnh hưởng đến cả ba thành phần của SPM và chúng tôi sẽ mô tả từng tương tác đó bên dưới.
Chụp plan SPM và SQL Profile
Khi câu lệnh được thực thi, nó sẽ được phân tích cú pháp cứng (hard parse) và một plan dựa trên chi phí sẽ được tạo ra. plan đó sẽ bị ảnh hưởng bởi SQL Profile. Khi plan dựa trên chi phí được xác định, nó sẽ được so sánh với các plan tồn tại trong SQL Plan Baseline. Nếu plan khớp với một trong các plan được chấp nhận trong SQL Plan Baseline, chúng sẽ tiếp tục và sử dụng nó. Tuy nhiên, nếu plan dựa trên chi phí không khớp với bất kỳ plan nào được chấp nhận trong SQL Plan Baseline, nó sẽ được thêm vào plan baseline như một plan chưa được chấp nhận.
Lựa chọn plan SPM và SQL Profile
Khi một câu lệnh SQL có SQL Plan Baseline được phân tích cú pháp, thì plan được chấp nhận với chi phí tốt nhất sẽ được chọn. Quá trình này sử dụng trình tối ưu hóa thông thường. Sự hiện diện của một SQL Profile sẽ ảnh hưởng đến chi phí ước tính của mỗi gói này và do đó có khả năng là gói cuối cùng được chọn.
Sự phát triển plan SPM và SQL Profile
Thành phần phụ thứ ba của SPM là xác minh hoặc phát triển các plan không được chấp nhận. Quá trình tiến hóa kiểm tra thực hiện plan không được chấp nhận so với plan tốt nhất trong số các plan được chấp nhận. Plan được chấp nhận tốt nhất được lựa chọn dựa trên chi phí. Một lần nữa, nếu SQL Profile tồn tại, nó sẽ ảnh hưởng đến chi phí ước tính và do đó, plan được chấp nhận được chọn để so sánh với plan không được chấp nhận.
Hy vọng rằng thông tin này cung cấp cho bạn một bức tranh rõ ràng về SQL Profile và SQL Plan Baseline khác nhau như thế nào và chúng tương tác với nhau như thế nào! Có nhiều hơn về cách sử dụng SQL Plan Baseline để kiểm soát các plan thực thi SQl ở các bài viết sau .
SQL Tunning, SQL Profile, SQL Plan Baselines, Oracle Database