Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★...
Transcript of Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★...
![Page 1: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/1.jpg)
Ihre Persistenzschicht?
![Page 2: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/2.jpg)
Kunde, Chef, DBA?
Wahrnehmung endet oft mit Fingerpointing richtung ORMUnnützer Konflikt mit DBAs (wertvolle Hilfe beim Debugging)
![Page 3: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/3.jpg)
Tuning von Hibernate und JPA Anwendungen
Michael Plöd
![Page 4: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/4.jpg)
Michael Plöd
• Partner und Principal Architect bei Senacor Technologies AG in Nürnberg
• http://www.senacor.com
• Twitter: @bitboss
![Page 5: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/5.jpg)
Jochen Mader
• Senior Developer bei Senacor Technologies AG in Nürnberg
• http://www.senacor.com
• Twitter: @codepitbull
![Page 6: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/6.jpg)
IST ORMLANGSAM
VieleichtMapping-OverheadABERNutzung von DB-Spezifikas die Entwickler nicht kenntTransactional Write BehindCachingalso ein bisschen
![Page 7: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/7.jpg)
Gründe fürschlechte
Performance
Zuviele
Abfragen
Zu langsame Abfragen
FalschgetunteDaten-bank
FalschgetunteInfra-
struktur
Nur die oberen 2 Thema des Vortrags
![Page 8: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/8.jpg)
Klassifizierung von Abfragen
0
375
750
1.125
1.500
0 225 450 675 900
Anzahl der Abfragen
Durchschnittliche Laufzeit in [ms]
MessenKlassifizierenOptimieren
![Page 9: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/9.jpg)
UrsachenHohe Häufigkeit Hohe Laufzeit
★ Applikations-Logik
★ Mappings
★ Kein Caching
★ N+1 Selects Problem
★ Zu hohe Selektivität
★ Variablen-Übergabe
★ Fehlende Indizes
★ Karthesisches Produkt
★ Locks
★ Datenbankstruktur
Variablen-Übergabe:Number in DB, String im Mapping => Kein Index!java.util.Date => Temporal Type
![Page 10: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/10.jpg)
N+1 Selects Problem
List list = s.createCriteria(Konto.class).list();for (Iterator it = list.iterator(); it.hasNext();) { Konto kto = (Konto) it.next(); kto.getKunde().getName();}
SELECT * FROM KONTENSELECT * FROM PERSONEN WHERE PERSON_ID = ?SELECT * FROM PERSONEN WHERE PERSON_ID = ?SELECT * FROM PERSONEN WHERE PERSON_ID = ?...
N+1
@Entitypublic class Konto { ... @ManyToOne(fetch=FetchType.LAZY) public Person getKunde() {...} ...}
![Page 11: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/11.jpg)
Karthesisches Produkt@Entitypublic class Konto { ... @OneToMany(fetch=FetchType.EAGER) public Set<Buchung> getBuchungen() {...} @OneToMany(fetch=FetchType.EAGER) public Set<Vollmacht> getVollmachten() {...} ...}
select konto.*, buchung.*, vollmacht.* from KONTEN konto left outer join BUCHUNGEN buchung
on konto.ID = buchung.KTO_ID left outer join VOLLMACHTEN vollmacht
on konto.ID = vollmacht.KTO_ID
![Page 12: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/12.jpg)
Karthesisches Produktselect konto.*, buchung.*, vollmacht.* from KONTEN konto left outer join BUCHUNGEN buchung
on konto.KTO_ID = buchung.KTO_ID left outer join VOLLMACHTEN vollmacht
on konto.KTO_ID = vollmacht.KTO_ID
KTO_ID KTO_NR ... BUCH_ID BUCH_BETRAG ... VM_ID VM_NAME ...
1 12344 ... 10 1000,00 € ... 200 Michael Plöd ...
1 12344 ... 10 1000,00 € ... 300 Martin Plöd ...
1 12344 ... 20 -324,23 € ... 200 Michael Plöd ...
1 12344 ... 20 -324,23 € ... 300 Martin Plöd ...
1 12344 ... 30 543,11 € ... 200 Michael Plöd ...
1 12344 ... 30 543,11 € ... 300 Martin Plöd ...
2 21300 ... 40 -4323,23 € ... 400 Sandra Ulrich ...
2 21300 ... 40 -4323,23 € ... 400 Melanie Ulrich ...
2 21300 ... 40 -4323,23 € ... 400 Herbert Ulrich ...
... ... ... ... ... ... ... ... ...
![Page 13: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/13.jpg)
Anzahl oder Laufzeit?
Gutes
TUNINGist
IMMER eine Frage der
BALANCE
Beispiel:VererbungshierarchieTable per Class: Alle Constraints funktionieren, schlechtere PerformanceTable per Classhierarchie: Hohe Performance, kein not null
![Page 14: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/14.jpg)
FETCHING★ Batch
★ Subselect
★ Eager
CACHING★ 1st Level Cache
★ 2nd Level Cache
★ Stateless Session
ABFRAGEN★ Selektivität
★ Query Cache
★ Bind Variablen
LOGIK★ Schleifen
★ Datenmenge
LOCKS★ Optimistic Locking
Runtime★ DB Entwurf
★ Konfiguration
★ Connection Pool
![Page 15: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/15.jpg)
Fetching
![Page 16: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/16.jpg)
Batch Fetching
@Entitypublic class Konto { @ManyToOne(...) public Person getKunde() {...} ...}@Entity@BatchSize(size=5)public class Person { ...}
SELECT k.* FROM KONTEN k
SELECT * FROM PERSONEN WHERE PERSON_ID IN (?, ?, ?, ?, ?)
SELECT * FROM PERSONEN WHERE PERSON_ID IN (?, ?, ?, ?, ?)
SELECT * FROM PERSONEN WHERE PERSON_ID IN (?, ?, ?)
![Page 17: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/17.jpg)
Batch Fetching
0
375
750
1.125
1.500
0 225 450 675 900
★ Schätzung
★ Einfach
★ Lazy
★ (N / Batch Size) + 1
![Page 18: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/18.jpg)
Subselect Fetching
@Entitypublic class Konto { @OneToMany @Fetch(FetchMode.SUBSELECT) public Set getBuchungen() {...} ...}
SELECT k.* FROM KONTEN k
SELECT b.* FROM BUCHUNGEN b WHERE b.KTO_ID IN ( SELECT k.KTO_ID FROM KONTEN k)
![Page 19: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/19.jpg)
Subselect Fetching
0
375
750
1.125
1.500
0 225 450 675 900
★ Nur für Collections
★ Keine Schätzung
★ Einfach
★ Lazy
★ 2 Abfragen
![Page 20: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/20.jpg)
Eager Fetching
@Entitypublic class Konto { @OneToMany( fetch = FetchType.EAGER ) public Set getBuchungen() {...}
@ManyToOne( fetch = FetchType.EAGER ) public Kunde getEigentuemer() {...}}
SELECT ko.*, b.*, ku.* FROM KONTEN ko LEFT OUTER JOIN BUCHUNGEN b on b.KTO_ID = ko.KTO_ID LEFT OUTER JOIN KUNDEN ku on ko.KU_ID = ku.KU_ID
![Page 21: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/21.jpg)
Eager Fetching
0
375
750
1.125
1.500
0 225 450 675 900
★ Nie bei 2+ Collections! ★ Nicht Lazy
★ 1 Abfrage
★ Nie in globalen Fetch Plan aufnehmen
HQL deaktiviert FetchplanCriteria überschreibt
![Page 22: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/22.jpg)
Caching
![Page 23: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/23.jpg)
Caching Architektur
Persistenz Kontext A
First Level Cache
Persistenz Kontext B Persistenz Kontext C
Second Level Cache
Cache Concurrency Strategy Query Cache
Cache Implementierung
Klassen CacheRegion
Collection CacheRegion
Query CacheRegion
Update TimestampsCache Region
![Page 24: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/24.jpg)
SessionFactory
Virtual Machine 1
Session Session
Session Session
Session Session
Infrastruktur
Second Level Cache
SessionFactory
Virtual Machine 2
Session Session
Session Session
Session Session
Second Level Cache
Netzwerk
1st Level Cache onlyLokale 2nd Level CachesVerteilter Second Level Cache
![Page 25: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/25.jpg)
Welche EXCEPTION bekomme ich, wenn ich 10.000.000 Objekte lade?
OutOfMemory
![Page 26: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/26.jpg)
!Hibernate
verwaltet den 1st Level Cache
nicht von selbst!
![Page 27: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/27.jpg)
Grundregeln★ ORM ist kein Batch Tool!
★ Bei Massen-Verarbeitung regelmässig flushen und clearen!
★ JDBC Batch-Size anpassen
for ( int i=0; i<100000; i++ ) { Konto konto = new Konto(...); session.save(konto); if ( i % 50 == 0 ) { session.flush(); session.clear(); } }
![Page 28: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/28.jpg)
Concurrency Strategies
Transactional Isolation bis zu repeatable read
Read-Write Isolation bis zu read commited
Nonstrict-read-write Keine Konsistenz Garantie, aber Timeouts
Read-only Nur für Daten, die sich nie ändern
Nonstrict-read-write:only one transaction updates the items at a time.
Read CommittedIm Unterschied zur vorhergehenden Ebene sind hier Änderungen einer parallel ablaufenden Transaktion erst nach einem commit sichtbar. Das bedeutet, dass Transaktionen lediglich vor Daten geschützt sind, die am Ende einer anderen Transaktion nicht übernommen werden. Solche Daten sind üblicherweise fehlerhaft
Repeatable ReadBei dieser Isolationsebene ist sichergestellt, dass wiederholte Leseoperationen mit den gleichen Parametern auch die selben Ergebnisse haben. Üblicherweise wird dies sichergestellt, indem eine Transaktion nur Daten sieht, die vor ihrem Startzeitpunkt vorhanden waren. Eine parallele Änderung führt somit auch nach commit nicht zu Inkonsistenzen während einer Transaktion. Dennoch ist es möglich, dass zwei Transaktionen parallel den selben Datensatz modifizieren und nach Ablauf dieser beiden Transaktionen nur die Änderungen von einer von ihnen übernommen wird.
![Page 29: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/29.jpg)
Cache Provider
Transactional Read-write NonstrictRead-write Read-only
EHCache x x x
OSCache x x x
SwarmCache x x
JBoss Cache x x
EHCache is a cache provider intended for a simple process scope cache in a single JVM. It can cache in memory or on disk, and it supports the optional Hibernate query result cache. (The latest version of EHCache now supports clustered caching, but we havenʼt tested this yet.) I OpenSymphony OSCache is a service that supports caching to memory and disk in a single JVM, with a rich set of expiration policies and query cache support. I SwarmCache is a cluster cache based on JGroups. It uses clustered invalida- tion but doesnʼt support the Hibernate query cache. I JBoss Cache is a fully transactional replicated clustered cache also based on the JGroups multicast library. It supports replication or invalidation, syn- chronous or asynchronous communication, and optimistic and pessimistic locking. The Hibernate query cache is supported, assuming that clocks are synchronized in the cluster.
![Page 30: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/30.jpg)
Konfiguration
org.hibernate.cache.provider_class
EHCache org.hibernate.cache.EhCacheProvider
OSCache org.hibernate.cache.OsCacheProvider
SwarmCache org.hibernate.cache.SwarmCacheProvider
JBoss Cache org.hibernate.cache.TreeCacheProvider
![Page 31: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/31.jpg)
Mappings
★ Annotation:@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
★ XML:<cache usage=“read-write“>
★ Sowohl auf Klassen als auch auf Collection Level
★ Volles Caching: Klasse + Collection!
![Page 32: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/32.jpg)
Beispiel@Entity@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)public class Author implements Serializable {... @Override public int hashCode() { ... } @Override public boolean equals(Object obj) { ... }}
@Entity@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)public class RecordReview implements Article {... @OneToMany(fetch=FetchType.LAZY) @Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) private Set<Author> authors = new HashSet<Author>();...}
![Page 33: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/33.jpg)
Cache Regions★ Einteilung in Cache Regions mit Naming
Convention
★ Cache Regions werden in Cache Provider Konfiguration referenziert
Klassede.allschools.domain.Band
Voll qualifizierter Namede.allschools.domain.Band
Collectionde.allschools.domain.Record#bands
Klasse + „.“ + Attributde.allschools.domain.Record.bands
![Page 34: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/34.jpg)
EhCache Beispielehchache.xml
<ehcache> <diskStore path="java.io.tmp"/>
<defaultCache maxElementsInMemory="10000" eternal="true" overflowToDisk="true" /> <cache name="de.allschools.domain.Author"
maxElementsInMemory="30"eternal="false"timeToIdleSeconds="900"timeToLiveSeconds="1800"overflowToDisk="true" />
<cache name="de.allschools.domain.RecordReview.authors"maxElementsInMemory="500"eternal="false"timeToIdleSeconds="600"timeToLiveSeconds="1200"overflowToDisk="true" />
...</ehcache>
Collection Cache hält nur IDsLegacy Feature Property Reference auf nicht Primary Key => Kein Cache greift
![Page 35: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/35.jpg)
Auswahl von Caching Kandidaten?
KONSERVATIV★ Wenige Inserts und Updates
★ Viele Lesezugriffe
★ Unkritische Daten
★ Von vielen Sessions benötigt
★ Von vielen Usern benötigt
![Page 36: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/36.jpg)
Stateless Session★ sessionFactory.openStatelessSession()
★ Command orientierte API
★ Kein Persistenz Kontext
★ Kein Caching
★ Kein Transaktionales write-behind
★ Kein Cascading
★ Keine Interceptors und Events
![Page 37: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/37.jpg)
Abfragen
![Page 38: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/38.jpg)
Selektivität★ Nur benötige Daten laden
★ Möglichst früh einschränken
★ Projection verwenden
Query query = getSession().createQuery( "select new TourCityInfo(t.name, d.timestamp, l) from Tour t
inner join t.tourDates d with d.timestamp > :datum inner join d.location l where l.stadt=:stadt order by t.name asc");
![Page 39: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/39.jpg)
"from User u where u.name=" + name
✦ SQL Injection
✦ Performance Killer
✦ Heimtückisch
![Page 40: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/40.jpg)
!IMMERBIND VARIABLEN
verwenden
Query query = session.createQuery("from User u where u.name= :name");q.setString("name", "michael");
![Page 41: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/41.jpg)
Query Cache
★ Wird selten benötigt
★ Nur für bestimmte Queries geeignet
★ Wird extra konfiguriert:
hibernate.cache.use_query_cache=true
★ Muss pro Query / Criteria aktiviert werden:
query.setCacheable(true);
![Page 42: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/42.jpg)
Analyse
![Page 43: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/43.jpg)
Logging
★ Sehr detailliert, viele Informationen
★ Interessant sind für Tuning:
➡ org.hibernate.jdbc - TRACE
➡ org.hibernate.SQL - TRACE
★ Logging auch in User Types integrieren
★ Sicht auf plain SQL
![Page 44: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/44.jpg)
Statistics
★ Müssen extra aktiviert werden
★ Zugriff programmatisch oder JMX
Keine Statistics für Critereia API dooooooooh!!!!!!
![Page 45: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/45.jpg)
Datenbank + Infrastruktur★ Auch in der Datenbank analysieren
➡ Sind alle Indizes korrekt gesetzt?
➡ Wie ist das Laufzeitverhalten?
★ Gleiches gilt für Infrastruktur
➡ Connection Pool
➡ Transaktions Monitor
➡ Applikations Server
![Page 46: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/46.jpg)
Analysepro
Anwendungs-fall
Laufenlassen
Messdatenerheben
Nur eine Tuning
Massnahme
Vergleichmit Referenzund Doku
![Page 47: Ihre Persistenzschicht? · Hibernate und JPA Anwendungen Michael Plöd. Michael Plöd ... ★ Optimistic Locking Runtime](https://reader034.fdocuments.net/reader034/viewer/2022050209/5f5b949f68ce562d530f7e19/html5/thumbnails/47.jpg)
Lasttest★ Arten
➡ Normale Last
➡ Stresstest
➡ Lange Laufzeiten
★ Setup:
➡ Realistisches Hardware Sizing
➡ Realistische Datenmenge
DBunitLange Laufzeit: Hibernate <3.6Hibernate Soft References