Cách tính DB connection pool size tham khảo từ Prisma ORM
Table of contents
Bàii viết tham khảo từ công thức:
Ý nghĩa của Connection pool size
Connection pool size là con số để giới hạn lượng kết nối tới DB.
Càng lớn thì khi số lượng request lớn vẫn đảm bảo tốc độ trả về, nhưng lớn quá sẽ làm hạn chế performance, có nguy cơ quá số lượng cho phép.
Ngược lại, càng nhỏ thì số lượng request phải xếp hàng lại lớn nếu số lượng request lớn.
Cảnh xếp hàng, mỗi hàng như 1 Connection pool:
image source: https://www.pexels.com/photo/teacher-in-yellow-cardigan-measuring-temperature-of-a-boy-in-face-mask-in-the-classroom-8363115/
Cách tính
Đây là giới hạn từ ORM hay app instance (thực thể).
Cách tính như sau:
(num_physical_cpus * 2 + 1) ÷ number of application instances
Nếu số lượng ORM instance or App instance là 1 thì công thức sẽ trở thành:
num_physical_cpus * 2 + 1
Ví dụ, nếu DB server có 4 CPUs:
4 * 2 + 1 = 9
Kết quả là 9 connection pool.
Tại sao lại nhân số lượng nhân vật lý với 2? Có lẽ bởi vì two threads per core by default - mặc định là mỗi 1 core sẽ có 2 threads chạy song song.
Để ý là mỗi vCPU của AWS sẽ tương đương với 1 thread, vậy 2 vCPUs mới là 1 physical CPU. Ví dụ với r4.4xlarge instance type thì:
Default CPU cores: 8
Default threads per core: 2
Default vCPUs: 16 (8 * 2)
Cụ thể từng loại CPU options mô tả cụ thể tại đây.
Ví dụ nếu ORM instance là 2 thì:
(4 * 2 + 1) / 2 =
9 / 2 =
4.5
Như vậy con số connection pool hợp lý ở đây là 4. Vì mỗi instance sẽ bị giới hạn là 4, tổng của cả 2 là 4 * 2 = 8
, con số này không vượt quá 9 như đã tính toán với 1 instance.
Tuy nhiên sẽ vẫn có nhiều biến số tùy vào bài toán thực tế, nên tốt nhất là ta phải thực hiện stress-test kết hợp monitoring DB, để xem mức chịu tải ra sao!