sourcecode

SQL 연금술 로드 테스트: "Timeout Error:크기 3 오버플로우 0의 QueuePool 제한에 도달했으며 연결 시간 초과, 시간 초과 30"

copyscript 2023. 1. 15. 17:09
반응형

SQL 연금술 로드 테스트: "Timeout Error:크기 3 오버플로우 0의 QueuePool 제한에 도달했으며 연결 시간 초과, 시간 초과 30"

AWS에서 실행되는 SQL-Alchemy 기반 웹 애플리케이션을 가지고 있습니다.

이 웹 앱에는 여러 개가 있습니다.c3.2xlargeELB의 배후에 있는EC2 인스턴스(각 8 CPU)는 Web 요구를 받아들여 공유 데이터베이스에 쿼리/기입합니다.

사용 중인 데이터베이스는 다음과 같은 유형의 RDS 인스턴스입니다.db.m4.4xlargeMariaDB 10.0.17을 실행하고 있다.

SQL 연금술 설정은 다음과 같습니다.

SQLALCHEMY_POOL_SIZE = 3
SQLALCHEMY_MAX_OVERFLOW = 0

부하가 높은 상태에서는, 애플리케이션이 다음의 에러를 발생시키기 시작합니다.

TimeoutError: QueuePool limit of size 3 overflow 0 reached, connection timed out, timeout 30

SQLALCHEMY_POOL_SIZE를 3에서 20으로 늘리면 동일한 부하 테스트에서 오류가 사라집니다.다음은 질문입니다.

  1. DB에서 처리할 수 있는 동시 연결 수는 총 몇 개입니까?
  2. 라고 가정하는 것이 타당한가?Number of Number of EC2 instances * Number of Cores Per instance * SQLALCHEMY_POOL_SIZE질문 #1에 대한 답을 초과할 수 없습니다.
  3. 저와 같은 분산 웹 앱의 DB 연결 풀 크기에 대한 다른 제약 사항을 알아야 합니까?

MySQL은 거의 모든 수의 동시 연결을 처리할 수 있습니다.그러나 수십 개 이상의 쿼리가 활성화되어 있는 경우 문제가 발생할 수 있습니다.

쿼리가 무엇을 하고 있는지 모르면 3이 제한인지 300인지 알 수 없습니다.

slowlog를 켜서 어떤 쿼리가 가장 중요한지에 대한 정보를 수집할 것을 권장합니다.잘 조정된 웹 앱은 3개의 연결로 99%의 시간 동안 쉽게 살아남을 수 있습니다.

나머지 1%는 스파이크가 발생할 수 있습니다.그렇기 때문에 3은 불합리하게 낮다.

언급URL : https://stackoverflow.com/questions/38515488/load-testing-sql-alchemy-timeouterror-queuepool-limit-of-size-3-overflow-0-re

반응형