MongoDB에서 느린 쿼리로부터 앱을 보호 할 수있는 방법이 있습니까? 내 응용 프로그램에는 필터가 여러 가지 가능성이 있으며 이러한 모든 쿼리를 모니터링하고 있지만 인덱스 정의가 누락되어 성능을 저하시키고 싶지는 않습니다.느린 MongoDB 쿼리를 자동으로 종료하는 방법은 무엇입니까?
답변
언급 된 @ ignik과 같은 'notablescan'옵션은 색인을 사용하지 않아서 느린 쿼리를 실행할 수 없게합니다. 그러나이 옵션은 서버에 대해 전역이며 프로덕션 환경에서 사용하기에 적합하지 않습니다. 또한 테이블 스캔 외에 느린 쿼리의 다른 소스로부터 사용자를 보호하지 않습니다.
불행히도 지금 당장 원하는 것을 직접 할 방법이 없다고 생각합니다. $ maxTime 또는 $ maxScan 쿼리 매개 변수를 추가하는 JIRA 티켓이 있습니다. 도움이 될 것 같은데, https://jira.mongodb.org/browse/SERVER-2212에 투표하십시오.
이 옵션은 구현되었으며 버전 2.6 –
시간 인수를 전달하여 쿼리를 죽이는 것이 현재 지원되지 않는다고 생각합니다. 개발 측에서는 프로파일 러 레벨을 2로 설정할 수 있지만 발행 된 모든 쿼리를 기록합니다. 여기에서 얼마나 많은 시간이 걸리는 쿼리를 볼 수 있습니다. 나는 당신이 정확히 원했던 것이 아니라 모든 쿼리가 뚱뚱한 지에 대한 통찰력을 얻는 데 도움이된다. 그런 다음 당신의 앱 논리에서 그러한 쿼리가 시작된 경우를 정상적으로 처리 할 수있는 방법을 가질 수있다. 나는 대개이 접근 방식으로 도움이된다.
에서 사용할 수 있습니다. 프로덕션 환경에서 프로파일 링을 유지하면 성능에 영향을 미치므로 좋지 않습니다. currentOp를 사용하여 사용자 조작을 감시하고 killOp를 사용하여 너무 오래 걸리는 것을 제거하는 것이 훨씬 더 좋습니다. –
@AsyaKamsky 귀하의 의견에 감사드립니다. 그것에 대해 몰랐습니다 :) –
지금 버전이 2.6
인 경우 가능합니다. 자신의 press release에서 다음 볼 수 있습니다 MaxTimeMS 사업자 및 개발자들과
는 자원 활용의 더 나은 제어를 제공, 쿼리 자동 취소 를 지정할 수 있습니다;
따라서 MaxTimeMS을 사용하면 쿼리 실행 시간을 지정할 수 있습니다. 예를 들어 특정 쿼리가 200 밀리 초 이상 실행되는 것을 원하지 않습니다.
db.collection.find({
// my query
}).maxTimeMS(200)
멋진 점은 다른 작업에 대해 다른 시간 초과를 지정할 수 있다는 점입니다.
OP의 질문에 대답에 답하십시오. 이를위한 전역 설정이 없습니다. 한 가지 이유는 서로 다른 쿼리가 서로 다른 최대 허용 시간을 가질 수 있기 때문입니다. 예를 들어 ID로 userInfo를 찾는 쿼리를 가질 수 있습니다. 이것은 매우 일반적인 작업이므로 초고속으로 실행해야합니다 (그렇지 않으면 우리가 뭔가 잘못하고있는 것입니다). 따라서 우리는 200ms보다 오래 실행하는 것을 용인 할 수 없습니다.
하지만 우리는 하루에 한 번 실행되는 일부 집계 쿼리도 가지고 있습니다. 이 작업을하려면 4 초 동안 실행하는 것이 좋습니다. 그러나 우리는 10 초 이상 견딜 수 없습니다. 그래서 maxTimeMS로 10000을 넣을 수 있습니다.
어쨌든 글로벌 설정으로 만들 수 있습니까? –
이것은 서버 설정이 아니므로 쿼리의 옵션이므로 응용 프로그램 쪽에서 만 서버 측에서 설정할 수 없습니다. –
@IgorEscobar 죄송합니다. 귀하의 질문을 보지 못했습니다. 프로필에서 나는 php로 코드를 작성 했으므로 종료하려는 모든 쿼리에 대해이 'maxTimeMS'를 쿼리의 끝에 http://php.net/manual/en/mongocursor.maxtimems.php를 추가합니다 , 당신은 이것을 추가합니다. –
클라이언트 쪽에서 사용할 수있는 옵션 (2.6 릴리스부터 시작하는 maxTimeMS)이 있습니다.
서버 측에서는 모든 데이터베이스와 모든 작업에 영향을 미치고 시스템이 내부 작동을 위해 장기간 실행해야하는 경우 (예 : 복제 용 오류 발생)에도 영향을주기 때문에 매력적인 글로벌 옵션은 없습니다. 또한 쿼리 중 일부는 장기간 실행해도 괜찮습니다.
이 스크립트를 통해 쿼리를 실행 현재 모니터링하고 긴 및 사용자/클라이언트가 시작한 실행하는 사람을 죽일 것입니다 해결하는 올바른 방법 - 당신이 다음 디자인에 의해 오랫동안 실행하는 쿼리에 대해 예외에 구축 할 수 있습니다 , 또는 다른 쿼리/수집/등에 대해 다른 임계 값을 가질 수 있습니다.
그런 다음 db.currentOp() method (셸에서)을 사용하여 현재 실행중인 모든 작업을 볼 수 있습니다. "secs_running"필드는 작업이 실행 된 시간을 나타냅니다. 응용 프로그램/클라이언트가 시작하지 않은 장기 실행 작업을 종료하지 않도록주의하십시오. 예를 들어 샤드 된 클러스터에서 청크 마이그레이션과 같은 필수 시스템 작업이 될 수 있습니다.
- 1. MongoDB 쿼리를 어떻게 디버깅합니까?
- 2. CAcroApp를 올바르게 종료하는 방법은 무엇입니까?
- 3. QThread를 종료하는 방법은 무엇입니까?
- 4. emacs가 종료되면 ansi-term exit를 자동으로 종료하는 방법은 무엇입니까?
- 5. 느린 mysql 쿼리를 가속
- 6. 내가하지 느린 MDX 쿼리를
- 7. mongodb 쉘에서 mongodb 쿼리를 갖는 스크립트 실행
- 8. mongoDB 쿼리를 추적하는 방법
- 9. 느린 MongoDB 쿼리 : 이유를 설명해 주시겠습니까?
- 10. MongoDB node.js 드라이버를 사용하여 포함 쿼리를 수행하는 방법은 무엇입니까?
- 11. OR 조건을 사용하여 yii mongodb 쿼리를 작성하는 방법은 무엇입니까?
- 12. MongoDB (Java) - 자바 스크립트 파일에 저장된 쿼리를 실행하는 방법은 무엇입니까?
- 13. 루아 스크립트를 종료하는 방법은 무엇입니까?
- 14. 자바에서 스레드를 종료하는 방법은 무엇입니까?
- 15. performSelectorInBackground : thread를 종료하는 방법은 무엇입니까?
- 16. GenericKeyedObjectPool을 안전하게 종료하는 방법은 무엇입니까?
- 17. 애니메이션을 갑자기 종료하는 방법은 무엇입니까?
- 18. 내부에서 cherrypy를 종료하는 방법은 무엇입니까?
- 19. Jquery setIntereval을 종료하는 방법은 무엇입니까?
- 20. 파이썬에서 UDPServer를 종료하는 방법은 무엇입니까?
- 21. E_NOTICE에서 PHP를 종료하는 방법은 무엇입니까?
- 22. ajax-loader.gif를 종료하는 방법은 무엇입니까?
- 23. InputSteam을 선언하고 종료하는 방법은 무엇입니까?
- 24. pyplot 루프를 종료하는 방법은 무엇입니까?
- 25. Java 프로그램을 종료하는 방법은 무엇입니까?
- 26. wp7 앱을 종료하는 방법은 무엇입니까?
- 27. MVC에서 함수를 종료하는 방법은 무엇입니까?
- 28. 가장 느린 쿼리를 찾는 방법
- 29. mongodb에서 느린 쿼리를 시뮬레이트 하시겠습니까?
- 30. 문자열과 자동으로 Mongodb ObjectId 매핑하기
인덱스를 사용하지 않는 쿼리를 금지 할 수 있습니다. 이렇게하려면'notablescan' 옵션을'true'로 설정하여 MongoDB를 설정하십시오. – ghik
나는 아래의 해답 중 어느 것도 특히 만족스럽지 못하다는 것을 알고 있습니다. 현재이 방법이 없다고 생각하기 때문에, 대답은 "당신이 할 수 없다" 그 (아직) ". – acm
@acm 2.6을 사용하는 방법이 있습니다. 내 대답을 여기에서 확인할 수 있습니다. –