2017-12-21 3 views
0

QPS가 100이고 DB 서버의 연결 제한이 1000 인 DB 서버에 대한 많은 요청이 동시에있는 경우 요청이 느린 쿼리 일 경우 궁극적으로 inactivity timeout이 될 것입니다. npm packagemysql이 새 연결을 만들지 않도록하려면 어떻게해야합니까?npm mysql 라이브러리를 사용할 때 db를 보호하는 방법은 무엇입니까?

npm packagemysqlinactivity timeout과 같은 치명적인 오류로 연결 개체 풀에서 연결 개체를 제거하고 새 연결을 만들 수있는 공간을 남겨두기 때문입니다.

+0

초당 쿼리 수는 약 100입니다. max_connections = 1000은 다소 높습니다. 몇 분 동안 사용하지 않으면 (wait_timeout) 연결을 끊을 수 있습니다. 클라이언트는 장시간 (수 시간) 연결을 끊지 않아야합니다. 'npm'외에 문제는 무엇입니까? –

+0

@Rick James, 내장 된 연결 풀은 풀에서'비활성 시간 초과 '와 같은 치명적인 오류가있을 수있는 잘못된 연결 개체를 제거하고 소켓은'FIN' 패킷을 보내고 풀은 새로운 연결 개체를 생성합니다 . 시간 초과 쿼리가 몇 시간 동안 지속되면 db 서버는 마지막으로 연결을 사용합니다. – Aflext

답변

0

로드가 많은 경우 연결이 지속되는 연결 풀을 사용해야합니다. 이것들은 일반적으로 hight 레벨 쿼리 빌더와 ORM (knexsequelize)에서 사용할 수 있습니다.

하지만 사용하지 않으려면 native pools을 사용해보십시오.

+0

답해 주셔서 감사합니다. 그러나 [mysq] 풀 (https://github.com/mysqljs/mysql#pooling-connections)은 치명적인 오류 연결을 제거하고 요청이 계속되면 새로운 연결을 생성합니다.이 연결은 db의 연결 제한을 초과 할 수 있습니다 서버 – Aflext

+0

연결 제한에 도달하지 않도록 최대 연결 수, 최대 풀 및 최대 연결 시간 제한을 구성해야합니다. 수동으로 너무 오랫동안 실행되는 연결을 종료 할 수도 있습니다. 어떻게 든이 문제를 다른 방법으로 해결할 마법은 없습니다. – Jehy

+0

로드가 많은 경우 최대 연결 수를 10으로 설정해도 많은 연결이 생성 될 수 있습니다. 예를 들어 QPS 1000으로 db를 요청하면 각 요청은 많은 'count'및 ' 순서대로 '색인을 사용하지 않고, 만약 내가 40 분을 요청 시뮬레이션, DB 서버에 450 연결있어! – Aflext

관련 문제