2013-11-21 19 views
5

Tôi nhận thấy rằng lần đầu tiên tôi chạy truy vấn trên RedShift, phải mất 3-10 giây. Khi tôi chạy cùng một truy vấn một lần nữa, ngay cả với các đối số khác nhau trong điều kiện WHERE, nó chạy nhanh (0,2 giây). Truy vấn Tôi đã nói về chạy trên một bảng của ~ 1M hàng, trên 3 cột nguyên.Thời gian chạy dài khi truy vấn được thực hiện lần đầu tiên trong RedShift

Đây có phải là sự khác biệt lớn trong thời gian thực thi gây ra bởi thực tế là RedShift biên dịch truy vấn lần đầu tiên chạy, và sau đó tái sử dụng mã đã biên dịch?

Nếu có - cách luôn giữ bộ nhớ cache của các truy vấn được biên dịch này ấm áp?

Một câu hỏi khác: Cho truy vấnA và truy vấnB. Giả sử queryA được biên dịch và thực thi trước. Làm thế nào tương tự nên queryB được queryA, như vậy mà thực hiện queryB sẽ sử dụng mã được biên dịch cho queryA?

Trả lời

4

Câu trả lời của câu hỏi đầu tiên là có. Amazon Redshift biên dịch mã cho truy vấn và lưu trữ nó. Mã được biên dịch được chia sẻ qua các phiên trong một cụm, vì vậy cùng một truy vấn với các tham số khác nhau ngay cả trong các phiên khác nhau sẽ chạy nhanh hơn do không có phí.

Ngoài ra, họ khuyên bạn nên sử dụng kết quả của lần thực hiện truy vấn thứ hai cho điểm chuẩn.

Có câu trả lời cho câu hỏi và chi tiết này trong liên kết sau. http://docs.aws.amazon.com/redshift/latest/dg/c-compiled-code.html

+0

Điều này hoàn toàn chính xác. Tôi đào sâu hơn để tìm ra chính xác nguyên nhân gây ra việc biên dịch lại mã: https://medium.com/@pingram/redshift-code-compilation-977143576e89 – Phil

+0

Làm cách nào để bạn biết lần thứ hai, kết quả không đến từ kết quả được lưu trong bộ nhớ cache? Bạn có thể thực sự dựa vào thời gian thực hiện cho lần thử thứ hai của cùng một truy vấn để thử nghiệm hiệu suất không? Một liên kết khác http://docs.aws.amazon.com/redshift/latest/dg/c-query-performance.html – Faiz

+0

bạn có thể kiểm tra tác động của việc biên dịch truy vấn một cách riêng biệt bằng cách thử các truy vấn khác nhau trên một bảng trống, để loại bỏ dữ liệu bộ nhớ đệm dưới dạng biến. Tôi thấy rằng truy vấn biên dịch độ trễ với độ phức tạp của truy vấn: đặc biệt, số lượng bảng và tham gia liên quan. Xem: http://wrschneider.github.io/2017/06/02/redshift-compile-latency.html – wrschneider

Các vấn đề liên quan