Professional Documents
Culture Documents
NOTCIAS voltar
16.03.15
Degradao de Performance com Firebird
- HARDWARE UTILIZADO
Como se pode ver, uma mquina com configurao modesta, podendo ser considerado um servidor tpico de baixo custo, talvez exceto pelos drives SATA de alta capacidade, mas de
acordo com o fabricante, drives de 1TB e 4TB tem praticamente a mesma velocidade.
- SOFTWARE UTILIZADO
Como o objetivo do teste medir a variao de performance de um sistema tradicional, ns usamos o Firebird SuperServer 64bits, e no o Classic, para simular o cenrio mais comum em
pequenas empresas, que geralmente usa o que foi instalado h anos. Como voc deve saber, o SuperServer, por padro, usa apenas uma CPU/Core, portanto, provavelmente o
Classic/SuperClassic (que usa todos os processadores) poderia mostrar resultados melhores, mas o objetivo do teste no ajuste de performance.
Alteramos dois parmetros do firebird.conf, conforme sempre recomendamos aos nosso usurios: aumentamos o page buffers para 10.000 e o espao temporrio para sort. Todas as
bases de dados utilizadas foram criadas com page size de 16.384 bytes.
Cada teste era composto de duas etapas: carga e simulao de 20 terminais que realizavam inserts, updates e deletes. A
carga dos dados foi executada pela aplicao load.exe, que insere dados em diversas tabelas. Como se v na figura abaixo
(linha vermelha), a velocidade de insero dos dados variou entre 35 MB/seg a 1 MB/seg.
A diferena de velocidade devida ao prprio design da aplicao de carga, e no ao Firebird: o loader foi desenhado de
forma que insira rapidamente 70% dos dados desejados, e lentamente insera o restante das informaes. Esse
comportamento foi repetido nos testes com todas as bases de dados, pois importante executar exatamente as mesmas
operaes em todos os testes, para que possamos fazer a mdia de velocidade de carga.
importante mencionar que o loader.exe insere apenas dados, sendo que os ndices so criados aps a carga estar completa.
Abaixo temos a tabela com os valores obtidos com a carga nos 11 bancos de dados com tamanhos variando entre 9GB e 30GB.
# Velocidade de carga
Tamanho da base (GB) Tempo de carga (seg) (MB/seg)
Como podemos ver, os dados so relativamente estveis, e a media de variao da velocidade de carga variou entre 3.3-3.4MB/sec. No h sinais que a performance caia quando a base
de dados passa a quantidade de RAM disponvel (aps a base #5, com 17.3GB).
- PERFORMANCE
O tempo de carga foi bastante promissor, mas e quanto aos resultados de performance? Antes de comentar, vamos rever
rapidamente o processo de simulao.
A simulao roda 20 threads, e cada uma delas realiza diversas operaes de negcio: cria pedidos, processa pagamentos,
faz contagem de estoque, processa o envio dos pedidos, etc. Como voc pode perceber, simulamos um ambiente normal de
uma aplicao de vendas.
A aplicao de teste mede o nmero de operaes de negcio por segundo, e reporta a mdia. Obviamente, esse nmero um parmetro artificial, mas bom o suficiente para
comparao.
1 9,04 494,73
2 10,80 491,94
3 13,00 480,36
4 15,50 469,11
5 17,30 446,42
6 19,90 431,61
7 21,60 426,85
8 24,20 424,5
9 26,00 414,04
10 28,60 409,14
11 30,30 407,97
Como se pode observar, existe uma lenta degradao de performance conforme o tamanho da base aumenta quanto maior a base de dados, mais lenta ser (no mesmo hardware). No
h grande degradao de performance quando a base de dados ultrapassa a quantidade de RAM. O crescimento da base de dados de 9GB para 30GB leva praticamente a 20% de perda
de performance.
Bases de dados Firebird com 30GB atualmente so facilmente encontradas pelo mundo afora, e continuam crescendo com o passar do tempo.
E o que acontecer com a performance do banco, quando a base se tornar maior? Ou melhor, MUITO MAIOR!
Para responder a pergunta anterior, decidimos realizar um teste com uma base de 1.77 Terabytes, no mesmo hardware, com
a mesma configurao.
A carga durou 566.448 segundos 157 horas, 6.55 dias. muito tempo, mas a media de velocidade de carga foi de
3.28MB/seg
Aps a carga, realizamos novamente o teste de performance, dessa vez com a base de 1.77TB.
O resultado confirma que h uma lenta e estvel queda de performance no Firebird enquanto a base de dados cresceu 60
vezes (de 30GB para 1.7713GB), a queda de performance foi de 2.4 vezes (de 407 para 169 pontos).
No comum que uma base de dados cresa tanto sem que se melhore o hardware do servidor, mas mesmo nessa
situao, o Firebird continua funcionando.
1 9,04 494,73
2 10,80 491,94
3 13,00 480,36
4 15,50 469,11
5 17,30 446,42
6 19,90 431,61
7 21,60 426,85
8 24,20 424,5
9 26,00 414,04
10 28,60 409,14
11 30,30 407,97
12 1813,969025 169,33
Aps completar a srie de testes com um hardware de baixo custo, decidimos checar como seria o resultado usando outro tipo de tecnologia de armazenamento, e instalamos um drive
SSD no mesmo servidor.
Foi instalado um drive Plextor PX-256M M5 Pro, e executados a mesma srie de testes (com exceo da base de 1.77TB),
com as mesmas configuraes.
Os resultados foram adicionados no grfico comparativo com os dispositivos SATA, conforme figura ao lado.
O tempo de carga no drive SSD praticamente o mesmo do SATA. Isso esperado, pois a velocidade de escrita sequencial
praticamente a mesma entre drives SATA e SSD.
- PERFORMANCE
Como podemos observar, a performance com operaes de I/O randmicas mostra uma performance 8x melhor para o drive
SSD. Nossa experincia com clientes mostra que drives SSD so de 30 a 50% mais rpidos no uso de aplicaes reais, mas
um ganho de 8x tremendamente alto.
No entanto, esse teste artificial e especialmente desenhado para simular uma alta carga de operaes de OLTP, com
muitos updates e deletes, mas sem grandes recuperaes de informao. As aplicaes de bases de dados mais comuns
no trabalham dessa forma todo o tempo. Isso explica porque o SSD mostra um resultado to bom nesse caso especfico.
Primeiro a performance do Firebird no apresenta queda acentuada relacionada a alguma restrio de tamanho. No mesmo hardware, a performance ter uma degradao lenta com o
crescimento da base de dados. Essa degradao pode ser compensada com o tuning da configurao do Firebird ou com um upgrade inteligente de hardware.
Segundo comprovamos que mesmo bases de dados gigantes (1.7TB) funcionaro em um hardware de baixo custo, com uma queda de performance significativa mas ainda aceitvel.
Terceiro SSD muito bom para uso com aplicaes OLTP. Provavelmente, a opo de menor custo para aumentar a performance no momento. Obviamente, usar um SSD no
resolver os problemas relativos queries com planos de acesso ruins e ndices ineficientes, mas pode aumentar a performance de forma geral.
- TABELAS
Na tabela abaixo listamos as tabelas da base de dados com suas principais caractersticas. Os dados foram obtidos com o gstat -a -r e interpretados pelo IBAnalyst.
Tabela Records RecLength, Data Pages Table size, Indices size, Total %
bytes Mb Mb
ORDER_LINE 6300024797 60.09 38880344 607505.3 50582.3 34
STOCK 2100000000 298.88 43783806 684121.9 15809.61 39
ORDERS 630004141 29.00 2692324 42067.56 4250.38 2
HISTORY 630000434 48.77 3446455 53850.86 0.00 3
CUSTOMER 630000000 577.52 24226054 378532.0 8675.78 21
NEW_ORDER 188999981 13.00 623764 9746.31 1260.84 1
DISTRICT 210000 103.92 1860 29.06 1.27 ~0
ITEM 100000 82.73 756 11.81 0.52 ~0
WAREHOUSE 21000 97.90 179 2.80 0.11 ~0
Como podemos observar, a maior tabela a ORDER_LINE contendo mais de 6 bilhes de registros. Seu tamanho de cerca de 600Gb sendo que 50GB so ocupados por ndices. Ela
ocupa 34% do tamanho total da base de dados.
A tabela STOCK tambm imensa cerca de 2 bilhes de registros. Apesar do nmero de registros ser menor do que a tabela ORDER_LINE, a STOCK ocupa ~680Gb na base de dados
(39%), pelo fato do comprimento dos registros na tabela STOCK ser 298.88 bytes contra apenas 60.09 bytes na ORDER_LINE. Da mesma forma, o tamanho dos ndices associados a
tabela STOCK de apenas 15Gb.
A terceira maior tabela, CUSTOMER, tem um comprimento de registro ainda maior 577.52 bytes, e ocupa 378Gb (21%) com apenas 630 milhes de registros.
- NDICES
Existem poucos ndices nessa base de dados, pois foi modelada apenas para testes a maioria das tabelas tem apenas um ndice a chave primria. No mundo real, os desenvolvedores
criam diversos ndices para servir a necessidades especiais, mas aqui, limitamos os ndices para nos concentrar na velocidade das inseres e atualizaes dos dados como resultado,
o tamanho do ndice representa apenas 5-10% do tamanho da tabela, quando geralmente o cenrio mais comum de 30-50% (se mais de 50% do tamanho de uma base de dados
ocupada por ndices, considere remodelar a base de dados, ou remover ndices desnecessrios).
Todos os ndices possuem um tamanho de chave reduzido a maior 1.41, significando que o ndice tem um ndice de compresso bastante efetivo por exemplo, a o ndice primrio da
tabela ORDER_LINE contm 6 bilhes de chaves em 50Gb de espao. Um resultado muito bom.
Existem 2 ndices com profundidade igual a 4. Isso significa que o Firebird precisa fazer 4 leituras em pginas de ndices para encontrar o valor desejado. recomendado que a
profundidade dos ndices no seja maior que 3. Se for maior, o tamanho da pgina da base de dados deve ser aumentado. No entanto, essa base de dados j est com o tamanho de
pgina no limite (16kb), portanto, teremos que viver com isso.
- AQUECIMENTO
Antes de continuarmos e falarmos de grandes consultas, vamos aquecer a base de dados. Quando a base de dados
grande, os dados das tabelas de sistema associadas aos objetos do banco de dados tambm so grandes, e leva algum
tempo para que o Firebird coloque as pginas de sistema no cache. Por exemplo, a tabela ORDER_LINE tem 10.110 pginas
de ponteiro. Aquecimento necessrio para qualquer base de dados grande.
Com a base fria, a execuo das queries levar muito mais tempo do que com a base aquecida.
Para aquecer o cache do banco de dados, vamos executar uma srie de consultas simples, para ler os dados de sistema
para o cache:
Isso suficiente para uma base com modelagem to simples. Para bases de dados mais complexas, com centenas de tabelas, o aquecimento pode ser mais complexo, e precisa ser
bem pensado. (Veja na figura ao lado, o consumo de memria do processo do Firebird (Firebird SuperServer 2.5.2 64 bit)).
- QUERIES
Aps o aquecimento, vamos executar diversas consultas tpicas para simular o uso normal de um sistema. Vejamos o tempo de resposta para essas consultas, e o nmero de operaes
de leitura.
Como podemos ver, a base de dados de 1.7 Terabytes apresenta uma boa performance com o Firebird, para consultas comuns. Se a query for bem desenhada e fizer uso de bons ndices,
a performance boa at mesmo em bases de dados imensas. claro, h pontos crticos, como o tempo de fetch para datasets muito grandes e longo tempo para operaes de count
(pelo fato do Firebird visitar todas as pginas para obter o nmero exato de registros para aquela query naquela transao especifica), mas esses pontos crticos so bem conhecidos
pelos desenvolvedores mais experientes, e h mtodos de se modelar a base de dados para contorna-los.
VEJA TAMBM
27.07.15 15.06.15 16.03.15
Encontro de alunos e empresas de Conhea a mais nova verso dos Banco de dados de um Terabyte
tecnologia aplicativos
O S-RES um sistema
que exige mtodos
Selando uma parceria de Conhea a mais nova
robustos de engenharia de
comprometimento com a verso dos aplicativos da
software na sua
sociedade, a Soluvert Soluvert, verso 1.7
construo para garantir
apoia o movimento de disponvel para
que a informao possa
encontro entre os alunos e distribuio. Esta verso
ser capturada,
as empresas de tecnologia foi planejada para atender
armazenada, exibida e compartilhada de forma segura,
da regio. a dois objetivos:
integra e completa.
Certificao e Inovao.
+ ler tudo
+ ler tudo + ler tudo