get_connection_stats 함수에 의해 반환 된 통계는 일반적으로 데이터베이스 연결 풀 또는 버퍼에서 얻습니다. 이것은 경우에 따라 실시간으로 업데이트되지 않음을 의미합니다. 데이터베이스 연결의 메커니즘은 연결을 캐시하여 각 요청에 새 연결을 생성하는 오버 헤드를 줄이기 때문에 얻은 데이터는 실제 연결의 수 또는 상태와 다를 수 있습니다.
해결책 :
실시간 연결 상태가 필요한 경우 데이터베이스 자체가 제공 한 관리 도구 (예 : MySQL의 Show Status Command)를 사용하여보다 정확한 데이터를 얻을 수 있습니다.
과도한 연결 캐시 나 과도한 유휴 연결을 피하기 위해 연결 풀이 올바르게 구성되어 있는지 확인하십시오.
높은 동시성 환경에서는 데이터베이스 연결 상태가 자주 변경 될 수 있습니다. 데이터베이스에 동시에 액세스하기위한 여러 요청으로 인해 연결 오버 헤드가 매우 높아지고 연결 횟수의 증가 또는 감소가 매우 빠릅니다. 이 경우 get_connection_stats가 반환 한 데이터는 예상되는 정확한 값이 아닐 수 있습니다.
해결책 :
데이터베이스 연결 사용을 모니터링하고 최적화하고 효과적인 연결 관리를 위해 연결 풀을 사용하며 연결이 빈번한 개방 및 연결을 피하십시오.
동시성이 높은 상황에서는 데이터베이스 연결 압력의 균형을 맞추기 위해 일부 미들웨어 또는로드 밸런싱 메커니즘을 사용하는 것을 고려하십시오.
응용 프로그램이 여러 스레드 또는 프로세스에서 실행되면 다른 스레드 또는 프로세스간에 일관되지 않은 연결 통계가 발생할 수 있습니다. 예를 들어, get_connection_stats는 다른 프로세스 또는 스레드의 연결 상황을 무시하면서 특정 프로세스 또는 스레드에서 연결 데이터 만 반환 할 수 있습니다.
해결책 :
다중 프로세스 또는 다중 스레드 애플리케이션에서 모든 데이터베이스 연결이 합리적으로 관리되고 다른 스레드 또는 프로세스의 데이터가 올바르게 동기화 될 수 있는지 확인하십시오.
데이터베이스 연결의 정확한 통계를 유지하기 위해 공유 메모리 또는 기타 크로스 프로세스 동기화 메커니즘을 사용하십시오.
get_connection_stats는 PHP 구성, 데이터베이스 드라이버 또는 확장 구성의 영향을받을 수도 있습니다. 예를 들어, 일부 PHP 확장은 데이터베이스 연결에서 일부 추가 캐시 또는 최적화를 수행 할 수 있으므로 실제 값과 일치하지 않는 데이터가 일치하지 않습니다.
해결책 :
불필요한 캐시 나 최적화가 수행되지 않도록 PHP 및 데이터베이스 연결 관련 구성 항목을 확인하십시오.
데이터베이스 드라이버 및 PHP 확장을 업데이트하여 사용 된 버전에 알려진 버그 또는 성능 문제가 없는지 확인하십시오.
경우에 따라 데이터베이스 연결을 닫는 것은 즉, 특히 데이터베이스로드가 높을 때 연결을 닫는 작업이 지연 될 수 있습니다. 따라서 get_connection_stats는 연결을 닫은 후 통계를 반환 할 수 있지만 실제 연결은 일정 기간 동안 활성화 될 수 있습니다.
해결책 :
연결이 닫힐 때 지연이 없는지 확인하기 위해 데이터베이스의 연결 폐쇄 메커니즘을 최적화하십시오.
쓸모없는 연결을 제 시간에 해제 할 수 있도록 정기적 인 연결 청소가 수행됩니다.
응용 프로그램과 데이터베이스가 네트워크를 통해 연결되면 네트워크 지연, 패킷 손실 또는 프록시 서버 중재는 Get_connection_stats에서 반환 한 데이터에도 영향을 줄 수 있습니다. 예를 들어, 네트워크 고장으로 연결을 일시적으로 사용할 수 없게 만들 수 있지만 통계에 즉시 반영되지는 않습니다.
해결책 :
네트워크 연결의 안정성을 확인하고 데이터베이스와 응용 프로그램 서버 간의 통신 품질을 확인하십시오.
네트워크에 문제가 있으면 더 많은 로깅 및 예외 처리를 통해 문제를 적시에 감지하십시오.