CUBRID를 이용하여 프로젝트를 수행하기 위해 학습과 테스트를 진행 하고 있습니다.
테스트 진행 과정에서 몇가지 의문점이 있어 글을 올립니다.
아래와 같은 테이블에 ado.net과 cci를 이용하여 insert 테스트를 수행 했습니다.
cci가 ado.net 에 비해 같거나 더 좋은 성능을 보일것으로 기대했으며,
cci에 있는 cci_execute_array의 성능도 많이 기대 하고 테스트를 수행했습니다.
테스트용 테이블
CREATE TABLE tb_test (
field01 DATETIME NOT NULL,
field02 VARCHAR(128) NOT NULL,
field03 INTEGER NOT NULL,
field04 INTEGER NOT NULL,
field05 NUMERIC(20) NOT NULL,
field06 NUMERIC(24,4) NOT NULL,
field07 NUMERIC(8,5) NOT NULL,
field08 NUMERIC(20) NOT NULL,
field09 NUMERIC(24,4) NOT NULL,
field10 NUMERIC(20) NOT NULL,
field11 NUMERIC(8,5) NOT NULL,
field12 NUMERIC(20) NOT NULL,
field13 NUMERIC(8,5) NOT NULL,
field14 NUMERIC(20) NOT NULL,
field15 NUMERIC(8,5) NOT NULL,
field16 NUMERIC(20) NOT NULL,
field17 NUMERIC(8,5) NOT NULL,
field18 NUMERIC(20) NOT NULL,
field19 NUMERIC(8,5) NOT NULL,
field20 NUMERIC(20) NOT NULL,
field21 NUMERIC(8,5) NOT NULL,
field22 NUMERIC(20) NOT NULL,
field23 NUMERIC(8,5) NOT NULL,
field24 NUMERIC(20) NOT NULL,
field25 NUMERIC(24,4) NOT NULL,
field26 NUMERIC(8,5) NOT NULL,
field27 NUMERIC(20) NOT NULL,
field28 NUMERIC(24,4) NOT NULL,
field29 NUMERIC(20) NOT NULL,
field30 NUMERIC(8,5) NOT NULL,
field31 NUMERIC(20) NOT NULL,
field32 NUMERIC(8,5) NOT NULL,
field33 NUMERIC(20) NOT NULL,
field34 NUMERIC(8,5) NOT NULL,
field35 NUMERIC(20) NOT NULL,
field36 NUMERIC(8,5) NOT NULL,
field37 NUMERIC(20) NOT NULL,
field38 NUMERIC(8,5) NOT NULL,
field39 NUMERIC(20) NOT NULL,
field40 NUMERIC(8,5) NOT NULL
);
인서트에 사용된 sql문
"INSERT INTO tb_test (field01,field02,field03,field04,field05,field06,field07,field08,field09,field10,field11,field12,field13,field14,field15,field16,field17,field18,field19,field20,field21,field22,field23,field24,field25,field26,field27,field28,field29,field30,field31,field32,field33,field34,field35,field36,field37,field38,field39,field40)
VALUES (sysdatetime,'text',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)"
테스트 환경
OS : Windows2008 32Bit
CPU : Intel Q6600 2.4GHz
RAM : 4GB
IDE : VS2008
DB : CUBRID-Windows-x86-8.4.1.7007
테스트는 위 sql문을 1000번, 10000번 반복하여 레코드를 입력하는 형태로 auto commit과 manual commit로 구분하여 수행했습니다.
ado.net 결과(CUBRIDCommand.ExecuteNonQuery)
auto commit manual commit
1000번 1,151ms 620ms
10000번 11,022ms 6,342ms
cci 결과(cci_prepare_and_execute)
auto commit manual commit
1000번 2,589ms 2,215ms
10000번 26,192ms 22,043ms
cci 결과(cci_execute_array)
auto commit manual commit
1000번 1,186ms 1,201ms
10000번 12,183ms 11,934ms
결과는 예상했던것과 많이 달랐습니다. cci의 처리 성능이 ado.net에 비해 2~3배정도 더 오래 걸렸고 기대했던 array기능은
일반 execute에 비해 2배정도의 성능이였습니다.
질문 1 : cci가 ado.net에 비해 2~3배정도 느린것이 테스트가 잘못 이루어진 것인지 아니면 정상적인 결과인지 궁금합니다.
질문 2 : cci_execute_array의 성능이 일반 execute에 비교하여 월등한 성능(5~10배정도)을 보이지 않는것이 정상인지 궁금합니다.
수고하세요.