DB 연결을 여는 데 얼마나 많은 비용이 듭니까?


15

CPU 집약적이 MySQL에서 DB 연결 (웹 앱용)을 열고 닫는 방법

  • ... DB 소프트웨어가 localhost에있을 때?
  • ... DB 소프트웨어가 다른 머신에있을 때?

답변:


12

DB 연결 당 할당되는 메모리의 양을 고려하십시오. 어떤 것들을 할당해야합니까? 357 페이지 MySQL 5.0 인증 연구 가이드 에 따르면 :

서버는 각 클라이언트 연결에 대해 여러 버퍼를 유지 관리합니다. 하나는 클라이언트와 정보를 교환하기위한 통신 버퍼로 사용됩니다. 테이블을 읽고 결합 및 정렬 조작을 수행하기 위해 클라이언트마다 다른 버퍼가 유지 보수됩니다.

연결 별 버퍼를 제어하는 ​​설정은 무엇입니까?

연결이 이루어질 때 이러한 버퍼를 할당하고 할당 해제하는 데 시간이 걸립니다. max_connections 으로 해당 값의 합계를 곱하는 것을 잊지 마십시오 . 참고로, mysql_pconnect 를 사용 하지 마십시오. PHP와 MySQL의 지속적인 연결이 제대로 이루어지지 않습니다. 이 주제에 대한 두 가지 정보 링크는 다음과 같습니다.

OLTP와 같은 대량 읽기, 대량 쓰기 환경에서는 RAM 사용량 및 OS 스왑으로 인한 억제 가능성 측면에서 비용이 많이 듭니다. 쓰기가 적고 읽기가 적은 웹 사이트에서는 크게 걱정하지 않습니다.


10

그것이 "얼마나 더 많은 비용이 드는지"확실하지 않습니다. 동일한 연결을 다시 사용하는 것보다 비용이 많이 듭니다. 관찰 할 내용은 연결 풀링을 올바르게 사용하고 있는지, 풀의 포화 정도, 상자의 사용 가능한 리소스 등에 따라 다릅니다.

일반적으로 데이터베이스와의 상호 작용을 위해 루프를 수행하는 경우 루프 내에서 열고 닫는 것보다 동일한 활성 연결을 다시 사용하는 것이 훨씬 낫습니다. .


4

객체를 재사용하고 분해하고 다시 구축하는 것 (장점과 단점이 있음) 사이의 딜레마는 종종 타협으로 해결할 수 있습니다. 즉 객체를 캐시하지만 제한된 시간 동안 (예 : 만료) 오브젝트에 자주 액세스하면 계속 재사용됩니다. 그러나 한동안 사용하지 않으면 만료 메커니즘이 그것을 폐기하여 다시 필요할 때 다시 만들어야합니다.

시스템은 메모리가 부족할 때 호출되는 이러한 종류의 캐시에 대한 전역 후크를 가질 수 있으며, 이는 최근에 사용되지 않은 객체를 모두 삭제하도록 트리거합니다.


2

MySQL은 스레드 캐시 (thread_cache_size)를 사용하여 연결 (또는 스레드)을 캐시합니다. 최대 값은 100입니다. 클라이언트가 연결을 닫으면 캐시로 리턴됩니다. 새 연결이 열리면 스레드 캐시를 확인합니다. 사용량이 많은 시스템에서 연결을 열면 특히 쿼리를 오래 실행하는 경우 연결을 여는 데 많은 비용이들 수 있습니다.

https://dev.mysql.com/doc/refman/5.6/en/connection-threads.html Mysql Enterprise를 구매할 수있는 경우 Mysql 5.6에서 구현 된 Thread Pool 플러그인을 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.