2017-12-16 20 views
1

) 5000 개의 레코드를 반환하는 뷰와 함께 UNION (HANA 2 SP2의 그래픽 계산보기에서)에 메모리 덤프가있는 2800 개의 레코드가있는 테이블이 있습니다. SQL 조합을 모두 시도했지만 여전히 작동하지 않습니다. 조합보기에는 논리가 없습니다.SAP HANA OOM 오류 (UNION

테이블의 선택 상위 1000은 데이터를 < 1s로 반환하고 5k 레코드가있는 뷰는 2s의 데이터를 반환합니다. 논리를 사용하지 않고이 2를 결합하면 - 집계 노드를 투영으로 전환 한 후에도 여전히 메모리가 부족합니다. 내가 여기서 무엇을 놓치고 있니?

내부 오류로 트랜잭션 롤백 : 할당에 실패했습니다. $ 크기 $ = 2048; $ name $ = SearchAlloc; $ type $ = pool; $ inuse_count $ = 11184979; $ allocated_size $ = 20190632592; $ alignment $ = 16

+0

쿼리 실행의 차이점을 이해하기위한 첫 번째 단계는 두 문에 대한 EXPLAIN PLAN과 PlanViz (trace)를 검토하는 것입니다. 내 생각 엔 SELECT TOP 1000 만 최종 결과 집합에 적용되고 두 하위 쿼리/calc의 UNION ALL이 적용됩니다. 그 전에 뷰를 완전히 구체화해야합니다. 이 경우 UNION 연산 전에 데이터 크기를 제한하는 것이 좋습니다. –

답변

0

특히 "노동 조합"뿐만 아니라 "노동 조합 모두"는 많은 양의 메모리를 소비 할 수 있습니다. 초기 구체화가 내부적으로 사용되는 경우. 나는 며칠 전에 "모든 노동 조합"이 130 기가 바이트의 임시 메모리를 소비 한 사례를 가지고있었습니다. 조합을 모두 두 문장으로 나눈 후 최대 메모리 소비는 11GB로 떨어졌습니다! 응용 프로그램에서 허용하는 경우이 방법을 시도하십시오. Lars에 대한 조언을 따르고 planviz와 union all을 비교하십시오. 참조

확인 다음 SAP 참고 : https://launchpad.support.sap.com/services/pdf/notes/1999997/E

19 .... "Avgoid UNION이 ALL, UNION, INTERSECT는,

를 제외하고 이러한 작업은 열 엔진에 의해 처리되고 그렇게 할 수없는 최적화 (예 : UNION 또는 UNION ALL 대신에 OR) ... "

평소와 마찬가지로, 그것은 모두 귀하의 유스 케이스 등에 따라 다릅니다.