1. Max_connection database hiện tại là bao nhiêu?
Giả sử ta sử dụng Database MySQL AWS thuộc dòng db.t2.large (2CPU – 8GB RAM). Để biết số lượng max_connection có 2 cách:
- Cách 1: Thực hiện truy vấn
SHOW GLOBAL VARIABLES LIKE 'max_connections';
- Cách 2: Dùng công thức
max_connections = DBInstanceClassMemory/12582880
- Ram 8G ⇒ 8000000000 bytes / 12582880 = 635 pools
2. Nâng bao nhiêu pool là hợp lý?
Giả sử ta có 3 con servers. Mỗi server chạy 4 workers. Mỗi worker chạy 16 threads.
Mỗi thread là 1 connection đến database.
Suy ra ta có tổng số threads trên 1 server ⇒ 16 threads * 4 workers = 64 pools/server
Ta có 3 servers ⇒ 64 pools * 3 servers = 192 pools
⇒ Số pool tổng cộng là 192 pools
Cho nên chỉ số max_connection
> tổng số pools
Với database ở trên thì sẽ đáp ứng được. Nếu DB của bạn yếu thì các bạn cần phải điều chỉnh lại số lượng threads cho phù hợp. Miễn sao khi tổng các server lại nó phải bé hơn số max_connection
Lưu ý: Đó là ta mới tính cho những server đang golive, ngoài ra còn có những server khác như background chẳng hạn, hoặc khi ứng dụng được Scale-up server thì củng phải được tính vào. Tốt nhất là ta nên chừa số lượng còn lại ít nhất phải được 25 pools (Còn tuỳ vào thực tế server của bạn như thế nào mà tính cho hợp lý)
Nếu server bạn mạnh, bạn dùng nhiều threads thì đồng nghĩa với việc bạn phải nâng Database lên cho phù hợp. Chứ không thể server mạnh mà Database yếu thì không thể đáp ứng được.