Ir para conteúdo
  • Cadastre-se

HikariCP - JDBC connection pool


Gabrieljdb

Posts recomendados

Melhorando performance do pool de conexões com Hikari

O conteúdo está oculto, favor efetuar login ou se cadastrar!
 
O conteúdo está oculto, favor efetuar login ou se cadastrar!
O conteúdo está oculto, favor efetuar login ou se cadastrar!
, 
O conteúdo está oculto, favor efetuar login ou se cadastrar!

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 

O conteúdo está oculto, favor efetuar login ou se cadastrar!
 apresenta um excelente desempenho nesse papel, onde tem uma proposta de 
O conteúdo está oculto, favor efetuar login ou se cadastrar!
, até mesmo recomendado na própria DOC do Spring Boot 
O conteúdo está oculto, favor efetuar login ou se cadastrar!
.

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:

O conteúdo está oculto, favor efetuar login ou se cadastrar!

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

1
2
3
4
5
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>2.7.7</version>
</dependency>

application.properties

1
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 conteúdo está oculto, favor efetuar login ou se cadastrar!
 é 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:

1
2
DefaultSourceTest: DataSource: org.apache.tomcat.jdbc.pool.DataSource@5d497a91{}
PerformanceUseCase: 37995 milis
 
1
2
DefaultSourceTest: DataSource: org.apache.tomcat.jdbc.pool.DataSource@5d497a91{}
PerformanceUseCase: 36531 milis
 
1
2
DefaultSourceTest: DataSource: org.apache.tomcat.jdbc.pool.DataSource@51ec2856{}
PerformanceUseCase: 36467 milis

média: 36998 milis = 37 segundos

Hikari:

1
2
HikariSourceTest: DataSource: HikariDataSource (HikariPool-1)
PerformanceUseCase: 34688 milis
 
1
2
HikariSourceTest: DataSource: HikariDataSource (HikariPool-1)
PerformanceUseCase: 32946 milis
 
1
2
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 

O conteúdo está oculto, favor efetuar login ou se cadastrar!
.

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

FONTE DO TEXTO:

O conteúdo está oculto, favor efetuar login ou se cadastrar!

Editado por Gabrieljdb
  • Gostei 1
  • Amei 1

Em breve novidades...

Link para o comentário
Compartilhar em outros sites


  • Registre-se

    Faça parte da maior e  mais antigas comunidades sobre Lineage2 da América Latina.





×
×
  • Criar Novo...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.