2009-01-01 5 views
15

mysql의 연결 프로세스가 다른 RDBMS에 비해 매우 빠르다고 들었 기 때문에 a library that provides connection pooling (SQLAlchemy)을 사용하면 연결 풀을 활성화해도 실제로 그렇게 도움이되지 않습니다.MySQL 연결 풀링 질문 : 그만한 가치가 있습니까?

아무도이 경험이 있습니까?

일부 코드가 db 연결에 상태 저장을하고 (아마도 실수로) 자체적으로 정리를하지 않으면 일반적으로 해당 코드를 닫을 때 정리되는 상태로 인해 사용하도록주의해야합니다. 연결은 재활용 연결을 가져 오는 후속 코드로 전파됩니다.

답변

10

응용 프로그램이 트랜잭션 격리 수준과 같은 연결 전체 옵션을 변경하지 않는 한 SQLA 연결 풀을 사용할 때 연결의 잔여 상태에 대해 걱정할 필요가 없습니다 (일반적으로 해당하지 않음). SQLA의 연결 풀은 연결 상태를 검사 할 때 connection.rollback()을 발행하여 트랜잭션 상태 또는 잠금이 지워지도록합니다.

MySQL의 연결 시간이 꽤 빠를 수 있습니다. 특히 동일한 시스템에서 유닉스 소켓을 통해 연결하는 경우 더욱 그렇습니다. 연결 풀을 사용하는 경우, MySQL의 클라이언트 라이브러리가 8 시간 이상 유휴 상태 인 연결을 자동으로 종료하므로 (SQLAlchemy에서는 pool_recycle 옵션 임) 연결이 일정 기간 후에 재활용되도록합니다.

풀 구현을 기본값 인 QueuePool에서 실제로 풀링하지 않는 풀 구현 인 NullPool로 변경하여 SQLA 응용 프로그램과 함께 연결 풀을 비 벤딩 할 수 있습니다. 연결 및 연결 끊기 프록시 연결이 획득되어 나중에 닫힐 때의 실제

6

MySQL 자체의 연결 부분이 꽤 매끄 럽긴하지만 아마도 네트워크 연결이 여전히 루프백 또는 물리적인지 여부와 관계가 있습니다. 요청을 많이 보내면 상당히 비쌀 수 있습니다. 물론 연결에 따라 많은 작업을 수행한다면 애플리케이션이 무엇을하는지 정확히 파악할 수 있습니다 (그렇듯이 종종 그렇습니다). 그러면 연결 당 많은 작업을 수행하는 것이 지배적 일 것이고 많은 이익을 얻지 못할 것입니다.

의심 스러울 때, 벤치 마크 -하지만 연결 풀링 라이브러리 (적어도 평판 좋은 것)가 제대로 작동하고 적절하게 리셋해야한다는 것을 믿어 의심치 않습니다.

+0

또 다른 질문/stackoverflow 아파치 코 몬즈 DB 연결 풀링이 나쁘다는 것을 지적했다. – the0ther

0

데이터베이스 풀을 생성 할 때마다 연결 풀이 java.sql.Connection 객체를 만들지 않는다는 점에서 속도가 빨라집니다. 나는 많은 쿼리를하는 웹 애플리케이션을 위해 mysql 데이터베이스에 Tomcat 커넥션 풀을 사용한다. 높은 사용자로드 중에 눈에 띄는 속도 향상이있다.

+0

이 질문은 파이썬을위한 것이지 자바를위한 것이 아닙니다. –

+0

@ ZoranPavlovic 실제로 MySQL에 대한 질문입니다. 연결 풀이 설정되면 MySQL을 "도움"합니다. OP가 Python 연결 풀 클라이언트를 예로 사용했지만,이 질문의 주된 초점으로 보지 않습니다. – Mark

2

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

긴 답변 : 의존적입니다. MySQL은 연결 설정에 빠르기 때문에 비용을 피하는 것이 연결 풀링을위한 좋은 이유는 아닙니다. 쿼리를 실행하는 것이 거의 빠르고 빠르지 않으면 풀링으로 승리를 보게 될 것이기 때문입니다.

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

0

나는 Django로 간단한 RESTful 서비스를 만들고 연결 풀링을 사용하거나 사용하지 않고 테스트했다.제 경우에는 그 차이가 아주 두드러졌습니다.

LAN에서는 응답 시간이 1 초에서 5 초 사이입니다. 그것으로, 20 밀리 초 미만. 결과는 다를 수 있지만 MySQL & Apache 서버에 사용하는 구성은 상당히 표준적인 로우 엔드입니다.

인터넷을 통해 UI 페이지를 제공하는 경우 여분의 시간은 사용자에게 눈에 띄지 않을 수 있지만 제 경우에는 용납 할 수 없으므로 풀을 사용하기로했습니다. 희망이 당신을 도와줍니다.