반응형

최근 MSSQL에 python을 통해 전처리 한 대용량 데이터를 insert할 일이 생겨, 관련된 내용을 정리하려고 합니다.

 

테스트에 사용하는 데이터의 row는 10만건이며 행은 15행이 존재합니다.

 

TEST1 : 6분26초 (하나씩 insert - 최종 commit)

첫 번째 테스트는 데이터를 하나씩 삽입 후에 commit을 진행하였습니다.

10만건의 데이터를 삽입하는데 10분이 걸렸으며, 모든데이터 삽입 후 commit을 하기 때문에 중간에 에러 발생시 롤백이 진행됩니다.

 

 

 

TEST2 : 18분41초 (하나씩 insert - 삽입 마다 commit)

 두 번째 테스트는 TEST1과 같은 방식이지만 하나씩 삽입할 때마다 커밋을 해주었습니다. 이런경우 중간에 에러가 날 경우라도 기존에 삽입된 데이터는 유지된다는 장점이 있지만 TEST1에 비해 약 3배 정도 느려진 것을 확인할 수 있습니다.

 

 

 

TEST3 : 23초 (bulk insert)

 세 번째 테스트는 한번 삽이할 때 30개의 데이터를 삽입하는 방법입니다. 벌크 인서트라고 하며, 기존 TEST 대비 엄청 빠른 속도를 보입니다. 

저는 아래 답변을 참고하였습니다.

https://hashcode.co.kr/questions/10863/python-%EC%9A%A9%EB%9F%89%EC%9D%B4-%ED%81%B0-dataframe%EC%9D%84-mssql%EC%97%90-%EB%B9%A0%EB%A5%B4%EA%B2%8C-insert%ED%95%A0-%EC%88%98-%EC%9E%88%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%B4-%EB%AD%94%EA%B0%80%EC%9A%94

 

python 용량이 큰 dataframe을 mssql에 빠르게 insert할 수 있는 방법이 뭔가요?

python의 pandas로 데이터프레임을 만들고 mssql에 insert하려는데 데이터프레임이 평균적으로 25만 rows에 14컬럼으로 형성됩니다.sqlalchemy.create_engine으로 sql형태로 전체를 insert하는 방법을 해보니 로컬

hashcode.co.kr

 

 

TEST4 : 7분 38초 (executemany)

executemany 말 그대로 많은 데이터를 인서트하는 방법입니다. 하지만 제가 잘 이해를 못해서 그런지 성능이 크게 좋지 못했습니다.

 

결론

앞선 테스트에서 봤듯이 저는 TEST3번을 통해 데이터를 INSERT했습니다.

TEST3 방법을통해 약 190만건의 데이터를 INSERT하는데 7분41초가 걸렸으며, 혹시 이보다 빠른 속도를 원하시는 분들은 sqlalchemy(create_engine), to_sql등 찾아보면 좋을 것 같습니다.

 

반응형

+ Recent posts