+1

Cải thiện Peformance Query với Parallel trong Oracle

Mayfest2023

I. Khái niệm

1. Parallel

Bằng cách thực thi nhiều các process, nó sử dụng nhiều CPU resource hoặc I/O resource để thực hiện 1 câu lệnh SQL

  • Trường hợp nào nên sử dụng Parallel thay vì single:
    • Câu query truy vấn tới bảng data lớn
    • Tính đồng thời thấp
    • Quan trong về thời gian thực hiện
  • Vậy các điều kiện để tối ưu được việc thực hiện Parallel:
    • System có nhiều bộ xử lý đối xứng, clusters hoặc hệ thống xử lý song song lớn
    • Đủ băng thông cho các luồng I/O
    • Có các CPU ko hoạt động hoặc ko sử dụng thường xuyên ( thường là các hệ thống có mức độ sử dụng CPU < 30%)
    • Đủ memory để support các quá trình nhơ sort, hash, hoặc băng thông I/O. Khi mà ko đử resources để thực hiện parallel có khi nó còn kéo chậm lại luôn performance.

NOTE: Nếu mà thiếu trong trong 4 cái ở trên thì Parallel nó ko thể làm tốt được việc cải thiện performance. Thực tế ở các hệ thống mà có mức độ sự dụng memory cao hoặc ko đủ băng thông đáp ứng việc I/O thì lại làm giảm performance khi thực hiện Parallel. Điển hình như cha Step23 đang làm, phải bỏ đi Parallel và câu SQL nó giảm được 1 nữa thời gian so với việc thực thi Parallel.

2. No-Parallel

  • Thì nó đơn giản là ngược lai với parallel là thực hiện hết toàn bộ 1 câu SQL trong 1 sử lý, ko chiếm thêm CPU hoặc cluster.
  • Được dùng trong
    • Truy vấn dữ liệu data nhỏ
    • Tính đồng thời cao
    • Coi trọng hiệu xuất
  • KO nên sử dụng Parallel trong trường hợp:
    • Trong các câu Query hoặc Transaction rất ngắn
    • Trong các môi trường sử dụng nhiều CPU, memory hoặc băng thông I/O

II. NOTE

  • Tuy là Parallelism có thể giúp cải thiện performance trong việc xử lý data và giảm thời gian thực thi câu SQL. Tuy nhiên chỉ nên sử dụng khi cần thiết.

  • Setting Parallelism ở table hoặc system level có thể dẫn tới vài vấn đề về performance hoặc bảo trì sau này. Các issue có thể gặp như là:

    • Tăng chi phí: việc setting parallelism ở table hoặc system level làm tăng đáng kể chi phí cho hệ thống, đặt biệt nếu bạn có nhiều tables hoặc số lượng lớn người dùng đồng thời. Nó có thể dẫn tới làm hiệu suất chậm hơn và tăng mức tiêu thụ các tài nguyên.
    • Khó bảo trì: việc setting parallelism ở table hoặc system level làm cho việc quản lý database phúc tạp hơn và bảo trì các tác vụ trong việc khắc phụ sự cố vì chúng thực hiện trên nhieeuf processor, threads, nodes,...
    • Tranh giành resource: Nguyên nhân cũng vì khi thực thi parallel thì yêu cầu khá nhiều về mặt cấu hình như memory, CPU, băng thông cho I/O. Khi mà có quá nhiều thao tác parallel --> resource ko đủ --> câu Query ko thể hoàn thiện việc thực thi --> tăng thời gian response --> giảm performance
    • Khả năng mở rộng: parallelism không phải lúc nào cũng cung cấp hiệu suất tuyến tính nếu được add thêm nodes hoạc processors (là ko phải lúc nào tăng processors thêm bao nhiêu lần là performance được cải thiện chừng đấy). Nó có thể hạn chế việc mở rộng đặc biệt nếu hệ thống có số lượng người dùng lớn hoặc là có tính biến động cao (có những thời điểm tăng đột biến số lượng người truy cập).
  • Vì thế trong lúc tunning câu Query, nếu như thử mọi cách rồi mà vẫn ko thể cải thiện performance, hãy kiểm tra hệ thông đang chạy parallel ko.

select
  plan_table_output 
from
  v$sql s
  , table ( 
    dbms_xplan.display_cursor(s.sql_id, s.child_number, 'typical')
  ) t 
where
  s.sql_text like '%<Câu SQL>%'; 

Trong trường hợp Parallel đang được đặt default:

Trường hợp chưa được setting Parallel:

Tùy theo trường hợp, có thể setting parallel hoặc bỏ parallel đi để cải thiện performance.


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.