high-performance hibernate - javaetmoi.com · propriété hibernate.jdbc.batch_size pour une...
TRANSCRIPT
![Page 1: High-Performance Hibernate - javaetmoi.com · Propriété hibernate.jdbc.batch_size pour une configuration globale Il est prévu d’avoir une configuration plus granulaire, au niveau](https://reader035.vdocuments.site/reader035/viewer/2022071002/5fbfb2827a873714a1159daa/html5/thumbnails/1.jpg)
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.com · Propriété hibernate.jdbc.batch_size pour une configuration globale Il est prévu d’avoir une configuration plus granulaire, au niveau](https://reader035.vdocuments.site/reader035/viewer/2022071002/5fbfb2827a873714a1159daa/html5/thumbnails/2.jpg)
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.com · Propriété hibernate.jdbc.batch_size pour une configuration globale Il est prévu d’avoir une configuration plus granulaire, au niveau](https://reader035.vdocuments.site/reader035/viewer/2022071002/5fbfb2827a873714a1159daa/html5/thumbnails/3.jpg)
IdentifyvsTablesur100rows
Dépendgrandementdunombredethreads
Relationships
Leastefficient:OneToManyList<Post>
![Page 4: High-Performance Hibernate - javaetmoi.com · Propriété hibernate.jdbc.batch_size pour une configuration globale Il est prévu d’avoir une configuration plus granulaire, au niveau](https://reader035.vdocuments.site/reader035/viewer/2022071002/5fbfb2827a873714a1159daa/html5/thumbnails/4.jpg)
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.com · Propriété hibernate.jdbc.batch_size pour une configuration globale Il est prévu d’avoir une configuration plus granulaire, au niveau](https://reader035.vdocuments.site/reader035/viewer/2022071002/5fbfb2827a873714a1159daa/html5/thumbnails/5.jpg)
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.com · Propriété hibernate.jdbc.batch_size pour une configuration globale Il est prévu d’avoir une configuration plus granulaire, au niveau](https://reader035.vdocuments.site/reader035/viewer/2022071002/5fbfb2827a873714a1159daa/html5/thumbnails/6.jpg)
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.com · Propriété hibernate.jdbc.batch_size pour une configuration globale Il est prévu d’avoir une configuration plus granulaire, au niveau](https://reader035.vdocuments.site/reader035/viewer/2022071002/5fbfb2827a873714a1159daa/html5/thumbnails/7.jpg)
Stratégiedecaching:leplusfiableestlastratégieTRANSACTIONALdeJTA.Mais
READ_WRITEestengénérallechoixpardéfautleplusapproprié.
CollectionandQuerycaches
• Complemententitycaching
• Storeonlyentityidentifiers
• Read-Through
• Invalidation-based