문제

mysql의 연결 프로세스는 다른 RDBMS에 비해 매우 빠르도록 설계되었기 때문에 연결 풀링을 제공하는 라이브러리 (SQLAlchemy)는 연결 풀을 활성화하면 실제로 그다지 도움이 되지 않습니다.

누구든지 이것에 대한 경험이 있습니까?

일부 코드가 db 연결에 대해 상태 저장 작업을 수행하고 (아마도 실수로) 자체적으로 정리되지 않는 경우 일반적으로 연결을 닫을 때 정리되는 해당 상태가 대신 재활용된 연결을 얻는 후속 코드로 전파됩니다.

도움이 되었습니까?

해결책

애플리케이션이 트랜잭션 격리 수준 (일반적으로 그렇지 않음)과 같은 연결 전반 옵션을 변경하지 않는 한 SQLA의 연결 풀을 사용할 때 연결에서 잔류 상태에 대해 걱정할 필요가 없습니다. SQLA의 Connection Pool은 다시 확인했을 때 연결에서 Connection.rollback ()을 발행하여 트랜잭션 상태 또는 잠금이 지워집니다.

MySQL의 연결 시간이 매우 빠를 수 있습니다. 특히 같은 컴퓨터의 Unix 소켓을 연결하는 경우. 연결 풀을 사용하는 경우 MySQL의 클라이언트 라이브러리가 자동으로 8 시간 이상 유휴 상태 인 연결을 종료하므로 (SQLALCHEMY에서는 PUL_RECYCYCLE 옵션입니다).

QueuePool의 기본에서 NullPool로 풀 구현을 변경하여 SQLA 애플리케이션을 사용하여 Connection Pool 대 비 벤치 벤치를 신속하게 수행 할 수 있습니다.이 풀 구현은 실제로 풀을 풀지 않는 풀 구현입니다. 프록시 연결이 획득되고 나중에 닫힙니다.

다른 팁

MySQL 자체의 연결 부분이 매우 매끄 럽더라도, 아마도 여전히 네트워크 연결이 포함되어있을 것입니다 (루프백이든 물리적이든). 당신이 만들고 있다면 많은 요청의 경우 크게 비쌀 수 있습니다. 그것은 당신의 응용 프로그램이 정확히 무엇을하는지에 따라 (종종 그렇듯이), 연결 당 많은 일을하고 있다면, 그것은 지배적이며 많은 것을 얻지 못할 것입니다.

의심스러운 경우, 벤치 마크-그러나 나는 연결 풀링 라이브러리 (적어도 평판이 좋은 라이브러리)가 제대로 작동하고 적절하게 재설정해야한다고 신뢰할 것입니다.

짧은 답변:벤치마킹해야 합니다.

긴 답변:때에 따라 다르지.MySQL은 연결 설정이 빠르므로 비용을 피하는 것이 연결 풀링을 선택하는 좋은 이유는 아닙니다.실행되는 쿼리가 적고 빠른 경우 승리할 수 있습니다. 그러면 풀링을 통해 승리할 수 있기 때문입니다.

또 다른 걱정은 애플리케이션이 SQL 스레드를 처리하는 방법입니다.SQL 트랜잭션을 수행하지 않고 스레드 상태에 대한 가정을 하지 않는 경우 풀링은 문제가 되지 않습니다.임시 테이블을 삭제하거나 트랜잭션을 롤백하기 위해 스레드 닫기에 의존하는 코드인 OTOH에는 풀링에 많은 문제가 있습니다.

연결 풀은 데이터베이스 쿼리를 수행 할 때마다 java.sql.connection 객체를 만들지 않았다는 사실에서 속도를 높입니다. 많은 쿼리를 수행하는 웹 애플리케이션을 위해 Tomcat Connection Pool을 MySQL 데이터베이스에 사용합니다. 높은 사용자로드 중에는 눈에 띄는 속도가 향상됩니다.

나는 Django와 함께 간단한 편안한 서비스를 만들어 연결 풀링 유무에 관계없이 테스트했습니다. 제 경우에는 차이가 눈에 띄었습니다.

LAN에서는 응답 시간이 1 초에서 5 초 사이였습니다. 그것으로 20ms 미만. 결과는 다를 수 있지만 MySQL & Apache 서버에 사용하는 구성은 표준 저가형입니다.

인터넷을 통해 UI 페이지를 서비스하는 경우 추가 시간이 사용자에게 눈에 띄지 않을 수 있지만 제 경우에는 용납 할 수 없었기 때문에 수영장 사용을 선택했습니다. 이것이 당신에게 도움이되기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top