MySQL - 지속적 연결과 연결 풀링
MySQL에 대해 쿼리를 실행해야 할 때마다 새 연결을 설정하는 오버헤드를 피하기 위해 다음 두 가지 옵션을 사용할 수 있습니다.
- 영구 연결 - 새 연결이 요청됩니다. '동일한' 연결이 이미 열려 있는지 확인하고, 열려 있는 경우 사용합니다.
- 연결 풀: 클라이언트가 연결 풀을 유지하여 연결을 사용해야 하는 각 스레드가 풀에서 체크 아웃되고 완료되면 풀로 돌아갑니다.
따라서 초당 수천 건의 요구를 처리할 수 있는 멀티 스레드 서버 애플리케이션이 있고 각 스레드가 데이터베이스에 대해 쿼리를 실행해야 하는 경우 어떤 옵션이 더 좋을까요?
영속적인 접속을 사용하면 어플리케이션의 모든 스레드는 동일한 접속을 사용하기 때문에 데이터베이스에 대한 동일한 영속적인 접속을 시도하고 사용합니다.즉, 여러 애플리케이션 스레드에서 공유되는 하나의 연결이기 때문에 곧 데이터베이스 측에서 요청이 차단됩니다.
연결 풀링 메커니즘을 사용하면 모든 응용 프로그램 스레드가 연결 풀을 공유하게 됩니다.따라서 차단 요구가 발생할 가능성이 낮아집니다.단, 접속 풀링에서는 응용 프로그램스레드가 풀에서 접속을 취득할 때까지 대기해야 합니까, 아니면 라운드 로빈 방식으로 풀 내의 접속에 대한 요구를 전송해야 합니까?또한 큐잉(있는 경우)이 데이터베이스 상에서 발생하도록 해야 합니까?
연결이 영속적이라고 해서 모든 스레드가 동일한 연결을 사용하는 것은 아닙니다.접속이 필요할 때마다 접속을 오픈하는 것과 달리 접속을 오픈하는 것은 「일시」입니다.접속을 오픈하는 것은 비용이 많이 드는 작업이기 때문에 일반적으로는 접속을 오픈하는 것을 필요 이상으로 피하려고 합니다.
이것이 멀티스레드 어플리케이션이 접속 풀을 자주 사용하는 이유입니다.이 풀은 연결 열기 및 닫기를 처리하며 연결이 필요한 모든 스레드가 풀에 연결을 요청합니다.다른 스레드에서 사용할 수 있도록 스레드가 가능한 한 빨리 연결을 풀로 되돌리는 것이 중요합니다.
응용 프로그램에 연결이 필요한 몇 개의 긴 실행 스레드만 있는 경우 각 스레드에 대한 연결을 열고 열린 상태로 유지할 수도 있습니다.
(설명한 바와 같이) 1개의 연결만 사용하는 것은 최대 크기의 연결 풀과 동일합니다.모든 스레드는 연결을 기다려야 하므로 조만간 병목 현상이 발생할 수 있습니다.이것은 데이터베이스 조작을 시리얼화하기 위한 옵션(특정 순서로 실행)이 될 수 있습니다.다만, 시리얼화를 확실히 하기 위한 보다 좋은 옵션이 있습니다.
업데이트: 새로운 X 프로토콜은 비동기 연결을 지원하며, Node와 같은 새로운 드라이버도 이를 활용할 수 있습니다.
응용 프로그램서버가 접속을 기다릴 필요가 있는지에 대한 질문에 대해서는, 「네」라고 대답합니다.
MySQL 연결이 차단되고 있습니다.연결을 통해 MySQL 서버에서 요청을 발행하면 서버로부터 응답이 수신될 때까지 연결이 유휴 상태로 대기합니다.
같은 접속으로 2개의 요구를 송신해, 어느 쪽이 먼저 반환되는지를 확인할 수 없습니다.한번에 보낼 수 있는 요청은 1개뿐입니다.
따라서 일반적으로 연결 풀의 단일 스레드는 1개의 클라이언트 측 연결(이 경우 응용 프로그램서버가 클라이언트)과 1개의 서버 측 연결(데이터베이스)로 구성됩니다.
응용 프로그램은 풀에서 사용 가능한 연결 스레드를 기다렸다가 필요할 때 풀을 확장하고 사용량이 적을 때 기본 스레드 수로 축소해야 합니다.
언급URL : https://stackoverflow.com/questions/9736188/mysql-persistent-connection-vs-connection-pooling
'it-source' 카테고리의 다른 글
설명설명 (0) | 2022.11.29 |
---|---|
Vue에서 변수를 선언하는 것과 다른 점은 무엇입니까? (0) | 2022.11.29 |
MariaDB의 기본 포트 번호는 무엇입니까? (0) | 2022.11.20 |
VMware Openstack 기반의 Fedora 클라우드 기반 - phpMyAdmin 오류 #2002 (0) | 2022.11.20 |
한 열에 따라 중복 항목에서 첫 번째 행 가져오기 마리아DB (0) | 2022.11.20 |