Ảnh hưởng việc binding biến giá trị đến SQL Performance

0
487

Parsing là một vấn đế trong câu query SQL động ảnh hưởng chung lên hiệu suất cậu SQL. Lập trình viên SQL không thể truy xuất đến môi trường production, nên họ không thực sự biết được vấn đề một cách chính xác.

Các nhà cung cấp cơ sở dữ liệu của phiên bản cũ thường gửi cơ sở dữ liệu với các câu lệnh SQL được phân tích cú pháp được lưu trữ trong cơ sở dữ liệu và các nhà phát triển cơ sở dữ liệu có thể tái sử dụng các kế hoạch này. Bộ nhớ này được gọi là bộ nhớ cache kế hoạch thực hiện.
Thông qua các biến liên kết, cơ sở dữ liệu có thể nhận ra các câu lệnh SQL giống hệt nhau ngay cả từ các câu lệnh đã được phân tích cú pháp trước đó. Hơn nữa, kế hoạch cơ sở dữ liệu thực thi trước đó có thể được thực hiện lại để tạo ra một kế hoạch mới.

Làm thế nào là Bind biến liên quan đến hiệu suất SQL?

Khi một câu lệnh SQL được thực hiện trong Oracle, công cụ của nó kiểm tra tính hợp lệ của các câu lệnh và các kế hoạch về cách các bảng được sử dụng trong câu lệnh có thể được truy cập và tham gia cùng nhau không? Quá trình này được gọi là phân tích cú pháp. Ở đây, trình tối ưu hóa xác định các bảng cần được truy cập và tham gia. Bằng cách này, một kế hoạch thực hiện hoàn chỉnh được hình thành. Bước mà Oracle gửi câu lệnh tới trình tối ưu hóa được gọi là phân tích cú pháp cứng.

Trong trường hợp, nếu kế hoạch thực hiện đã tồn tại cho bất kỳ truy vấn nào thì Oracle không gửi truy vấn tới trình tối ưu hóa và thậm chí sử dụng gói hiện có. Quá trình này được gọi là phân tích cú pháp mềm. Oracle engine thậm chí còn xem xét các khác biệt nhỏ trong khi so sánh hai câu lệnh SQL.

Giống như cả hai câu lệnh sau là khác nhau đối với Oracle:

Mặc dù cả hai câu lệnh đều giống nhau, nhưng công cụ của Oracle sẽ khó phân tích các câu lệnh này khi nó sẽ thực thi chúng lần đầu tiên.

Làm thế nào cải thiện hiệu suất Bind biến SQL?

Thông thường, bất kỳ bảng nào được truy vấn bằng khóa chính tại thời điểm thực hiện truy vấn. Truy vấn được thực hiện theo các bước sau:

  • Một lần quét duy nhất được thực hiện cho chỉ mục khóa chính
  • Bằng cách sử dụng hàng được yêu cầu của hàng chỉ mục được truy cập

Kế hoạch này được thực hiện cho mọi cuộc gọi hoặc thực thi truy vấn. Giống như cho cả hai truy vấn được liệt kê sau đây, cùng một kế hoạch được liệt kê ở trên sẽ được thực hiện hai lần hoặc nói cách khác, một giai đoạn khó sẽ được thực thi mỗi lần.

Vì vậy, đối với cả hai truy vấn này, cùng một kế hoạch sẽ được tạo và thực hiện hai lần làm giảm hiệu suất SQL. Trong những trường hợp như vậy, để tránh các phân tích cứng bổ sung, chúng ta có thể thay thế các số bằng biến hoặc biến liên kết và chỉ bằng một câu lệnh duy nhất mà nhiệm vụ có thể được thực hiện:

Ở đây, khi cùng một truy vấn sẽ được thực thi hai lần cho hai giá trị khác nhau của std, thì lần đầu tiên phân tích cú pháp cứng sẽ được thực hiện và trong lần thứ hai, phân tích cú pháp mềm sẽ được thực hiện để tạo kết quả.

Ảnh hưởng của việc sử dụng Binding biến

Bằng cách sử dụng các biến liên kết, hai loại biểu diễn bị ảnh hưởng rất nhiều được liệt kê và được định nghĩa bên dưới:

  • Hiệu suất thực hiện cá nhân
  • Toàn bộ hiệu suất hệ thống

Các biến liên kết ảnh hưởng như thế nào đến Hiệu suất Thực hiện Cá nhân?

Khi nói đến bộ nhớ cache một số thông tin, sau đó nó mang lại một số chi phí là tốt. Hơi chi phí luôn luôn liên quan đến phân tích cú pháp. Ngay cả khi người dùng cần thực thi một kế hoạch thực hiện nhỏ, nó vẫn sẽ mang lại một số chi phí. Ở đây, trong những trường hợp như vậy, chi phí sẽ là phân tích cú pháp câu lệnh SQL và tạo ra kế hoạch thực hiện cho cùng.

Sử dụng biến liên kết có thể tăng tốc độ lên kế hoạch thực hiện lên đến 2,5 lần so với những người không sử dụng kế hoạch thực hiện. Đối với các truy vấn tầm thường, các buổi biểu diễn như vậy rất quan trọng, trong khi đối với các truy vấn phức tạp, nó có thể hơi ít hơn, như trong việc thực hiện các truy vấn phức tạp mất rất nhiều thời gian. Không ai có thể muốn trả giá trên cao, do đó truy vấn và kế hoạch của nó thường được lưu vào bộ nhớ cache và là một tùy chọn ưa thích hơn.

Các biến liên kết ảnh hưởng đến toàn bộ hệ thống như thế nào?

Nếu không có các biến liên kết, không chỉ truy vấn cá nhân bị thay vì toàn bộ hệ thống có thể bị ảnh hưởng. Trong một số trường hợp, một truy vấn có thể tạo thêm 20.000 truy vấn, do đó nhiều truy vấn quan trọng có thể cần phải chờ bộ nhớ cache. Do đó, không chỉ việc thực thi truy vấn đơn này sẽ chậm lại mà còn một số truy vấn quan trọng có thể cần phải chờ vì tốc độ của toàn bộ hệ thống có thể chậm lại.

Nếu mọi truy vấn bị chậm lại thì tốc độ của toàn bộ hệ thống sẽ bị chậm lại và bị ảnh hưởng rất nhiều. Nhiều truy vấn có thể quan trọng hơn sẽ được xếp hàng đợi và tốc độ máy chủ sẽ chậm lại.

Comments

comments