Melhorando performance do pool de conexões com Hikari

O gerenciamento de conexões nos bancos de dados relacionais é algo que começamos a ter preocupação conforme nossos sistemas começam a crescer, onde em cenário que não usamos servidores de aplicações (como: Jboss/Wildfly, Glassfish, Websphere), os frameworks são responsável por essa tarefa de abertura e fechamento das conexões.

A diversos frameworks que disponibilizam funcionalidades para esse gerenciamento, porém nem sempre a solução do framework pode ser a mais performática para nossas aplicações, pois há diferente soluções de gerenciamento de conexões no mercado, por exemplo: Hibernate, c3p0, Tomcat e Hikari.

Observação: No Spring Boot, quando utilizado o Tomcat, o gerenciamento de conexões padrão é do próprio Tomcat (tomcat-jdbc).

Atualmente o Hikari CP apresenta um excelente desempenho nesse papel, onde tem uma proposta de “de um sólido gerenciador de conexão JDBCs de alto desempenho”, até mesmo recomendado na própria DOC do Spring Boot “Preferimos o HikariCP por sua performance e simultaneidade”.

Observação: No Spring Boot 2.0, o Hikari passará a ser padrão de ferramenta de gerenciamento de conexões com bancos relacionas, nas dependências do jpa-starter.

Na imagem abaixo, um benchmark apresentado no site da Hikari demostrando diferença de performance do tratamento de conexões do Hikari comparado com outras opções:

Benchmark

 

  • One Connection Cycle: É definido por uma abertura/fechamento de conexão (DataSource.getConnection()/Connection.close();
  • One Statement Cycle: É definido por um “Statment” (Connection.prepareStatement(), Statement.execute(), Statement.close()).

Utilizando Hikari no Spring Boot

Para ativar o Hikari no Spring Boot, basta adicionar a dependência no projeto e mudar o datasource type como demostrado abaixo:

pom.xml


    com.zaxxer
    HikariCP
    2.7.7

application.properties

spring.datasource.type=com.zaxxer.hikari.HikariDataSource

Estudo de caso

Fazendo um comparativo na prática do Hikari e o gerenciador de conexões do Tomcat(padrão do Spring Boot), foram obtidas os seguintes resultados:

O escopo de teste é de lançar 5 consultas em paralelo em um loop de 1000 vezes, aguardando até que todos execuções sejam finalizadas, no final totalizando o tempo de execução das instruções.

O mesmo cenário foi executado 3x com cada driver:

Tomtcat:

DefaultSourceTest: DataSource: org.apache.tomcat.jdbc.pool.DataSource@5d497a91{}
PerformanceUseCase: 37995 milis

 

DefaultSourceTest: DataSource: org.apache.tomcat.jdbc.pool.DataSource@5d497a91{}
PerformanceUseCase: 36531 milis

 

DefaultSourceTest: DataSource: org.apache.tomcat.jdbc.pool.DataSource@51ec2856{}
PerformanceUseCase: 36467 milis

média: 36998 milis = 37 segundos

Hikari:

HikariSourceTest: DataSource: HikariDataSource (HikariPool-1)
PerformanceUseCase: 34688 milis

 

HikariSourceTest: DataSource: HikariDataSource (HikariPool-1)
PerformanceUseCase: 32946 milis

 

HikariSourceTest: DataSource: HikariDataSource (HikariPool-1)
PerformanceUseCase: 33293 milis

média: 33642 milis = 34 segundos

Concluindo, apenas trocando o driver de gerenciamento de conexões foi obtido um resultado de 3 segundos diferença, onde quando utilizado o driver do Hikari no caso de uso acima, o processo total foi executado em média geral 3 segundos a menos em uma análise de 3 amostragens, assim proporcionando um ganho significando no tempo de execução sem alterações de código.

Os testes foram executados no bando de dados PostgreSQL na versão 9.6, Java 8 (build: 1.8.0_131), sistema operacional macOS Sierra, com o hardware: Processador 2,6 GHz, 16GB de memória e HD SSD.

O código fonte dos testes está disponível no github.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s