올 초였던가에 프라하에서 파이어버드 컨퍼런스가 열렸었습니다.
그 중 한 세션이 Ivan Přenosil이 강의한 count 퍼포먼스에 대한 세션이었는데요.
얼마전에 강의 자료가 다운로드할 수 있도록 공개되었길래 자료를 첨부합니다.
내용을 대충 볼작시면...
1. 원칙적으로는, SQL 카운트 연산은 모든 데이터 페이지를 카운트하게 되므로, 데이터페이지의 갯수만큼의 물리적 읽기가 발생하므로 카운트가 느릴 수밖에 없다.
2. 다른 RDBMS들의 경우, (1) 어딘가에 카운터를 가지고 있거나 (2) PK 인덱스를 이용해서 카운팅한다.
3. 하지만 파이어버드는 멀티 제너레이셔널 아키텍처(MGA) 기반으로, 각 트랜잭션은 같은 시점이라도 자신만의 데이터뷰를 보게 되므로 글로벌한 카운터가 불가능하다. (동시에 여러 데이터카운트가 존재하므로)
4. 데이터는 MGA 기반이지만 인덱스는 MGA가 아니므로 (어쩌구.. 이해 안됨) 역시 PK를 이용한 카운팅도 불가능
그래서 Ivan이 추천하는 해결책은... 문서를 보세요~ ^^;;
문서에는 여러가지 성능 개선책들이 설명되어 있는데, 비교적 간단하게 할 수 있는 것도 있고 좀 복잡한 이해가 필요한 것들도 있군요.
그럼...
mlls 님이 쓰신 글 :
: 답변은 아니구 저도 100만건 정도 데이터를 count해보니 한 5초정도 걸리네요.
: oracle보다 느립니다. 확실히... 프라이머리키 준걸로 해도 그렇고...
: 허접코더라 count를 자주 쓰는데 전체적으로 프로그램이 느려지네요 =_=;;
: 잘 아시는 분 답변부탁드립니다.
:
: 불새초보 님이 쓰신 글 :
: : 마자요~~ 인덱스를 걸었는데도 속도가 장난아니게 늘어집니다...
: : 전 예전에 mysql사용할때 처럼 간단하게 생각했는데.
: : 너무 느려서 불새로는 대용량 레코드의 DB에는 사용하지 못할듯 싶습니다.
: : mysql과 oracle은 속도가 거의 같이 빠르지만 firebird는 너무 느리군요
: : 해결방법이 없을까요?
: :
: : 하늘비 님이 쓰신 글 :
: : : 저도 님의 말을 듣고 테스트 해봤는데요...
: : : Oracle과 Firebird를
: : : 약 2천8백만건의 데이터를 생성(Bible Data) 해서 로컬에서 테스트 해봤습니다..
: : : 님처럼 저도 count(*)와 max()를 사용시 속도가 엄청 떨어지네요..
: : : (Oracle 은 0.1초때.. Firebird 1분이상 기다리다가 닫아버림)
: : : 그룹함수가 아닌 그냥 where 조건으로 약 100만건 이상의 쿼리를 돌리면
: : : Oracle이나 별차이없는데.. 정말
: : : 희안하네요.. 그룹함수쪽이 문제가 있는건가요.
: : :
: : : 나도 불새로... 프로젝트를 진행해볼까 하는데 이것때문에 심히 고민되네요..
: : : 혹시 해결방법 아시는분 있으면 답변 부탁해요..
: : :
: : :
: : :
: : :
: : : 불새초보 님이 쓰신 글 :
: : : : 안녕하세요?
: : : : 제가 이번에 저희 서버를 오라클에 있는 데이타를 불새2.0으로 옮기는
: : : : 작업을 진행중인데..
: : : : 레코드 건수는 약 350만건입니다.
: : : : 해당 테이블에 IBEXpert를 이용해서 index를 걸었구요...
: : : : 그런데...select count(*) from table 또는 select max(sno) from table
: : : : 의 쿼리를 날리면 보통 오라클이나 mysql에선 0.1초 이내로 결과가
: : : : 나오지만 불새에선 40초~1분 ,2분이 소요됩니다.
: : : : 원인이 무엇인지 모르겠습니다.
: : : : 참고로 말씀드리면 오라클에 있는 테이블을 불새에도 거의 비슷하게
: : : : 설정했구요...인덱스도 동일한 컬럼에 설정했습니다.
: : : : 혹 그 외에 불새에서 더 해줘야 하는 설정이 있는지요...
: : : : 이 문제가 해결되지 않아서 데이타를 다 옮기고도 서비스 전환이 되지 않는군요...
: : : :
: : : : 여기서 검색을 해보니 어떤 분은 1천만건, 900만건 정도에서도 빠르게 잘 돌아 간다고
: : : : 하더군요...그럼 필시 먼가를 제가 빠뜨린게 있는건 아닌지요~~
: : : : 아시는 분 있으시면 조언들 부탁합니다.
|