2011-01-03 2 views
0

기반 on the answers to this question 일괄 처리 크기는 Select N + 1 쿼리를 사용하는 것과 Eager Fetch 호출로 너무 많은 데이터를 가져 오는 것 사이의 솔루션입니다.Nhibernate 성능 고려 사항 - eager loading 대 batchsize 결정을 비교하는 데 도움이 필요합니다.

이상적인 배치 크기를 결정하는 과정은 무엇입니까?

하나의 쿼리로 모두 시도해야합니까? 증가하는 배치 크기가 어떤 시점에서 느려지 기 시작합니까?

내 질문에 왜 모든 대용량 N + 1 상황을 "잡으려고"매우 큰 배치 크기가없는 것일까?

in this article about nhibernate performance 또한 nhibernate 성능에 관한 섹션 (19.1.5. 일괄 페칭 사용)에서 일괄 페칭을 사용하여 이러한 쿼리 (Cats -> Owners, Owners -> Children)를 사용하는 것에 대해 이야기하지만, Eager Fetch는 컬렉션의 모든 항목에있는 해당 속성에 액세스해야한다는 것을 알고 있다면 이러한 경우 최적이 될 수 있습니까?

답변

1

배치 크기가 증가하면 어떤 점에서 이 느려지나요?

어쩌면 내가 여기에 뭔가를 놓친 것일 수도 있지만 grabbing lots of data은 한 번에 시도해 봐야하며 피해야합니다. 확실히 페이징 전략은 반환 할 행의 수를 먼저 reduce 줄 것입니다. 페이징 크기를 계산 한 후에는 일괄 처리를 적절하게 조정할 수 있습니다.

물론이 나는 batch-size 내가이 모든 데이터를 반환하고 왜 내가 먼저 해결하는 것이 다음 100 말을 말을 설정해야 할 개인적 경우

는 ... 내 생각과 사용 사례를 모른 채하지 않을 수 있습니다 옳은.

공식 문서 : 이전 사람이 더 열망로드 및 모든 일괄 처리를 수행하지 않았다 Improving performance by using batch fetching

+0

. 한 페이지에서 데이터베이스에 대해 85 개의 쿼리가 생성되었습니다 (일괄 처리 작업도 포함). 열망하는 가져 오기는 약 7 개의 쿼리로 이것을 줄이지 만 전반적인 성능 관점에서 큰 데이터 세트가 주어지면 시스템 속도가 느려지는지 파악하려고합니다. – leora

+0

링크를 작성해 주셔서 감사합니다. http : //www.javalobby.org/java/forums/m91885142.html – Rippo

+0

. 그 위대한. 실제로 몇 가지 질문이 제기됩니다. 1) Select N + 1을 피하기 위해 항상 배치에 모든 것을 사용하지 않는 이유는 무엇입니까? 거기에 어떤 단점이 있니?. 또한,이 질문에 어떤 생각을 가지고 있습니까 : http://stackoverflow.com/questions/4584675/how-to-get-optimal-performance-with-recursive-self-joins-using-nhibernate 찾을 수 없습니다. 재귀자가 조인을 위해 nhibernate에서 작동하는 패턴 – leora