우리는 내가 몇 가지 제안을 (우리는 오라클 10g R2에있는) 상황이오라클 DB 성능 튜닝
1과 같은 s 번째입니다) 그것은 레거시 시스템이 필요 성능 문제로 실행하고 있습니다.
2) 일부 표에는 지난 10 년 동안의 데이터가 저장되어 있습니다 (첫 번째 버전이 출시 된 이후로 데이터가 삭제되지 않았다는 의미입니다). 이제 대부분의 OLTP 테이블에서 약 30,000,000 ~ 40,000,000 개의 행이 있습니다.
3) 이러한 테이블에 대한 검색 작업은 5-6 분 정도 소요됩니다. (xxxxx에서 select count (0)와 같은 간단한 쿼리 인 isActive = 'Y'는 6 분 정도 소요됩니다.) Explain 계획을 보았을 때 isActive 열에서 인덱스 스캔이 발생하는 것으로 나타났습니다.
4) 우리는 필요하지 않은 이전 데이터를 보관 및 삭제하고 팀이이를 위해 노력하고 있음을 제안했습니다. 5 년 동안의 데이터를 삭제하더라도 테이블에 약 15,000,000 ~ 20,000,000 개의 행이 남아 있기 때문에이 테이블에 테이블 분할 기능이 있다고 생각했지만 사용자는 이 테이블의 열을 UI에서 가져 오면 테이블 파티셔닝의 목적을 뛰어 넘을 것입니다.
이 상황을 개선하기 위해 수행해야 할 단계는 무엇입니까?
"활성"인 20mm 레코드 중 10mm가있는 경우 FTS가 발생하지 않을 것이라는 점에 놀랐지 만 그러한 쿼리에는 다소 시간이 걸린다는 것은 놀라운 일이 아닙니다 (oltp 유형이 아님) 쿼리, 자세한 배치/보고서 유형). 대부분 일괄 처리/보고서 유형 쿼리에 대한 우려가 있습니까? – tbone
아마도이 질문을 살펴볼 가치가 있습니다. 본질적으로 똑같은 것입니다. http://stackoverflow.com/questions/2030011/how-to-index-y-n-column-in-oracle –
1) 어떤 유형의 인덱스 스캔입니까? 빠른 전체 인덱스 스캔, 인덱스 범위 스캔, 다른 것? 2)이 테이블에 대한 좋은 통계가 있습니까? 3) 5 년의 데이터를 삭제하는 프로세스에 따라 10 년의 데이터를 저장할 공간이있는 테이블과 인덱스가 남아있을 수 있습니다. 이렇게 빠른 전체 인덱스 스캔과 전체 테이블 스캔은 여전히 많은 블록을 읽어야합니다. 4) isActive의 어떤 비율이 'Y'입니까? –