programing

MariaDB. 연결 재사용

codeshow 2023. 10. 9. 23:40
반응형

MariaDB. 연결 재사용

매우 짧은 기간 동안 수천 명의 사용자가 ODBC를 통해 연결해야 하는 데이터베이스를 가지고 있습니다(win32 데스크톱 앱에 대한 구독 라이선스 데이터베이스입니다).이들은 연결하고, 실행 및 연결 해제를 승인받습니다.max_connections가 1000으로 설정되어 있지만 서버 측에서 예상할 수 있는 재사용 방법이 보이지 않습니다. 즉, 서버는 현재 약 800개의 프로세스/연결이 절전 모드에 있고 다른 200개는 동일한 서버의 다른 데이터베이스에 있는 실제 데이터에 연결되어 있습니다. 그러나 클라이언트 앱에 의한 새로운 시도가 '너무 많은 연결'을 거부했습니다.

제가 무엇을 빠뜨리고 있나요?

지금은 max_connections를 1500개로 늘렸지만, 500개의 sleep connections만 있으면 장기적인 해결책이 아닙니다.클라이언트가 제대로 연결을 끊고 있지만 만일의 경우를 대비하여 win32 앱에 진단을 추가하고 있습니다.

MariaDB 10.3.11

MySQL ODBC 5.3 ANSI 드라이버 사용

'Sleeping' 세션을 많이 보는 게 일반적입니다.즉, 클라이언트가 연결되어 있지만 지금은 쿼리를 실행하지 않습니다.클라이언트는 SQL 쿼리를 실행하기 전이나 실행한 후에 다른 작업을 수행할 가능성이 높습니다.ssh로 서버에 로그인한 경우와 마찬가지로 대부분의 경우 셸 프롬프트에 앉아 어떠한 프로그램도 실행하지 않습니다.

고객이 데이터를 필요로 할 때까지 연결을 기다렸다가 데이터를 받은 후 즉시 연결을 끊도록 설계하는 것은 고객에게 달려 있습니다.앱에서 시작할 때 데이터베이스에 연결하고 연결 상태를 유지하는 것은 매우 일반적인 일입니다.또한 일부 프레임워크에서는 시작할 때 여러 연결을 만들어 클라이언트 앱의 여러 스레드에서 사용할 수 있는 풀로 취급하는 것이 매우 일반적입니다.이것은 당신의 앱이므로 필요에 따라 이것을 구성해야 합니다.

다른 시도는 MariaDB 서버에서 스레드 풀을 사용하도록 설정하는 것입니다.https://mariadb.com/kb/en/thread-pool-in-mariadb/ 참조

이것은 클라이언트측 연결 풀과는 다릅니다.스레드 풀을 사용하면 수천 명의 클라이언트가 연결된 것으로 생각할 수 있으며, 매 연결마다 MariaDB 서버에 전체 스레드를 할당하지 않아도 됩니다.클라이언트에 쿼리할 내용이 있을 경우, 클라이언트에 스레드 중 하나가 제공됩니다.해당 클라이언트가 완료되면 연결을 계속 유지할 수 있지만 MariaDB 서버의 스레드는 다른 클라이언트의 요청에 재할당됩니다.

이는 많은 클라이언트가 "버스트" 워크로드를 처리하는 데 유용하며, 귀사의 경우에도 적합할 것으로 보입니다.

언급URL : https://stackoverflow.com/questions/67199217/mariadb-connection-re-use

반응형