2012-02-15 11 views
4

누구든지 MongoDb의 서버 측에서 쿼리에 시간 초과를 추가하는 방법을 알고 있습니까? 클라이언트 쪽 시간 초과가 아닙니다 (C# 드라이버를 사용하고 있습니다). 클라이언트가 충돌하고 Mongo에 대한 연결이 끊어지는 문제가 있지만 서버는 계속 쿼리를 실행합니다. 이로 인해 서버의 대기열에 불필요한/오래된 쿼리가 많이 생성됩니다. 의 시작시,MongoDb의 쿼리 시간 초과

http://www.mongodb.org/display/DOCS/Viewing+and+Terminating+Current+Operation

또는 : 당신은 당신이/정지 죽이고 싶어하는 이전에 클라이언트 연결에서 이러한 장기 실행 쿼리가있는 경우

+0

실행중인 쿼리의 예제를 추가 할 수 있습니까? 쓰기 안전 옵션을 설정하고 있습니까? 약간의 불명확 한 점 - 연결이 끊어지면 새로운 쿼리가 어디서 오는가, 아니면 쿼리가 계속 진행되는 일정 시간 동안인가? –

+1

@AdamC : 쿼리가 오래 실행되는 쿼리가있을 수 있으며 연결이 끊어 지더라도 아무도 결과를 원하지 않더라도 다른 쿼리를 차단하여 계속 실행합니다. 나는 이것들을 가지고 있었다. –

+0

@Sergio가 올바르게 처리했습니다. 주어진 시간에 여러 클라이언트가 서버에 접속하고 있습니다. X는 복잡한 쿼리를 db에 보내고 이후에 충돌합니다 ... 서버는 X에 대한 연결이 종료 된 경우에도 해당 쿼리를 계속 실행합니다. – carlbenson

답변

1

, 당신은 당 그들을 죽일 수동으로 하나에 필요 새로운 클라이언트를 사용하면 더 많은 프로그래밍 방식 (로그에서 마지막으로 실행 한 쿼리를 가져오고 이전 클라이언트의 쿼리이기 때문에 종료)을 수행 할 수 있습니다. 프로그램을 통해 죽이고 싶은 작업을 식별 할 수 있는지 여부를 결정할 수 있는지 여부는 여기에서 핵심입니다. 기내 작업을 추적하기 위해 앱에 일부 로깅을 추가해야 할 수도 있습니다.

+1

예, 아마도 우리가 할 수 있지만, 대신에 dbcurrentOp()의 cron 결과를 검사하는 대신에 secs_running이 더 큰 작업 인 경우를 생각해 봅시다. mongo DB 엔진을 죽이고 싶습니다. 그러한 쿼리 ... – Betlista