Có một quy tắc tốt nào của ngón tay cái ngón tay cái để dịch chi phí EXPLAIN sang thời gian chạy (đồng hồ treo tường) không?


7

Thỉnh thoảng, người tiêu dùng của các quy trình cơ sở dữ liệu của tôi sẽ yêu cầu ước tính khi nào một nhiệm vụ nhất định sẽ được thực hiện. Mặc dù tôi cảm thấy mình biết cách đọc GIẢI THÍCH trong hầu hết các công cụ cơ sở dữ liệu, tôi gặp khó khăn khi cố dịch nó để "hỏi lại tôi sau 15 phút". Có ai biết một "quy tắc ngón tay cái" tốt để sử dụng cho bất kỳ cơ sở dữ liệu cụ thể nào không?

Tôi nhận ra rằng đây không phải là một quy tắc khó và nhanh, nhưng thậm chí việc có thể đưa ra một con số trên sân bóng có thể hữu ích trong một số trường hợp.

Câu trả lời:


6

Tất cả các trình tối ưu hóa dựa trên chi phí đều hoạt động thông qua nhiều thuật toán độc quyền (hoặc bạn có thể đọc chúng cho cơ sở dữ liệu nguồn mở), nhưng chúng thường hoạt động bằng cách gán cho một hoạt động tham chiếu một giá trị là 1. Ví dụ, trong SQL Server, một hoạt động với ước tính chi phí là 1 mất 1/320 giây trên một máy tính tham chiếu dưới bàn của một số nhà phát triển ở Redmond. Chi phí chỉ là phỏng đoán tương đối về việc một truy vấn sẽ đắt như thế nào. Nhiều RDBMS sử dụng chi phí này trong việc thiết lập mức độ ưu tiên hoặc, trong trường hợp bế tắc, để loại bỏ các truy vấn rẻ hơn (chúng mất ít thời gian hơn để chạy lại). Nhưng tất cả chỉ là phỏng đoán dựa trên thông tin mà trình tối ưu hóa truy vấn có sẵn tại thời điểm truy vấn đang được chạy.

Peter là chính xác, điều tốt nhất bạn có thể hy vọng là chạy một số truy vấn điểm chuẩn trong các tình huống lý tưởng và sử dụng những truy vấn đó để đưa ra dự đoán tốt nhất. Bạn phải đối phó với rất nhiều điểm tranh chấp khác nhau trong RDBMS, vì vậy rất khó xác định cụ thể bất kỳ truy vấn cụ thể nào sẽ thực hiện trong thế giới thực.


Đừng quên, máy tính đã được sử dụng để đưa ra chi phí ở Redmond có lẽ đã chết cách đây 10 - 15 năm.
mrdenny

Giải thích tốt về cách số CBO được dựa. Cảm ơn!
TML

@mrdenny - Không, họ giữ nguyên hiện tại, họ chỉ điều chỉnh giá trị 1 là bao nhiêu cho mỗi bản phát hành. Bị cáo buộc. Nhưng vì trình hoạch định truy vấn là nước sốt siêu bí mật đằng sau SQL Server, nên chúng tôi sẽ không bao giờ thực sự biết.
Jeremiah Peschka

1
hãy xem, lần cuối cùng tôi hỏi tôi đã nói rằng các giá trị không còn ý nghĩa gì nữa vì chúng đã không được thay đổi trong một số bản phát hành. Họ bảo tôi chỉ nên đi càng thấp càng tốt.
mrdenny

6

Tôi nghi ngờ rằng điều này là không thể theo cách bạn tưởng tượng. Một lý do quan trọng là thời gian chạy thực tế phụ thuộc rất nhiều vào phần cứng và nhiều quyết định tối ưu hóa mà công cụ cơ sở dữ liệu thực hiện có hiệu quả trong việc cân bằng việc sử dụng các thành phần phần cứng khác nhau (ví dụ: đĩa, bộ nhớ, CPU).

Tôi khuyên bạn nên chạy một loạt các truy vấn có liên quan đến ứng dụng của mình, ghi lại các ước tính chi phí và thời gian chạy và cố gắng hiểu ý nghĩa của dữ liệu đó. Bạn có thể có được một mối quan hệ tuyến tính tốt đẹp, hoặc bạn có thể biết rằng các con số chi phí là vô giá trị cho mục đích này.


Vâng, tôi đoán đây là câu trả lời, tôi chỉ nghĩ có thể có một quy tắc thực sự mềm có thể được sử dụng ... nhưng cảm ơn vì đã xác nhận. :)
TML
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.