Feature "Partielle Spaltenaktualisierung" für containergesteuerte Persistenz

Die CMP-Beanmethode ejbStore speichert alle persistenten Attribute der CMP-Bean in der Datenbank, selbst wenn nur ein Teil der persistenten Attributfelder geändert werden. Diese überflüssigen Leistungseinbußen wurden für dieses Release des Produkts entfernt.

Anmerkung: Entity-Beans werden in Modulen der EJB Version 3.0 nicht unterstützt.
Für EJB-2.x-CMP-Entity-Beans (EJB = Enterprise JavaBeans) können Sie mithilfe des Features "Teilaktualisierung" (partial update) angeben, wie die persistenten Attribute der CMP in der Datenbank aktualisiert werden sollen. Dieses Feature steht als Persistenzoption PartialOperation auf der Ebene der Bean in der für die Bean konfigurierten Richtlinie für Zugriffsarten bereit. PartialOperation kann zwei Werte annehmen:
NONE
Die Teilaktualisierung ist inaktiviert. Alle persistenten Attribute der CMP-Bean werden in der Datenbank gespeichert. Dies ist die Standardeinstellung.
UPDATE_ONLY
Legt fest, dass nur die persistenten Attribute der CMP-Bean in der Datenbank aktualisiert werden, die geändert wurden.
Nähere Informationen zum Festlegen einer partiellen Aktualisierung finden Sie im Artikel Teilaktualisierung für CMP-Beans festlegen.

Leistung

Die Ausführung partieller Aktualisierungen erhöht die Leistung in mehrerer Hinsicht:
  • Die Ausführungszeit für Abfragen wird reduziert, weil nur ein Teil der Spalten abgefragt wird. Die Leistungsverbesserung ist umso höher, je mehr Spalten und Indizes die Tabellen enthalten. Wenn die Tabelle über viele Indexe verfügt, müssen nur die Indexe von der Back-End-Datenbank aktualisiert werden, die von aktualisierten Spalten betroffen sind.
  • Die Ein-/Ausgabe im Netz wird verringert, weil weniger Daten übertragen werden müssen.
  • Die Verarbeitungszeit für komplex zugeordnete Spalten verringert sich, beispielsweise wenn eine Spalte Konverter/Composer/Transformationen verwendet, um den Eingabedatensatz teilweise einzufügen.
  • Es werden keine unnötigen Auslöser für Aktualisierungen gestartet. Wenn ein CMP-Bean-Feld nicht geändert wurde, werden auch keine Auslöser gestartet, die nur von der zugehörigen Spalte abhängig sind.
Die partielle Aktualisierung bewirkt zwar eine Leistungsverbesserung bewirkt, kann jedoch die Leistung wie folgt beeinträchtigen:
  • Wird die partielle Aktualisierung für eine Bean aktiviert, für die eine Anwendung mehrere unterschiedliche Kombinationen von Spalten innerhalb derselben Zeitperiode ändert, dann wird die maximale Begrenzung für Verbindungen im Cache für vorbereitete Anweisungen schnell erreicht. Dies führt dazu, dass die Anweisungskennungen abhängig vom Zeitpunkt ihrer Verwendung auf der Basis der LRU-Regel (Least Recent Usage) aus dem Cache entfernt werden. Dadurch werden Anweisungen stets aufs Neue vorbereitet, so dass sich die Leistung für alle CMP-Funktionen, nicht nur für die Methode ejbStore, verringert.
  • Abfrageschablonen für partielle Aktualisierungen, die im Funktionssatz zwischengespeichert werden, erhöhen die Speicherbelegung. Die Erhöhung erfolgt linear zur Anzahl der Felder in der CMP-Bean, für die die Option für Zugriffsarten der partiellen Aktualisierung aktiviert ist.
  • Wird die Persistenzoption PartialOperation zusammen mit der Persistenzoption für Stapelaktualisierung verwendet, dann beeinträchtigt dies die Leistung bei der Aktualisierung im Stapelbetrieb, weil jede partielle Abfrage unterschiedlich ist. Das dynamische Generieren einer Abfragezeichenfolge für die partielle Aktualisierung erfordert zusätzliche Ausführungszeit. Weil Abfragefragmente für jede Spalte gespeichert werden, erhöht sich die zusätzliche Ausführungszeit zum Assemblieren der Abfragefragmente linear zur Anzahl der verwendeten CMP-Bean-Felder.
  • Für jedes CMP-Feld finden Zustandsprüfungen statt, z. B. zur Prüfung benutzter Flags und Ausführung der preparedStatement-setXXX-Methodenaufrufe.

Überlegungen für die Verwendung partieller Aktualisierungen

Die Leistungsvorteile, die Sie sich erhoffen, sollten gegen die möglichen Fälle abgewogen werden, in denen eine Leistungsverschlechterung eintreten kann. Folgende Richtlinien können Ihnen bei der Entscheidung helfen.
  • Eine partielle Aktualisierung bietet wahrscheinlich keine Vorteile für eine Anwendung, die nur eine kleine Tabelle mit wenigen Spalten und einfachen Datentypen und keinen Aktualisierungsauslösern verwendet. Der Zeitaufwand für die dynamische Assemblierung der partiellen Abfrage wäre größer als die erwartete Leistungsverbesserung.
  • Eine partielle Aktualisierung ist dann von Vorteil, wenn ein komplexer Datentyp vorhanden ist, der nicht häufig aktualisiert wird. Ein Beispiel für einen komplexen Datentyp ist eine Mitarbeiter-Bean, in der das CMP-Attribut "photo" dem Typ BLOB oder VARGRAPHIC oder einem ähnlich komplexen Back-End-Typ zugeordnet ist, der normalerweise an einer anderen Position in der Implementierung des Datenbankmanagers gespeichert ist.
  • Eine partielle Aktualisierung kann eine Leistungsverbesserung zur Folge haben, wenn mehrere Spalten vom Typ VARCHAR vorhanden sind und nur wenige dieser Spalten aktualisiert werden.
  • Die partielle Aktualisierung sollte besser nicht verwendet werden, wenn die Anwendung unterschiedliche Kombinationen von Spalten beliebig aktualisieren kann und die Anzahl der Spalten (ohne Schlüsselfunktion), die zugeordnet werden können, mehr als fünf beträgt. Dadurch werden unterschiedliche partielle Abfragen generiert und der Cache für vorbereitete Anweisungen wird schnell belegt. Wenn die Bean jedoch nicht viele Spalten hat, z. B. vier oder weniger, und über komplexe Datentypen verfügt, dann können Sie die Verwendung der partiellen Aktualisierung in Erwägung ziehen, wobei die Größe des Anweisungscaches erhöht werden sollte, damit die größere Anzahl an Abfragen zwischengespeichert werden kann. Nähere Informationen dazu, wie die Größe des Anweisungscaches erhöht wird, finden Sie im Hilfetext zu den Datenquelleneinstellungen.
  • Die partielle Aktualisierung ist dann von Vorteil, wenn für einen Teil der Spalten Akualisierungsauslöser erforderlich sind.
  • Die partielle Aktualisierung ist dann von Vorteil, wenn die Tabelle über viele Spalten und Indexe verfügt und normalerweise nur einige wenige Indexe aktualisiert werden.

Einschränkungen

Standardmäßig ist die Aktualisierung von Aktualisierungsabfragen im Stapelbetrieb für alle CMP-Beans, für die eine partielle Aktualisierung festgelegt ist, inaktiviert. Mit anderen Worten, die partielle Aktualisierung hat Vorrang vor der Aktualisierung im Stapelbetrieb. Die Aktualisierung von Lösch- und Einfügeabfragen im Stapelbetrieb ist davon nicht betroffen.

Die Leistung der Aktualisierung im Stapelbetrieb wird vermindert, wenn innerhalb derselben Bean beide Persistenzoptionen, Aktualisierung im Stapelbetrieb und partielle Aktualisierung, verwendet werden, weil jede partielle Abfrage unterschiedlich ist. Sie können mit der JVM-Eigenschaft -Dcom.ibm.ws.pm.grouppartialupdate=true ähnliche partielle Aktualisierungsabfragen für eine Aktualisierung im Stapelbetrieb gruppieren. Die Gruppierung partieller Aktualisierungen ist nur dann hilfreich, wenn mehrere partielle Abfragen mit derselben Form in einer Transaktion vorhanden sind. Andernfalls führt die Gruppierung partieller Aktualisierungen im Gegenteil zu einer Verschlechterung der Leistung. Weil diese Einstellung nicht auf der Ebene der Bean vorgenommen wird, sollten Sie vorsichtig sein, wenn Sie sie aktivieren. Da diese Einstellung Auswirkungen auf alle Beans hat, für die sowohl die partielle Aktualisierung als auch die Aktualisierung im Stapelbetrieb festgelegt sind, müssen Sie sicherstellen, dass eine solche Aktualisierung von partiellen Abfragen im Stapelbetrieb tatsächlich für alle Beans, für die beide Aktualisierungen festgelegt sind, eine Leistungsverbesserung bringt.

Gehen Sie wie folgt vor, um die JVM-Eigenschaft festzulegen:

  1. Öffnen Sie die Datei server.xml.
  2. Ändern Sie den Wert -Dcom.ibm.ws.pm.grouppartialupdate=true in -Dcom.ibm.ws.pm.grouppartialupdate=false.

Symbol, das den Typ des Artikels anzeigt. Konzeptartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cejb_partupd
Dateiname:cejb_partupd.html