FIREBIRD: UMA ANÁLISE DE PERFORMANCE Tiago Gomes Fagundes 1, Renato Stocco Bonatto 2, Leacir Nogueira Bastos 3, Brauliro Gonçalves Leal 4 RESUMO: Avaliou-se a performance do gerenciador de banco de dados Firebird 1.5 ao executar 10 milhões de operações (insert, select e update). A duração média das operações unitárias (DOU) de insert, select e update foram iguais a 0,00260, 1 e 0,00140s, respectivamente. As equações ajustadas para os valores da duração acumulada das operações (DOA) em função do número de operações (NOP) foram: insert DOA=1294,6 NOP, com R 2 =0,9997; select DOA=95,717 NOP, com R 2 =1,0; update DOA=697,32 NOP, com R 2 =0,9983. Operações de update e select requerem 52,8 e 7,5% do tempo que as de insert, respectivamente. Os resultados mostraram que o tempo acumulado das operações cresceu linearmente, portanto, o tempo de execução de uma operação não depende do número de operações já realizadas. PALAVRAS-CHAVE: banco de dados, fb++, sql, open source. INTRODUÇÃO Pode-se definir Banco de Dados como uma coleção de dados relacionados com uma estrutura regular, salvos em um computador de forma que um programa de computador possa consultá-los com algum propósito específico. Utilizados em muitas aplicações, bancos de dados abrangem praticamente todas as áreas da computação. Um banco de dados normalmente é mantido e acessado por um Sistema Gerenciador de Banco de Dados (SGBD). Um SGBD é um conjunto de software responsável pela organização, persistência e recuperação dos dados, cujo principal objetivo é gerenciar o acesso e a manutenção dos dados. Existem muitos SGBD s, alguns livres outros comerciais. De maneira geral são equivalentes em relação as suas funcionalidades, e possibilitam, com algumas diferenças, um tratamento adequado dos dados. Muitos dos SGBD s utilizam a linguagem padrão para consultas SQL, com ela ganha-se flexibilidade para se operar dados em SGBD s. O Firebird é um SGBD de alta performance, disponível para 1 Graduando em Ciência da Computação pela Universidade Federal de Viçosa. Email: tiagofagundes@ gmail.com 2 Bacharel em Ciência da Computação pela Universidade Federal de Viçosa. Email: renatobonatto@ yahoo.com.br 3 Professor do Departamento de Informática da UFV, Ph.D in Computer Science. Email: leacir@ufv.br 4 Doutor em Engenharia Agrícola pela UFV 1999, Diretor Científico do Grupo Intec. Email: leal@ grupointec. com.br
plataformas de 32 e 64 bits. É um software livre desde 2000. Foi baseado no código do InterBase da Borland. O Firebird possui diversos níveis de segurança, o que o torna extremamente confiável, além disso, ele é um banco de dados de manipulação simples, Ele é mantido por uma comunidade internacional de desenvolvedores mantida pela FirebirSQL Foudation [1]. Está em conformidade com os requisitos SQL-92 ANSI (nível de entrada), com extensões próprias para gerenciamento de Generators, Triggers e Stored Procedures. O Firebird é um sistema gerenciador de banco de dados relacional (SGDBR) cliente/servidor que oferece muitas características do ANSI SQL-92, com versões para Linux, Windows e uma variedade de plataformas Unix. Oferece excelente concorrência, desempenho elevado e arquitetura de múltipla geração, permitindo manipular várias versões de registros em qualquer momento. Dessa forma, o objetivo deste trabalho é avaliar a performance do SGBD Firebird 1.5. MATÉRIAIS E MÉTODOS Foi criada uma tabela A, indexada, com os campos conforme descritos na Tabela 1, um generator e uma trigger associada ao campo A0 para torná-lo auto-incremento. Tabela 1 Descrição da tabela A utilizada com seus campos e tipos. Campo A0 A1 A2 A3 A4 A5 A6 Tipo INTEGER NOT NULL Integer NUMERIC(15,2), Char(26) Varchar(26) Time Date Foi escrito um programa em C++ para realizar 10 milhões de operações (insert, select e update), divididas em 20 blocos de operações (a cada operação correspondeu um commit), Anexo 1. Utilizou um computador Intel Pentium 4, 2.8 Ghz, 1.0 Gb RAM, para executar o software e obter a duração das operações realizadas. RESULTADO E DISCUSSÃO A Tabela 2 apresenta a duração acumulada das operações (DOA) e a duração média da operações unitárias (DOU) por bloco de insert, select e update em função do número de operações (NOP). Os valores da DOA variaram de 1.187 a 25.625s; 95 a 1.912s; e 765 a 13.548s para as operações de insert, select e update, respectivamente. Por
outro lado, os valores médios da DOU para as operações de insert, select e update, foram iguais a 0,00260; 1; 0,00140, respectivamente. As figuras 1.a, 1.c, 1.e, mostram os gráficos da variação dos valores do DOA em função do número de operações insert, select e update, respectivamente. As figuras 1.b, 1.d, 1.f mostram os gráficos da variação dos valores do DOU em função do número de operações insert, select e update, respectivamente. As figuras 1.a, 1.c, 1.e, também apresentam equações ajustadas para os valores do DOA em função do número de operações; sendo DOA=1294,6 NOP, com R 2 =0,9997, para operações de insert; DOA=95,717 NOP, com R 2 =1,0 para a operação de select; e DOA=697,32 NOP, com R 2 =0,9983 para a operação de update. Tabela 2 Duração acumulada das operações (DOA) e a duração média das operações unitárias (DOU) por bloco de insert, select e update em função do número de operações (NOP). NOP Inserções Seleções Alterações ( ) DOA (s) DOU (s/insert) DOA (s) DOU (s/select) DOA (s) DOU (s/update) 1 1187 0,00237 95 0 765 0,00153 2 2421 0,00242 191 1 1413 0,00141 3 3710 0,00247 288 2 2169 0,00145 4 4947 0,00247 384 2 2891 0,00145 5 6318 0,00253 480 2 3626 0,00145 6 7662 0,00255 576 2 4346 0,00145 7 8971 0,00256 673 2 5002 0,00143 8 10343 0,00259 769 2 5703 0,00143 9 11690 0,00260 864 2 6368 0,00142 10 13022 0,00260 960 2 7058 0,00141 11 14360 0,00261 1055 2 7887 0,00143 12 15633 0,00261 1150 2 8572 0,00143 13 16929 0,00260 1245 2 9219 0,00142 14 18243 0,00261 1340 1 9901 0,00141 15 19537 0,00260 1435 1 10574 0,00141 16 20820 0,00260 1530 1 11206 0,00140 17 22093 0,00260 1626 1 11806 0,00139 18 23307 0,00259 1722 1 12382 0,00138 19 24449 0,00257 1816 1 12967 0,00136 20 25652 0,00257 1912 1 13548 0,00135 Média - 0,00257-1 - 0,00135
30000 25000 20000 15000 10000 5000 y = 1294,6x R 2 = 0,9997 0,00300 0,00250 0,00200 0,00150 0,00100 0,00050 0 7 0,00000 7 (a) (b) 2500 2000 y = 95,717x R 2 = 1 0,00020 1500 1000 500 0 7 7 (c) (d) 16000 0,00180 14000 12000 10000 8000 6000 4000 y = 697,32x R 2 = 0,9983 0,00160 0,00140 0,00120 0,00100 0,00080 0,00060 0,00040 2000 0,00020 0 0,00000 7 7 (e) Figura 1 Variação dos valores de DOA e DOU em função do número de operações insert (a, b), select (c, d) e update(e, f). (f) Das três operações avaliadas a que apresentou maior tempo de execução foram as de insert, seguida pelas de update que, por sua vez exigiram mais tempo que as de select. Operações de update e select requerem 52,8 e 7,5% do tempo que as de insert, respectivamente. Embora todas as operações realizam acesso ao banco de dados, as de insert utilizam mais recursos computacionais uma vez que alteram substancialmente a estrutura do banco de dados, aumentando o número de registros e criando e atualizando índices. Update não aumenta o número de registros, porém podem alterar seus valores. Select, por sua vez, não alteram o banco. Conforme pode-se observar na figura1, os valores de DOA, variaram linearmente com NOP, para as três operações analisadas. O tamanho do banco de dados vazio era de 263 Kb, ao
final das inserções o seu tamanho era de 1065529 Kb, sendo assim a média de Kbytes por registros e controles inerentes ao banco de dados foi de 0,1065266. CONCLUSÃO Avaliou-se a performance do SGBD Firebird 1.5 ao executar 10 milhões de operações (insert, select,update), cuja durações médias foram de 0,00260, 1 e 0,00140s para insert, select update respectivamente. As equações ajustadas para os valores duração acumulada das operações (DOA) em função do número de operações (NOP) foram DOA=1294,6 NOP, com R 2 =0,9997, para operações de insert; DOA=95,717 NOP, com R 2 =1,0 para a operação de select; e DOA=697,32 NOP, com R 2 =0,9983 para a operação de update. Operações de update e select requerem 52,8 e 7,5% do tempo que as de insert, respectivamente. O tempo acumulado das operações cresceu linearmente e, portanto, o tempo de execução de uma operação não depende do número de operações já realizadas. REFERÊNCIAS BIBLIOGRÁFICAS [1]. FirebirSQL Foudation. Disponível em: <http://www.firebirdsql.org/> Acesso em : 09 Set 2007. Anexo 1 Resumo do código utilizado. #include fbdriver.h #include fbquery.h #define NBLOCO 20 #define BLOCO string itos( int x ) { char sz[22]; sprintf( sz, %d, x ); return sz; } int main( void ) { time_t ini = time(null); int c;
fbdriver *db = new fbdriver(); fbquery *Query = new fbquery(); db->attach( FB++, fb++, fb++.fdb ); Query->Open( db->status, db->db ); for( int k = 0; k < NBLOCO; k++ ) for( int i = 0; i < BLOCO; i++ ) Query->SQL( insert into A (A1,A2,A3,A4,A5,A6) values(1,1.2, aaaaa, aaaaa, 11:11:11, 23.09.2007 ) ); c = 1; for( int k = 0; k < NBLOCO; k++ ) for( int i = 0; i < BLOCO; i++ ) Query->SQL( select * from A where A0= +itos(c++)); c = 1; for( int k = 0; k < NBLOCO; k++ ) for( int i = 0; i < BLOCO; i++ ) Query->SQL( update A set A1=1, A2=1.2, A3= aaaaa, A4= aaaaa, A5= 11:11:11, A6= 23.09.2007 where A0= + itos(c++)); Query->Close(); delete Query; db->detach(); delete db; system( pause ); return 0; } //------------------------------------------------------