ANÁLISE DE DESEMPENHO DO BANCO DE DADOS POSTGRESQL NOS SISTEMAS LINUX E WINDOWS Rodrigo Buzzi Schiochet, Osmar de Oliveira Braz Junior Pós-Graduação em Engenharia de Software – PGES Centro de Educação Superior do Alto Vale do Itajaí – CEAVI Universidade do Estado de Santa Catarina – UDESC [email protected], [email protected] Resumo O desempenho dos sistemas de informação está diretamente ligado ao bom funcionamento do banco de dados utilizado para armazenamento e recuperação de informações. Existem diversos sistemas operacionais onde um banco de dados pode ser instalado e mantido. Consequentemente, estes diferentes ambientes fazem com que o desempenho do banco de dados apresente variações na eficiência do sistema. Este documento apresenta um estudo comparativo de desempenho do banco de dados relacional PostgreSQL nos sistemas operacionais Windows e Linux. A medição do desempenho foi realizada pela ferramenta Apache jMeter, onde foram verificadas métricas de desempenho, como tempo médio, mínimo e máximo de resposta por requisição, menor desvio padrão por requisição, volume de transferência de dados por segundo e tamanho do pacote por solicitação. Para a análise, é utilizado um servidor exclusivo para hospedagem do PostgreSQL e outro servidor é utilizado para execução da aplicação e testes. Como resultado, é observado que o Linux possui um melhor desempenho em comparação ao Windows, nos testes de desempenho, com 100 iterações realizando as mesmas operações. Palavras-chave: PostgreSQL. Windows. Linux. Desempenho. DATABASE PERFORMANCE ANALYSIS POSTGRESQL SYSTEMS IN LINUX AND WINDOWS Abstract The information systems performance is directly bound to the good function of a database used to store and recover the information. There are many operating systems where a database could be installed and maintained. As a consequence, those different environments make the database performance to show variations in the system efficiency. This document presents a relational PostgreSQL database performance comparative study on Windows and linux operating systems. The performance measurement is made using Apache jMeter tool, where it verifies performance metrics, like average time, minimum and maximum reply by request, lower standard deviation by request, data transfer volume per second and packet size by request. To the analysis is used a dedicated server to host PostgreSQL and other server to run the application and tests. As a result, we can see that linux has a better performance comparing to windows, in the performance tests with a hundred iterations performing the same operations. Keywords: PostgreSQL. Windows. Linux. Desempenho. 1. Introdução A utilização de Sistemas de Gerenciamento de Banco de Dados é uma necessidade cada vez mais comum. Em paralelo a esta necessidade, é crescente a complexidade e o volume de dados que os sistemas precisam gerenciar para garantir a eficiência de suas aplicações. Um mesmo SGBD pode ser instalado em sistemas operacionais diferentes e cada sistema operacional pode conter diferentes sistemas de arquivos. Portanto, Um SGBD pode ser utilizado em diversos ambientes com diferentes características. Segundo Carneiro (2011), efetuar operações sobre grandes coleções de dados é uma questão pontual, pois a avaliação de desempenho de um SGBD (Sistema Gerenciador de Banco de Dados) é medida, usando como base sua eficiência diante de consultas e alterações. O bom desempenho de um banco de dados não depende exclusivamente de sua estrutura ou de como ele foi desenvolvido. Este desempenho depende de uma série de variáveis, como o potencial do hardware onde ele encontra-se instalado, que a sua configuração seja parametrizada de acordo com os recursos disponíveis no respectivo hardware e que o sistema operacional, juntamente com o sistema de arquivos, gerencie e processe os dados e as instruções que partem do SGBD da maneira mais eficiente possível. Em sistemas que efetuam altas quantidades de requisições e transações em um banco de dados, qualquer diferença no desempenho e efetividade de uma única instrução, pode ser a diferença entre o bom ou um mal desempenho do sistema como um todo. Isto, porque uma única e simples transação, dependendo do seu objetivo e da sua importância, pode ser disparada milhares de vezes. Por este motivo, a necessidade de medições de desempenho e da busca pelo melhor ambiente para a hospedagem do banco de dados se torna muito importante. Segundo Jain (2010), os erros mais comuns na análise de desempenho podem ser evitados executando simulações, fazendo medições de desempenho e realizando análise de desempenho estatístico. A análise de desempenho contém uma abordagem quantitativa, onde os resultados são quantificados, se centrando na objetividade. Os resultados são compreendidos com base na análise de dados brutos obtidos com o auxílio de ferramentas (FONSECA, 2002). Já de acordo com Gil (2007), a pesquisa exploratória tem como objetivo proporcionar maior familiaridade com o problema, e torná-lo mais explícito e geralmente envolve a análise de exemplos que estimulem a compreensão do problema. Segundo Almeida (2009), a análise de desempenho de um sistema é feita através de medições, análise quantitativa e utilização de métricas de desempenho O objetivo deste artigo é realizar uma análise do desempenho do banco de dados PostgreSQL em diferentes sistemas operacionais para que seja possível determinar o ambiente onde este banco de dados apresenta o melhor desempenho. Para esta análise, serão utilizados os sistemas operacionais Windows Server 2012 R2 e o Linux CentOS, versão 7. Será também realizado um teste utilizando uma máquina virtual, com sistema operacional CentOS, na versão 7. Esta máquina virtual, por sua vez, estará hospedada sobre um servidor Microsoft Windows Server 2012 R2. Tal teste será realizado, pois atualmente a virtualização de servidores é uma realidade presente no ambiente de quase todas as empresas, devendo assim ser considerada neste estudo. Para a medição do desempenho do banco de dados PostgreSQL, foi desenvolvido um programa que executa as quatro instruções básicas existentes nos bancos de dados relacionais, sendo elas o insert, o update, o delete e o select. Estas quatro instruções foram utilizadas dentro de uma função criada no PostgreSQL para a importação e processamento de um arquivo de texto. O artigo está organizado da seguinte forma, além desta introdução, são apresentados os trabalhos correlatos, na seção 3 é apresentado o ambiente utilizado para testes, em seguida são apresentadas as metodologias da pesquisa e os resultados obtidos neste artigo, e por fim, são feitas as considerações finais sobre o trabalho. 2. Trabalhos Correlatos Para a criação deste trabalho foi realizado um estudo de três artigos existentes no contexto de análise de desempenho de banco de dados. Ferreira e Trad (2012) efetuaram uma análise de desempenho dos bancos de dados Firebird 2.5, PostgreSQL 9.2.1, MySQL 5.5 e SQL Server 2008. Ao final da coleta dos resultados, concluíram que o PostgreSQL obteve um melhor desempenho nos testes de inserção e atualização de registros em massa. Já o MySQL obteve o melhor desempenho na execução das consultas e o SQL Server obteve os melhores resultados em relação ao tamanho da base de dados no disco. Silva (2011) efetuou uma análise comparando ORACLE 10G e PostgreSQL 8.4. Neste estudo, ele concluiu que o desempenho do ORACLE se mostrou superior em quase todos os testes realizados. Porém, ressaltou que mesmo sendo uma ferramenta de código aberto, o PostgreSQL fornece todos os recursos esperados de um banco de dados e possui a robustez e a agilidade desejadas em um banco de dados relacional, possuindo ainda a vantagem de ser gratuito. Castanhede, Dill, Padoin, Sausen e Camargo (2009) fizeram uma análise do desempenho do banco de dados PostgreSQL nos sistemas de arquivos ReiserFS, Ext3, JFS e XFS. Após a coleta dos tempos e análise dos dados, constataram que o sistema de arquivos XFS foi o que obteve o melhor desempenho, seguido pelo JFS, ReiserFS e Ext3 respectivamente. Com os resultados obtidos, concluíram que os sistemas de arquivos exercem uma influência muito significativa no desempenho do banco de dados relacional. Cabe salientar que entre os sistemas de arquivos comparados, ReiserFS, Ext3 e XFS são comumente utilizados pelo sistema operacional Linux e JFS é geralmente utilizado para Unix. Portanto, não foi possível encontrar alguma comparação entre sistemas de arquivos Linux e os sistemas de arquivos Windows, sendo estes, especificamente FAT, NTFS e ReFS, que é utilizado nas versões mais recentes do Windows Server. 3. Ambiente de testes Para a execução dos testes e coleta do desempenho das amostras foi necessário montar um ambiente de testes, utilizando um servidor exclusivo para a instalação do PostgreSQL e utilizando outro servidor para execução do programa que executa os testes e coleta os dados para compilação das estatísticas. O PostgreSQL foi instalado em três ambientes, onde os testes foram aplicados. O primeiro ambiente utilizado para a instalação do PostgreSQL foi o Linux, na distribuição CentOS, versão 7. Segundo Silva e Silva (2013), o crescimento do Linux em servidores se deve pelas suas vantagens sobre o Windows. De acordo com Noyes (2010), o Linux tem maior estabilidade e segurança e não exige atualizações de hardware para suportar demandas crescentes, além de ser mais leve e consumir menos espaço de armazenamento. O segundo ambiente utilizado para hospedagem do PostgreSQL foi o sistema operacional Windows Server 2012. Neste sistema, foi feita a atualização para a versão R2, considerada mais estável. De acordo com Leite, Jordano e Morales (2012), a adoção de melhores práticas de instalação e configuração do Windows Server faz com que a infraestrutura da empresa seja estável, mantendo os requisitos básicos de segurança que são confidencialidade, integridade e disponibilidade. No terceiro ambiente foi utilizada uma máquina virtual. O programa VirtualBox For Linux Hosts foi instalado no Windows Server 2012 R2. Neste ambiente virtual, foi instalado o Linux, na distribuição CentOS, versão 7, sendo que para esta máquina virtual, foram disponibilizados 2 GB de memória RAM, do servidor que possui capacidade física total de 4GB. Segundo Mattos (2008), a virtualização permite que em uma mesma máquina sejam executadas simultaneamente dois ou mais ambientes distintos e isolados. Algumas utilizações cada vez mais comuns da virtualização são a consolidação de servidores e a virtualização da infraestrutura de TI. A ferramenta de teste utilizada nos testes de desempenho foi o Apache jMeter versão 3.0. O Apache jMeter é uma ferramenta desenvolvida em java, com o objetivo de aplicar testes de desempenho e estresse em aplicações cliente/servidor. O projeto que deu origem a ferramenta jMeter foi iniciado pelo desenvolvedor Stefanno Mazzochi, membro do Apache Software Foundation e atualmente é Open Source e sua continuação acontece através da contribuição de milhares de pessoas ao redor do mundo (JMETER, 2016). O jMeter possui um componente que gerencia as requisições que são feitas quando o plano de testes é executado. Entre as requisições que podem ser testadas com este componente, as mais comuns são as requisições FTP, HTTP e JDBC. Para os testes aplicados foram utilizadas requisições JDBC executando chamadas para uma função. Esta por sua vez, foi desenvolvida exclusivamente para a importação de um arquivo de texto e alimentação da estrutura de tabelas criadas no banco de dados. A escolha do jMeter para a execução dos testes foi feita porque ele fornece diversos recursos para medição e aplicação de testes, sendo todos de forma gratuita. Outras ferramentas com as mesmas características, como o WebLoad por exemplo, possuem limitações na disponibilidade de recursos em versões de avaliação e necessitam da aquisição de licença para que seja possível utilizar todas as funcionalidades. O PostgreSQL foi o banco de dados relacional escolhido para a execução dos testes e comparação de desempenho em cada um dos ambientes. Este é um SGBD de código aberto gerado pelo projeto POSTGRES, da Universidade de Berkeley. Atualmente, é mantido por um grupo profissionais de várias partes do mundo, estando disponível sob a flexível licença BSD, que é uma licença de código aberto, inicialmente utilizada por alguns sistemas operacionais. Segundo o PostgreSQL Global Development Group (2009), o PostgreSQL pode ser utilizado, modificado e distribuído livre de custos para qualquer propósito, seja ele comercial, privado ou acadêmico. De acordo com Ferreira e Trad (2012), o PostgreSQL segue a padronização SQL (Structured Query Language - Linguagem Estruturada de Consulta), uma linguagem de interface para SGBD. O PostgreSQL é um descendente de código fonte aberto, que suporta muitas funcionalidades, como chaves estrangeiras, gatilhos, visões, integridade transacional e comandos complexos. A versão do PostgreSQL escolhida para os testes foi a 9.5, que é a versão mais atual disponível e, consequentemente, é a versão que apresenta a maior quantidade de recursos. As características do servidor onde o PostgreSQL 9.5 foi hospedado e do servidor utilizado como cliente, para a execução das instruções a partir do jMeter são ilustradas na Tabela 1. O servidor dedicado ao banco de dados ficou reservado exclusivamente para a instalação do PostgreSQL 9.5 e neste foi instalado o sistema operacional Linux CentOS, versão 7, e posteriormente o Windows Server 2012 R2. Tabela 1 – Configuração da máquina local e remota utilizadas para os testes de desempenho Servidor PostgreSQL Servidor Cliente Modelo LG R490 ASUS Z450L Processador Intel(R) Core(TM) i7-3612QM Intel Core I5 – 5200U CPU @2.10GHz 2.2GHz Memória RAM 4GB – DDR3 – 1333 Mhz 8GB – DDR3 – 1600 Mhz Disco Samsung 5400RPM 640GB Toshiba 5400RPM 1TB Fonte: elaborada pelo próprio autor Para o PostgreSQL, não foi utilizada a configuração padrão aplicada pela instalação. A configuração foi alterada seguindo as instruções do site http://pgtune.leopard.in.ua, desenvolvido pelo arquiteto de software Alexey Vasiliev. Esta alteração foi realizada para que o desempenho do PostgreSQL esteja alinhado com a quantidade de memória disponibilizado para a execução do banco de dados. Na parametrização do cálculo da nova configuração, foi utilizado 2GB de memória, 100 conexões e o PostgreSQL na versão 9.5. A configuração ilustrada na Tabela 2 foi aplicada no arquivo postgresql.conf e foi replicada nos três ambientes. Tabela 2 – Configuração realizada no PostgreSQL Nome da configuração Valor da configuração Valor da configuração PostgreSQL padrão PostgreSQL realizada para testes max_connections 100 100 shared_buffers 128MB 512MB effective_cache_size work_mem maintenance_work_mem min_wal_size max_wal_size checkpoint_completion_target wal_buffers default_statistics_target Fonte: elaborada 4GB 4MB 64MB 80MB 1GB 0.5 128MB 100 pelo próprio autor 1536MB 5242KB 128MB 1GB 2GB 0.7 16MB 100 Para permitir o acesso do servidor onde o jMeter foi instalado, no servidor onde o PostgreSQL foi hospedado, foi necessário alterar duas configurações. O arquivo pghba.conf foi modificado, acrescentando o IP do servidor com o jMeter e o método de autenticação foi alterado para trust. Para padronizar os testes e para realizar a limpeza de cache, o serviço do PostgreSQL foi reiniciado após cada execução da função. Depois de cada execução de teste no jMeter, foi utilizado o botão para limpeza de histórico para que as antigas estatísticas não fossem exibidas ou utilizadas nos cálculos de média. 4. Metodologia O cenário utilizado para a realização dos testes de desempenho foi baseado na importação dos dados de um arquivo de texto para uma estrutura de dados predefinida. Este cenário foi escolhido porque a troca e importação de informações através de arquivos de texto é um meio muito comum para exportação e importação de dados entre sistemas de informação, sendo também uma realidade comum nas empresas que lidam com alguns destes sistemas. Para a aplicação dos testes, foi montada uma estrutura que permite o cadastramento de informações para a realização de cobrança de uma determinada pessoa. A estrutura registra os dados cadastrais da pessoa, os dados referentes a cobrança, incluindo o contrato e os títulos herdados por esta pessoa, além das informações de contato e localização, registrados como endereço. Para o armazenamento e manutenção dos dados que foram importados através do arquivo de texto, foram criados os conjuntos de dados representados na Tabela 3, que ilustra o nome tabela criada no banco de dados, descreve seu propósito, ou seja, quais dados serão armazenados na mesma. Nesta tabela também são exibidos os índices que foram criados para que a consulta dos dados seja otimizada, de acordo com as chaves primárias. Tabela 3 – Tabelas utilizadas para registro dos Nome da Tabela Propósito Devedor Manter informações cadastrais do devedor. Pessoa Manter informações cadastrais da pessoa, que poderá ser uma referência ou avalista. Contrato Manter as informações relacionadas ao contrato contrato_parcela Manter as parcelas herdadas pelo devedor Endereco dados e índices criados Índices devedor_iu_01: Coluna devcpf (CPF) pessoa_iu_01: Coluna pescpf (CPF) contrato_iu_01: Coluna connumcon (Número do contrato) Contrato_parcela_iu_01: Colunas connumcon (Número do contrato) e conpardatven (Vencimento do título). Manter os endereços relacionados a endereco_iu_01: Colunas endcep (CEP), pessoa endrua (rua), endcid (cidade), endbai (bairro) e enduf (estado) Fonte: elaborada pelo próprio autor O arquivo que contém os dados que serão importados durante os testes possui dois tipos de registros, identificados pelas letras C e P que estão localizados logo no primeiro caractere de cada linha do arquivo. Os registros do tipo C contêm todas as informações cadastrais do cliente, além das informações relacionadas ao endereço. O registro do tipo P possui as informações de contrato, com o tipo de produto adquirido pelo cliente, além das informações de cobrança, como data de vencimento dos títulos e valor da dívida. Para os testes de importação utilizando a Function do PostgreSQL, foi criada uma tabela temporária que irá armazenar o conteúdo do arquivo de texto, antes da gravação na estrutura das tabelas. Para gravar as informações contidas no arquivo de texto na tabela temporária, foi utilizado o recurso copy do PostgreSQL, que permite a importação de arquivos para estruturas contidas no banco de dados, além do contrário, ou seja, exportar dados contidos nas estruturas do PostgreSQL para determinados arquivos. Figura 1 – Registro “C” do arquivo de texto para importação Fonte: elaborada pelo próprio autor A Figura 1 ilustra o registro “C” do arquivo importação, que contêm as informações cadastrais do cliente que serão inseridas nas tabelas devedor, pessoa e endereco. Este registro possui o CPF do cliente, contido na coluna 4 do arquivo, que é utilizado como chave primária nas tabelas devedor e pessoa. A chave primária para armazenamento das informações de endereço são a rua, CEP, bairro, cidade e estado, nas colunas 8, 11, 12, 13 e 14, respectivamente. Figura 2 – Registro “P” do arquivo de texto para importação Fonte: elaborada pelo próprio autor A Figura 2 ilustra o registro “P” do arquivo importação, que contêm as informações de dívida, que serão armazenadas nas tabelas contrato e contrato_parcela. Este registro possui o CPF do cliente, contido na coluna 2 do arquivo e o número do contrato, contido na coluna 4, que são utilizados como chave primária na tabela contrato. A chave primária da tabela contrato_parcela é composta pelo número do contrato, localizado na coluna 4 e pela data de vencimento do título, localizada na coluna 7 deste registro. Figura 2 – Função que efetua a leitura do arquivo de texto e gravação na estrutura de dados Fonte: elaborada pelo próprio autor A Figura 2 ilustra a função desenvolvida no PostgreSQL, utilizando a linguagem PGPLSQL, que faz a importação do arquivo de texto contendo a carga de dados. Entre as linhas 1 e 15 é possível visualizar a criação da função e declaração de variáveis. Na linha 18 é possível ver como são removidos os dados da tabela temporária e na linha 19 está o copy que faz a leitura do arquivo e insere os dados na tabela temporária. Na linha 20 é utilizado o comando for, que efetua a leitura nas linhas da tabela temporária. Na linha 25 é utilizada uma condição para identificar o tipo de registro a ser processado e na linha 28 é feita uma consulta através do CPF, que verifica se o devedor existe. Para a navegação entre os registros da tabela temporária que contém os dados do arquivo, foi definido uma variável do tipo Record, também conhecida em outros bancos de dados relacionais como cursor. Utilizando esta navegação, cada um dos registros é lido e identificado. Usando sua chave, se este registro lido não existir, será inserido na sua respectiva tabela dentro da estrutura predefinida. Figura 3 – Lógica do registro de inclusão de contratos e parcelas Fonte: elaborada pelo próprio autor Na Figura 3, é possível visualizar a lógica utilizada para o processamento dos registros de contrato e títulos. Na linha 140 é utilizada uma condição que verifica o tipo de registro. Na linha 143, o código do cliente é localizado através do CPF e é utilizado para a busca do código do contrato, juntamente com o número do contrato obtido através do arquivo na linha 149. Na linha 156, a data de atualização é sobrescrita. Na linha 164, um novo registro é inserido na tabela contrato. As demais linhas da função não foram ilustradas ou explicadas, pois seguem a mesma lógica e utilizam as mesmas instruções demonstradas nas duas figuras acima. Após a primeira execução da função, os registros estarão inseridos na base de dados. Com o comando select, tais registros serão localizados através das chaves das tabelas criadas, e nestas tabelas serão reescritas apenas as datas de atualização. Todos os selects foram feitos utilizando identificadores únicos das linhas do arquivo de importação, portanto, não foi utilizado join entre tabelas na função de importação. Para coletar e analisar os resultados obtidos, foram adicionados ouvintes no jMeter denominados relatório de sumário e relatório agregado. Para a configuração do jMeter, foi necessário informar o local do arquivo contendo o driver do PostgreSQL. Além do driver, foi necessário informar o IP do servidor que hospedou o PostgreSQL, a base de dados criada para o teste e usuário e senha do banco de dados. Na configuração da requisição JDBC, foi necessário inserir a chamada da função fu_importao_remessa(), que inicia a iteração e efetua a realização do teste. 5. Resultados A análise dos resultados é demonstrada de forma comparativa entre as requisições realizadas no PostgreSQL, instalado sobre um servidor com sistema operacional Windows Server, e posteriormente Linux, e em seguida utilizando um servidor virtualizado com sistema operacional Linux sobre um host de virtualização em Windows Server. Para fazer a análise, a quantidade de amostras coletadas nos três ambientes foi exatamente a mesma, com testes realizados 30 vezes com 1 iteração, 30 vezes com 10 iterações e 30 vezes com 100 iterações. Após a execução dos testes e armazenamento das estatísticas, a média de cada um dos grupos de iterações foi calculada. Para a análise de cada métrica, foram selecionados os resultados obtidos com os testes realizados com 100 iterações. A iteração é iniciada no momento que o jMeter efetua uma requisição JDBC, disparando a função fu_importao_remessa, que efetua a leitura do arquivo de carga hospedado no mesmo servidor onde o banco de dados está instalado e insere ou atualiza os dados nas tabelas da estrutura predefinida. A iteração termina quando a execução da função é finalizada. Para cada linha do arquivo, a função executa 7 vezes o comando select, 5 vezes o comando insert e 5 vezes o comando update. O comando delete é utilizado apenas uma vez na execução da função, para remover os registros da tabela temporária utilizada. Através dos resultados exibidos na Tabela 4 é possível analisar os valores obtidos pelos testes realizados com a ferramenta jMeter, nos três ambientes avaliados. Tabela 4 – Avaliação de desempenho em diferentes ambientes Sistema Iterações Média em Min. em Máx. em % de % Vazão KB/s Média Operacional milissegundos milissegundos milissegundos desvio de de Padrão erro Bytes Windows 1 571 289 702 0 0 2,6 0,18 58 Server 2012 R2 Windows 10 388 255 755 49,34 0 3,2 0,19 58 Server 2012 R2 Windows 100 891 268 1987 365,29 0 1,2 0,11 58 Server 2012 R2 Linux 1 711 261 923 0 0 1,2 0,09 58 CentOS 7 Linux 10 295 239 534 37,54 0 3,5 0,17 58 CentOS 7 Linux 100 619 213 1390 274,89 0 1,3 0,12 58 CentOS 7 Windows 1 804 276 1102 0 0 1,1 0,07 58 Server 2012 R2 com VM Linux CentOS 7 Windows 10 251 132 895 153,23 0 4,3 0,22 58 Server 2012 R2 com VM Linux CentOS 7 Windows 100 669 165 1633 417,62 0 1,8 0,14 58 Server 2012 R2 com VM Linux CentOS 7 Fonte: elaborada pelo próprio autor O sistema operacional Linux CentOS obteve o melhor desempenho no teste com 100 iterações, com uma média de 619 milissegundos, enquanto no Windows, a média foi de 891 milissegundos para cada execução. Na comparação direta, o Linux foi 43,94% mais eficiente do que o Windows. Nos testes com a máquina virtual com Linux, a média foi de 669 milissegundos, sendo esta média apenas 8,07% mais lenta do que a média do Linux instalado diretamente sobre o host físico, e 33,18% mais rápida do que os testes realizados no Windows. Na análise do tempo mínimo, a máquina virtual obteve o melhor desempenho, com o tempo de 165 milissegundos para a amostra mais rápida, enquanto o Windows obteve o pior resultado, com o tempo de 268 para a amostra mais rápida, sendo o desempenho da máquina virtual 62,42% melhor do que o tempo do Windows. A amostra mais rápida do Linux executou em 213 milissegundos, sendo este tempo 29,09% mais lento do que a máquina virtual e 25,82% mais rápida do que a amostra do Windows. Em relação ao tempo máximo, a amostra com maior tempo no Linux executou em 1390 milissegundos, enquanto a amostra com maior tempo no Windows executou em 1987 milissegundos, sendo o Linux 42,94% mais eficiente nesta comparação. A amostra mais lenta da máquina virtual executou em 1633 milissegundos, sendo este resultado 17,48% mais lento do que o Linux instalado diretamente sobre o host físico e 21,68% mais rápido do que a amostra do Windows. Na avaliação do desvio padrão, o maior desvio foi da máquina virtual, sendo este desvio de 417,62%. O segundo maior desvio foi do Windows, com o valor de 365,29%. O menor desvio padrão foi o do Linux, com 274,89%. Não foram registrados erros nos testes realizados, portanto, o valor percentual de erro para os três ambientes avaliados foi zero. A métrica de vazão, que é a medição da velocidade de retorno das requisições, obteve um valor de 1,8 para a máquina virtual. Para o Linux, este valor foi de 1,3, e para o Windows foi de 1,2, sendo esta a menor vazão. Na medição de Kilo Bytes por segundo, análise que mede o volume de transferência de dados por segundo, o melhor resultado foi da máquina virtual, com 0,14, enquanto o Windows obteve um resultado de 0,11, sendo a máquina virtual 27,27% mais eficiente do que o Windows. O Linux obteve um desempenho de 0,12, sendo 16,67% mais ineficiente do que a máquina virtual e 9,09% mais eficiente do que o Windows. Figura 5 – Comparati vo de desempenho entre Windows, máquina Virtual Linux e Linux Fonte: elaborada pelo próprio autor A Figura 5 ilustra o desempenho dos três ambientes em um gráfico, exibindo o tempo médio de execução das amostras em milissegundos. Para os testes com uma iteração, o Windows obteve o melhor resultado, o Linux ficou em segundo e a máquina virtual obteve o pior resultado. Nos testes com 10 iterações, a máquina virtual obteve o melhor resultado, o Linux o segundo e o Windows obteve o pior desempenho. Nos testes com 100 iterações, o Linux CentOS instalado diretamente sobre o host físico foi o ambiente mais eficiente, seguido pela máquina virtual com o Linux CentOS. O Windows Server obteve a pior média, sendo ela 44,64% inferior ao resultado obtido pelo Linux CentOs. Considerações Finais Com o resultado, é possível afirmar que entre os três ambientes avaliados, o ambiente que apresentou o melhor desempenho foi o sistema operacional Linux CentOS. Este ambiente obteve o melhor resultado no tempo médio de execução por requisição. O tempo médio pode ser considerado o parâmetro de medição mais importante desta comparação, uma vez que ele influencia diretamente no tempo total de execução dos testes, consequentemente, fazendo com que o PostgreSQL termine de processar a mesma tarefa mais rapidamente no Linux do que nos outros ambientes. Além do melhor tempo médio, o Linux também apresentou o menor tempo máximo de execução de uma amostra, resultado que colabora diretamente com o excelente tempo médio obtido por este ambiente. A execução dos testes na máquina virtual apresentou resultados muito positivos, obtendo o melhor desempenho na avaliação do menor tempo mínimo, a melhor vazão e a melhor taxa de transferência de dados por segundo. A máquina virtual também apresentou um bom desempenho no tempo médio de execução, sendo este apenas 8,96% inferior ao ambiente com Linux CentOS não virtualizado. O Windows Server 2012 R2 obteve o pior desempenho entre os três ambientes avaliados, apresentando os piores resultados para tempo médio, tempo mínimo e tempo máximo de execução por requisição. Além disto, também apresentou os piores resultados de vazão e volume de transferência de dados. O Windows apenas não apresentou o pior resultado na avaliação do desvio padrão, onde ele ficou com o segundo desempenho entre os três ambientes avaliados. Portanto, avaliando os resultados obtidos, é possível determinar que se o fator mais relevante para a escolha do sistema operacional onde o PostgreSQL deve ser instalado for o desempenho, o melhor sistema operacional será o Linux. Se for necessário utilizar o Windows, uma boa opção é a instalação de uma máquina virtual com Linux na distribuição CentOS, pois este ambiente alternativo se mostrou muito eficiente nos testes realizados. Inclusive, mostrou-se um ambiente melhor do que o ambiente onde o PostgreSQL está instalado sobre um servidor com sistema operacional Windows. Em trabalhos futuros, pode ser comparado o desempenho do PostgreSQL com outros bancos de dados relacionais. Também pode ser avaliado o desempenho do PostgreSQL em diferentes distribuições do Linux. Além disso, pode-se realizar uma medição das requisições do PostgreSQL em diferentes sistemas de arquivos utilizados no Windows, para que seja possível determinar o sistema de arquivos que apresenta o melhor desempenho entre os sistemas operacionais. Referências ALMEIDA, V. Análise e Modelagem de Desempenho de Sistemas de Computação. Belo Horizonte, Universidade Federal de Minas Gerais, 2009. CARNEIRO, A.P; MOREIRA, J.L; FREITAS, A.L.C. Técnicas de otimização de Banco de Dados, um estudo comparativo: MYSQL e PostgreSQL. Trabalho de Especialização, Universidade Federal do Rio Grand, Rio Grande, 2011. CASTANHEDE, T.; DILL, S.L.; PADOIN, E.; SAUSEN P.; CAMARGO, R. Avaliando o desempenho do SGBD PostgreSQL considerando os diferentes sistemas de arquivos : Trabalho de Especialização, Universidade Regional do Noroeste do Estado do Rio Grande do Sul, Ijuí, 2009. FERREIRA, E; TRAD S. Análise de desempenho de Banco de Dados. Trabalho de Especialização, Universidade Presidente Antônio Carlos, Barbacena, 2012. FONSECA, J. J. S. Metodologia da pesquisa científica. Fortaleza: UEC, 2002. Apostila. GIL, A. C. Como elaborar projetos de pesquisa. 4. ed. São Paulo: Atlas, 2007. JAIN, R. Computer Systems Performance Analysis. Disponível http://www.cse.wustl.edu/~jain/iucee/ftp/k_01int.pdf. Acesso em: 02 Nov. 2016. em: JMETER, A. The apache software foundation. Disponível em: http://jmeter.apache.org/. Acesso em: 28 Ago. 2016. LEITE, C.E.F; GIORDANO, J.P.L; MORALES, I.L. Melhores práticas de instalação e segurança do active directory no Windows Server 2008. Faculdades integradas de Bauru, Bauru, 2012. MATTOS, D.M.F. Virtualização: VMWare e Xen. Universidade Federal do Rio de Janeiro, Rio de Janeiro, 2008. NOYES, K. Veja porque o Linux está à frente do Windows em servidores. Disponível em: <http://pcworld.uol.com.br/noticias/2010/08/31/veja-porque-olinux-esta-a-frente-do-windowsem-servidores/> Acesso em: 13 Out. 2016. POSTGRESQL GLOBAL DEVELOPMENT GROUP. Documentation PostgreSQL 8.4.22. Disponível em: http://www.postgresql.org/docs/8.4/static/index.html. Acesso em: 29 Ago. 2016. SILVA, M. Estudo comparativo entre as linguagens procedureis PLSQL e PLPGSQL aplicadas aos bancos de dados Oracle 10G XE e PostgreSQL 8.4. Trabalho de Conclusão de Curso, Universidade Tecnológica Federal do Paraná, 2011. SILVA, L.R.C; SILVA, A.P.S. Softwares para criação de mecanismo de segurança baseado na plataforma Linux. Trabalho de Especialização, Universidade Paranaense, Paranavaí, 2013. VASILIEV, A. Configuration calculator for http://pgtune.leopard.in.ua/. Acesso em: 16 Ago.2016 PostgreSQL. Disponível em: