Oracle 에서 파티션 테이블에 지속적인 대용량 데이터 입력 속도 지연 0 8 6,955

by ccoma [Oracle 기초] oracle 대용량입력 [2017.09.11 12:07:17]


데이터의 지속적인 입력으로 인해 초기보다 성능이슈가 생겨서 문의드립니다.

<내용>

날짜와 ID값으로 파티셔닝이 된 테이블(A)이 있습니다.

해당 테이블(A)에 하루에 수천만건씩 새로운 데이터가 입력이 일어납니다.(실시간성)

A테이블은 하루에 한번씩 통계데이터 생성을 위해 새벽시간에 select 가 일어나고

A테이블에 몇달치 데이터가 적재되면서 새로운 날짜에 입력되는 데이터의 입력시간이

눈에 띄게 증가했습니다. 

 

<질문>

1. 날짜별로 파티션이 나눠져있어서 새로운 날짜의 데이터를 입력할때도 성능이 동일해야 맞는건지?

2. 인덱스를 생성해야하니 파티션과 무관하게 A테이블에 데이터가 늘어날수록 입력시간이 길어지는게 맞는건지?

3. 입력시간이 길어지는게 맞다면 접근은 어떻게 하는지..?

   3-1. A테이블을 최근1일 혹은 2일정도의 데이터만 놔두게 변경하고 과거데이터는 별도 테이블로 관리

   3-2. A테이블을 ID 별(20개 내외)로 별도의 테이블로 변경 구성

4. 오라클의 한 테이블에 권고되는 최대 row 수가 있나요?(찾아봐도 안나오네요...;;)

by 우리집아찌 [2017.09.11 13:01:02]

INSERT가 대량 데이터 이신가요?

파티션 테이블이면 파티션 단위로 독립된 테이블이라 보시면 되는데요.  3-1은 의미가 없어요.

ID별로 별도테이블이라고 써놓으셨는데 , 일반적이라면 날짜로 파티션닝하고 ID가 고정이시면 SUBPARTITION 해서 사용할텐데요.

전부 SELECT 할때 문제이지 INSERT시 문제로는 안보이는데요..


by ccoma [2017.09.11 13:48:27]

말씀드린대로 insert 가 실시간성으로 지속적으로 발생되는 데이터인데 하루치가 입력되는 총 건수가 수천만건(많게는 1억건 이상)입니다. ID값은 말씀하신대로 날짜에 대한 서브파티션인데 파티셔닝 된것만으로 해당 테이블의 전체 row가 얼마가 되든지 상관이 없이 성능이 유지되는건가요? 
지금 상황으로는 초기보다 입력성능이 너무 떨어져서요. 날짜 파티션당 1억건 정도이고, 해당 테이블의 전체 데이터는 몇백억건입니다.

 


by 우리집아찌 [2017.09.11 14:08:58]

입력부분이 느려진건 잘 이해가 되지않네요.

인덱스는 LOCAL로 되어있으신가요?

인덱스가 많아지지는 않으셨나요?

스토리지쪽 문제가 아닌가싶기도 하고요.

파티션 TABLESPACE는 어떻게 되어있나요?

 


by ccoma [2017.09.11 14:36:09]

인덱스는 Global 인듯합니다.(default 값으로 한듯함...) -->  운영팀에 확인해보니 local 이라합니다.;;ㅎ

스토리지는 중간에 추가로 물리디스크가 몇개 추가된적이 있고

파티션은 레인지파티션이고 테이블스페이스는 인덱스, 데이터로만 구분되어 있습니다.

파티션별로 별도의 테이블스페이스는 나누어져 있지않습니다.

 


by 우리집아찌 [2017.09.11 14:24:38]

궁금한데 INSERT를 한번에 100만건씩 이렇게 하시는건 아니시죠?

건건히.. INSERT하시는거죠?


by ccoma [2017.09.11 14:58:01]

아아...insert는 한번에 몇십건씩만 합니다. 다중 프로세스라서 동시성을 감안해도 200건 안쪽입니다.


by 우리집아찌 [2017.09.11 15:27:34]

-인덱스가 GLOBAL NO-PARTITION 으로 잡혀있으면 사이즈가 어마 어마 할텐데 

  저도 그런 경우가 없어서 확인은 못해드리지만 INSERT시 혹시 문제가 되지않을까 조심스럽게 추측해봅니다.

- INSERT시 INSERT - SELECT 이시면 SELECT 단계에 속도 저하로 인한건지 확인해보시고요

- 서브파티션도 TABLESPACE를 선언할수있으니 한가지 방법이라 생각합니다.

 


by ccoma [2017.09.12 08:59:34]

다시 확인해보니 local 으로 설정되어있다 합니다. insert select 는 없는 구문입니다.

서브파티션에 대한 테이블스페이스도 고려해보도록 하겠습니다.

답변들 감사드립니다..

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입