우선 속도 개선을 위해 참고 했던 블로그는 아래 링크 남깁니다.
SQLite 데이터베이스를 10배 빠르게 만드는 방법들 » 맹스비 블로그
QLite 데이터베이스를 사용하다보면, 데이터가 많을 경우 처리 속도가 만족스럽지 못한 경우가 생길 수 있습니다. 그럴 때에는 무작정 다른 종류의 데이터베이스를 찾아보거나 다른 기술을 도입
mangsby.com
주식 자동 매매 프로그램에 DB를 LocalDB(MS)를 사용 하고 있었습니다.
이유는 간단하기도 하고 성능도 좋고 기존에 사용해 왔던 MSSql 쿼리문 및
StoredProcedure를 거의 그대로 사용 가능 했기 때문이였죠
그런데 지인이 주식 자동 매매 프로그램을 서버에 올려 24시간 켜놓고 테스트 하려다
서버엔 깔린 DB와 LocalDB와 충돌이 발생 했습니다.
물리적으로 접근 할 수 없는 서버이거니와 제가 접속 할 수도 없는 서버라
급하게 SQLite로 DB를 옮겨 타게 되었는데
음.... (쿼리문이 겁나 구림)
그래도 인내심을 가지고 모두 수정 하고 돌려 보고 쿼리문 에러 다 수정 했더니
건 바이 건으로 IO가 일어나서 하드를 겁나 긁었고(이것도 성능 문제와 연관 있습니다.)
루프를 돌리는 곳에서 Transaction걸고 한번에 처리 하도록 수정을 했더니
큰 뭉텅이로 쓸때 속도가 너무 느려 졌습니다.
아무리 위에 링크대로 따라하고 해도 문제가 해결 되지 않아
고민 하던중... SQLiteConnection을 Open 할때 엄청 느리다는 것을 알았습니다.
(특히나 테이블이 많아 질수록 더욱 느려집니다.
거기다 종목별 테이블을 가지고 있어서 수백에서 천개가 넘게 테이블을 가지고 있기 때문에
더욱더 느렸습니다.)
그전 LocalDB를 쓸때 코드에선 자주 Open Close를 사용 했었는데
SQLite에서는 안되겠더라구요
** 결국 프로그램 실행 시점에 Open 종료 시점에 Close를 하게 하므로써
LocalDB의 성능과 큰 차이가 없게 됐습니다.
ps : 이렇게 오늘도 한 나절 날렸지만 해결 해서 보람있네요
'Programming > SQLite' 카테고리의 다른 글
SQLite 테이블에 컬럼이 있는지 체크 하기 (0) | 2021.04.07 |
---|
댓글