7
High-Performance Hibernate Speaker : Vlad Mihalcea Format : Conférence Date : 21 avril 2016 Slides : http://fr.slideshare.net/VladMihalcea/high-performance-hibernate-devoxx-france Vlad est Hibernate Developer Advocate et tient un blog : https://vladmihalcea.com/ D’après AppDynamics, « Plus de la moitié des problèmes de contentions viennent de la base de données ». Le temps de réponse d’une requête est la somme des temps de réponse suivant : Connection providers

High-Performance Hibernate - javaetmoi.comjavaetmoi.com/.../05/Devoxx_France-2016-High-Performance-Hibernat… · Plusieurs Connection providers sont fournis par Hibernate. Ex : HikariConnectionProvider,

Embed Size (px)

Citation preview

Page 1: High-Performance Hibernate - javaetmoi.comjavaetmoi.com/.../05/Devoxx_France-2016-High-Performance-Hibernat… · Plusieurs Connection providers sont fournis par Hibernate. Ex : HikariConnectionProvider,

High-PerformanceHibernate

Speaker:VladMihalcea

Format:Conférence

Date:21avril2016

Slides:http://fr.slideshare.net/VladMihalcea/high-performance-hibernate-devoxx-france

VladestHibernateDeveloperAdvocateettientunblog:https://vladmihalcea.com/

D’aprèsAppDynamics,«Plusdelamoitiédesproblèmesdecontentionsviennentdelabase

dedonnées».

Letempsderéponsed’unerequêteestlasommedestempsderéponsesuivant:

Connectionproviders

Page 2: High-Performance Hibernate - javaetmoi.comjavaetmoi.com/.../05/Devoxx_France-2016-High-Performance-Hibernat… · Plusieurs Connection providers sont fournis par Hibernate. Ex : HikariConnectionProvider,

PlusieursConnectionproviderssontfournisparHibernate.Ex:HikariConnectionProvider,

DataSourceProxyConnectionProvider(àprivilégier),DriverMamangerConnectionProviderImpl.

FlexyPoolestunframeworkquipermetdemonitorerlesconnexions.

Pluscourteestlatransaction,meilleuresontsesperformances.

Connectionreleasemode:triccky

hibernate.connection.release_modeAFTER_TRANSACTION,AUTO,AFTER_STATEMEMENT(JPA)

PourJPA,utiliserafter_transactionexplicitermentcarplusperformant.

Identifiergenerators

• Identifygenerator

o DefautforSQLServeretMySQLwhenusingAUTO

o DisablesJDBCbatchinserts

• Sequencegenerator

o DefaultforOracleandPostgreSQLwhenusingauto

o Paramétragenécessairedehibernate.id.new_generator_mappingsàtrue

avecHibernate5(cf.photop)

o Sequencepooledoptimiseravec50rows

• Tablegenerator

o Pasunetrèsbonnesolutionensoit.Moinsperformancequelesséquences.

Page 3: High-Performance Hibernate - javaetmoi.comjavaetmoi.com/.../05/Devoxx_France-2016-High-Performance-Hibernat… · Plusieurs Connection providers sont fournis par Hibernate. Ex : HikariConnectionProvider,

IdentifyvsTablesur100rows

Dépendgrandementdunombredethreads

Relationships

Leastefficient:OneToManyList<Post>

Page 4: High-Performance Hibernate - javaetmoi.comjavaetmoi.com/.../05/Devoxx_France-2016-High-Performance-Hibernat… · Plusieurs Connection providers sont fournis par Hibernate. Ex : HikariConnectionProvider,

JDBCBatching

Propriétéhibernate.jdbc.batch_sizepouruneconfigurationglobaleIlestprévud’avoiruneconfigurationplusgranulaire,auniveaudelasession

Pasdecontradictionàsonutilisation.Mêmeavecunevaleurde10,ongagneen

performance.

Cascadingandbatching:hibernate.order_insertsandorder_updatesàtrue

Dansunefutureversiond’HibernateORM,ilestprévudesupporterlesdelete.

Versionningandbatching:

DésactivépardéfautsurOracle10gdialectsenHibernate3et4

ActivépardéfautdansHibernate5.

hibernate.jdbc.batch_versioned_data=true

Fetching

Problèmeden°1:ramenertropdedonnées.

Plusieurspointsàregarder�

1. JDBCfetchsize

2. JDBCResultSetsize

Page 5: High-Performance Hibernate - javaetmoi.comjavaetmoi.com/.../05/Devoxx_France-2016-High-Performance-Hibernat… · Plusieurs Connection providers sont fournis par Hibernate. Ex : HikariConnectionProvider,

3. DTOvsEntityqueries

4. Associationfetching

JDBCfetchsize

SurOracle,10pardéfaut.�SessionFactorysettings:hibernate.jdbc.fetch_sizeà100

ConfigurationlocaleàunerequêteavecQueryHints.HINT_FETCH_SIZE(HintHibernateet

nonOracle)

Resultsetsizelimit

LimiterlenombredelignesrenvoyéesavecsetMaxResults()

Transactionspluscourtes.

NefaitpaspartiedustandardSQL,maisimplémentépartouteslesbases.

Resultsetcolumncount

Selectingallcolumnsvsselectionacustomprojection

LefameuxSELECT*vsSELECTpc.version

Ledéveloppeurdoitseposerlaquestion:quelledatajedoisavoirbesoin?

DTOprojectionsrecommandéespour:

• Read-onlyviews

• Treestructures(RecursiveCTE)

• PaginatedTables

• Analytics(Windowsfunctions)

Page 6: High-Performance Hibernate - javaetmoi.comjavaetmoi.com/.../05/Devoxx_France-2016-High-Performance-Hibernat… · Plusieurs Connection providers sont fournis par Hibernate. Ex : HikariConnectionProvider,

Entityquesriesutiliséespour:

• Writingdata

• Webflows/Multi-requestlogicalteansactions

• Application-levelrepeatablereads

• Detachedentities/PersistenceContextType.EXTENDED

• Optimisticconcurrencycontrol(e.g.version,dirtyproperties)

Fetchingassociations:

Valeurpardéfautenfonctiondel’annotation.

«YoucannotturnanEagerintoaLazy.YoucanturnalazyintoanEager»

Choixqu’onpeutdifficilementfaireàlaconceptiondumodèle.

Conseil:utiliserlaztpardéfaut,puislesfetchdirectivedejPQL/Criteria,EntityGraph

(@FetchProfile)

UtiliserEagerimpliquedestempsderéponsessupplémentaires.

OpenSessioninViewanti-pattern

Anepasutiliser.

SonutilisationavecMySQLentrainebeaucoupde«pressure»surlabase.

TemporarySessionanti-pattern

Nepasutiliserlehibernate.enable_lazy_load_no_trans

Caching1erconseil:tunerleSharedBufferdeladatabase

DBMasteretDBSlave

«Thereareonlythowthingshardin…»CitationdePhilKarlton

Page 7: High-Performance Hibernate - javaetmoi.comjavaetmoi.com/.../05/Devoxx_France-2016-High-Performance-Hibernat… · Plusieurs Connection providers sont fournis par Hibernate. Ex : HikariConnectionProvider,

Stratégiedecaching:leplusfiableestlastratégieTRANSACTIONALdeJTA.Mais

READ_WRITEestengénérallechoixpardéfautleplusapproprié.

CollectionandQuerycaches

• Complemententitycaching

• Storeonlyentityidentifiers

• Read-Through

• Invalidation-based