Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Giới hạn kết nối cho Google Cloud SQL từ App Engine là gì và cách sử dụng lại các kết nối DB tốt nhất?

Câu trả lời ngắn gọn:Các truy vấn của bạn có thể quá chậm và máy chủ mysql không có đủ chuỗi để xử lý tất cả các yêu cầu mà bạn đang cố gắng gửi nó.

Câu trả lời dài:

Về cơ bản, Cloud SQL có hai giới hạn có liên quan ở đây:

  • Kết nối:Những kết nối này tương ứng với đối tượng 'conn' trong mã của bạn. Có một cơ cấu dữ liệu tương ứng trên máy chủ. Khi bạn có quá nhiều đối tượng này (hiện được định cấu hình là 1000), đối tượng ít được sử dụng gần đây nhất sẽ tự động bị đóng. Khi kết nối bị đóng bên dưới bạn, bạn sẽ gặp lỗi kết nối không xác định (ApplicationError:1007) vào lần tiếp theo khi bạn cố gắng sử dụng kết nối đó.
  • Yêu cầu đồng thời:Đây là những truy vấn đang thực hiện trên máy chủ. Mỗi truy vấn đang thực thi liên kết với một luồng trong máy chủ, do đó, có giới hạn là 100. Khi có quá nhiều yêu cầu đồng thời, các yêu cầu tiếp theo sẽ bị từ chối với lỗi mà bạn đang gặp phải (ApplicationError:1033)

Có vẻ như giới hạn kết nối không ảnh hưởng đến bạn, nhưng tôi muốn đề cập đến nó để đề phòng.

Khi nói đến Yêu cầu đồng thời, việc tăng giới hạn có thể hữu ích, nhưng nó thường làm cho vấn đề trở nên tồi tệ hơn. Có hai trường hợp chúng tôi đã gặp trong quá khứ:

  • Chốt lại:Một truy vấn đang chạy dài đang khóa một hàng quan trọng của cơ sở dữ liệu. Tất cả các truy vấn tiếp theo sẽ chặn trên ổ khóa đó. Ứng dụng hết thời gian chờ đối với các truy vấn đó, nhưng chúng vẫn tiếp tục chạy trên máy chủ, buộc các chuỗi đó cho đến khi thời gian chờ deadlock kích hoạt.
  • Truy vấn chậm:Mỗi truy vấn thực sự rất chậm. Điều này thường xảy ra khi truy vấn yêu cầu sắp xếp tệp tạm thời. Ứng dụng hết thời gian chờ và thử lại truy vấn trong khi lần thử đầu tiên của truy vấn vẫn đang chạy và tính theo giới hạn yêu cầu đồng thời. Nếu bạn có thể tìm thấy thời gian truy vấn trung bình của mình, bạn có thể ước tính xem phiên bản mysql của bạn có thể hỗ trợ bao nhiêu QPS (ví dụ:5 ms cho mỗi truy vấn có nghĩa là 200 QPS cho mỗi luồng. Vì có 100 luồng, bạn có thể thực hiện 20.000 QPS. 50 ms mỗi truy vấn có nghĩa là 2000 QPS.)

Bạn nên sử dụng GIẢI THÍCH HIỂN THỊ TÌNH TRẠNG KỸ THUẬT INNODB để xem vấn đề nào trong hai vấn đề đang xảy ra.

Tất nhiên, cũng có thể là bạn đang thúc đẩy hàng tấn lưu lượng truy cập vào trường hợp của mình và không có đủ chủ đề. Trong trường hợp đó, bạn có thể sẽ sử dụng tối đa cpu cho ví dụ đó, vì vậy việc thêm nhiều luồng hơn sẽ không giúp ích được gì.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cách sao chép một lược đồ trong mysql bằng java

  2. mysql.h bị thiếu .... (Ruby on Rails, OSX)

  3. Tối ưu hóa truy vấn django để kéo khóa ngoại và mối quan hệ django-taggit

  4. LỖI 1356 (HY000):Xem các tham chiếu của 'mysql.user' không hợp lệ (các) bảng hoặc (các) cột hoặc (các) hàm hoặc bộ định nghĩa / người gọi của chế độ xem thiếu quyền sử dụng chúng

  5. MySQL:Chọn N hàng, nhưng chỉ với các giá trị duy nhất trong một cột