가끔 Select 하는 DateSet 자체는 문제 없는데, 연결된 컴포넌트 때문에 쿼리 결과가 늦게 보이는경우도 있습니다
박지훈.임프 님이 쓰신 글 :
: 난감하고 다른 정보가 많지 않아서 그러시겠지만.. 질문 내용이 좀 추상적입니다.
:
: 그러니까, 느리다고 느끼시는 수준이 어떤 디비(혹은 다른 어떤 경험)와 비교해서인지, 또 select하는 애플리케이션 단에서 접근하는 방식이 뭔지도 알 수도 없고(델파이나 C++빌더인지 혹은 웹인지 혹은 디비 관리툴인지), 또 해당 테이블에 키와 인덱스는 어떻게 만드셨는지, 필드들의 크기는 어떤지(더 중요한 것은 한 레코드의 바이트 크기가 얼마인지) 등등의 정보가 전혀 없네요. 하드웨어 사양이 어떤지도 전혀 없고..
:
: 뭔가가 문제라고 여기시려면 전후 상황과 어떤 대상과 비교하고 있는지 등의 정보가 필요하지 않겠습니까.
:
: 참고삼아 말씀드리면, 말씀하신 대로 1초에 1레코드씩 인서트가 된다고 하면 하루치 데이터는 86,400 레코드인데, 필드가 아주 큰 것이 아니라면 이런 정도의 레코드를 처리하는 데에 속도 문제가 있는 디비는 로컬과 RDBMS 어디에도 없습니다. 이런 정도의 작업이라면 디비들에 따라 성능 차이를 따지는 것도 좀 그렇고요. 따라서 님께서 접근하신 방법에 문제가 있는 것은 아닌지 검토가 필요하실 듯 싶습니다.
:
: 가장 의심스러운 것은, select한 레코드 전체를 한꺼번에 다 fetch하려고 시도하신 게 아닌가 하는 것입니다. 어떤 디비이든 수만개의 레코드를 한꺼번에 페치를 해버리면, 단순히 select에 들어가는 시간만 드는 것이 아니라 서버측에서 디비로부터 읽어들이고 네트워크로 로컬로 전송하는 시간, 그리고 로컬에서 메모리 처리 등에 필요한 시간까지 한꺼번에 다 소요됩니다. 이건 고가의 오라클이나 MS SQL이라고 해도 약간의 정도 차이가 있을 뿐 똑같이 순간적으로 랙이 걸립니다.
:
: 대용량 레코드 데이터를 셀렉트했는데 엔터를 치자 마자 곧바로 결과가 나오는 경우를 연상하고 그런 경우와 비교하시는 거라면, 그건 전체 페치가 안되고 기껏해야 수십개 정도의 레코드만 페치해왔기 때문입니다. 당근 파이어버드도 일부만 페치하면 그렇게 빠르게 나옵니다.
:
: 사실 몇만개 정도를 조인도 없이 단순 셀렉트하는 속도는 데이터베이스의 성능이나 아키텍처 우열을 가리는 데에 거의 이슈가 안되는 문제입니다. RDBMS의 성능을 거론해야 할 정도의 실무에서는 그런 단순 셀렉트는 거의 없을 뿐만 아니라 전체 시스템의 성능을 좌우하는 것은 거의 모두가 복잡한 조인이 걸린 경우이기 때문입니다.
:
: 물론 로깅성 데이터라서 조인이 거의 필요하지 않은 경우도 있겠습니다만, 그런 경우라면 차라리 로컬 디비를 쓰시는 게 최고의 속도가 나옵니다. 오라클을 쓰는 것보다, 같은 성능의 하드웨어 서버에서 파라독스를 쓰면 정말 환상적인 속도가 나온답니다.
:
: 그렇다고 해서 파이어버드가 단순 인서트와 단순 셀렉트 작업에 있어 느린 것은 아닙니다. 1초에 5필드 정도의 레코드를 인서트하신다고 하셨는데, 그런 정도의 수준은 로깅을 위해 디비를 사용하는 일반적인 경우보다 아주 가벼운 수준입니다. 제가 2년전에 성능 테스트를 할 때는 파이어버드로 레코드당 500바이트 정도 되는(꽤 큰 편이죠) 레코드들을 초당 최소 백개 이상씩 인서트하는 로깅 엔진을 파이어버드 기반으로 만들었었습니다. 물론 서버 장비가 아닌, 그리고 개발자급의 좋은 성능의 피씨도 아니고 일반 피씨에서 돌리는 시스템이었습니다. 데이터 파일 크기가 6시간 정도만에 몇 기가바이트 씩 늘어나는 시스템이었는데, 아무 이상 없이 쌩쌩 잘 돌아가더군요.
:
: 물론 이런 정도로 데이터 파일 크기가 늘어나면, 당장 하드디스크의 용량이 문제가 될 것이고, 급속하게 크기가 커지면서 디스크의 단편화 문제도 발생합니다. 일반 업무 디비가 아닌 단순 로깅 목적으로 데이터베이스를 사용할 경우에는 이런 문제에도 신경을 써야 데이터베이스 속도가 급속히 떨어지지 않습니다.
:
:
: 정말초보TT 님이 쓰신 글 :
: : 안녕하세요.
: : FB는....
: : 그냥 DB 만들고, insert하고, select하고, delete 하는 수준으로 사용중입니다.
: :
: : 이번에 회사에서 맡게 된 일 중 하나가..
: : 데이터가 1초에 하나 씩 저장이 됩니다.
: : Field는 대략 5개 정도구요.
: :
: : 이러한 Table이 16개 정도 있습니다.
: :
: : 하루나 이틀 정도의 Data를 select 해도 시간이 좀 걸리더군요.
: :
: : 만일, 1년정도의 Data를 select 하게 되면,
: : 시스템이 뻗거나, 점심먹구 와도 끝나지 않을지도 모르겠습니다.
: :
: : 5초동안의 평균이나, 또는 1시간 동안의 평균등으로 계산해서 Data를 select 하고 싶은데,
: : 어떠한 방법으로 접근해야 하는지요?
: :
: : 조언 부탁드립니다.
|