|
datachange()
Die
System Function
datachange() ermittelt wie viele Änderungen es seit dem letzten durchgeführten
update statistics
in den vorhandenen Daten gegeben hat. Das betrifft die Gesamtanzahl der
inserts,
updates
und
deletes
des betroffenen
Objekte,
Partitionen
oder
Spalten
einer
Tabelle.
Die Funktion muss immer mit allen drei Parametern aufgerufen
werden. datachange() kann von jedem Benutzer ausgeführt werden und steht ab
ASE
Version 15.0 zur Verfügung.
Die
Funktion
datachange() hilft bei der Abschätzung, ob ein erneutes update statistics
zur Optimierung des
query plans
von Vorteil wäre.
Die Anzahl der verschiedenen
DMLs
werden nicht getrennt aufgelistet. Dabei muss man mit einberechnen, dass der
"Datenänderungszähler" (datachange counter) bei einem update
um 2 Zähler hochgesetzt wird. Denn ein update besteht sowohl aus einem
delete als auch einem insert.
Das Ausgabeergebnis der System Funktion datachange() beruht auf der aktuell vorhandenen
Anzahl der Zeilen eines Objekts in Prozent. Wenn also beispielsweise eine Zeile zu
einer Tabelle mit 3 Zeilen hinzugefügt wurde, beinhaltet die Tabelle 4 Zeilen. Die
ergänzte Zeile stellt also 25 % aller vorhandenen Zeilen dar; Der "Datenänderungszähler"
wird um 1 erhöht. Gleiches Gilt auch für Partitionen. Da die Anzahl der Änderungen
höher sein kann als die Anzahl der vorhandenen Zeilen einer Tabelle oder Partition
kann der prozentuale Wert über 100 liegen.
Darüber hinaus wird der Wert, den die System Funktion datachange() aus
dem Memory ermittelt. Das bedeutet, dass er sich von dem tatsächlichem Wert der
bereits auf die Platte geschrieben wurde unterscheiden kann. Dieser Wert wird
entweder vom
houskeeper
Prozess oder durch Ausführen der
System Procedure
sp_flushstats
oder wenn der so genannte
objects descriptor
geflushed
wird ins Memory geladen.
Wann wird der "Datenänderungszähler" (datachange counter)
zurückgesetzt oder mit "0" initialisiert?
Der "Datenänderungszähler" durch ein
update stats
nicht zurückgesetzt, wenn das Histogramm für einen
global index
auf einer
partitionierten Tabelle
erzeugt wird.
Dagegen werden neue Tabellen bzw. neu hinzugefügte
Spalten
oder
Partitionen
mit "0" initialisiert.
Bei der Erstellung, Löschung oder beim updaten des entsprechenden
Histogramms wird der "Datenänderungszähler" zurückgesetzt.
Beim
truncate
einer Tabelle oder Partition und ihrer datachanges wird der
"Datenänderungszähler" zurückgesetzt.
Beim Neuorganisieren bzw. Umorganisieren der Partitionen einer Tabelle
werden die Werte des "Datenänderungszählers" zurückgesetzt.
Beim Entfernen aller Partitionen einer Tabelle wird der Wert des
"Datenänderungszählers" zurückgesetzt.
Beschränkungen der System Funktion datachange()
-
Für die
tempdb,
benutzerdefinierten tempdbs,
Systemtabellen
oder
Proxytabellen
werden keine Statistiken der datachanges geführt.
-
Im Falle eines
Rollbacks
wird der Wert des
"Datenänderungszählers" nicht zurückgerollt. Der Wert des
"Datenänderungszählers" wird nicht zurück gerollt. Dadurch
kann es zu Ungenauigkeiten des "Datenänderungszählers" kommen.
-
Gelegentlich kann der "Datenänderungszählers" für
Spalten nicht aus dem Memory ermittelt werden, dann wird stattdessen
der Zähler für auf Patitionsebene ermittelt.
-
Wird der "Datenänderungszählers" auf Spaltenebene zurückgesetzt,
dieser jedoch keine Werte beinhaltet, wird stattdessen der
"Datenänderungszählers" der Partitionsebene zurückgesetzt.
Syntax der System Function datachange()
datachange("object_name", "partition_name", "column_name")
Der Parameter der System Function datachange()
"object_name"
Der Parameter "object_name"
ist der Objektname in der entsprechenden
Datenbank.
Er kann aus der
Systemtabelle
sysobjects
in der Spalte name ausgelesen werden.
"partition_name"
Der Parameter "partition_name" ist der Name der
Partition.
Der Parameter kann mit einem
NULL-Wert
angegeben werden.
"column_name"
Der Parameter "column_name"
ist der Spaltenname (column) dessen "Datenänderungen"
ermittelt werden sollen.
Siehe auch:
dump transaction,
sp_thresholdaction,
Siehe auch:
Aggregat Funktionen, audit_event_name(), col_length(), col_name(), curunreservedpgs(), datalength(), data_pages(), data_pgs(), db_id(), db_name(), derived_stat(), host_id(), host_name(), identity(), identity_burn_max(), index_col(), index_colorder(), isnull(), is_quiesced(), lct_admin("logsegment_freepages"), lct_admin("num_logpages"), lct_admin("reserved"), lct_admin("reserved_for_rollbacks"), lct_admin(), license_enabled(), lockscheme(), next_identity(), object_id(), object_name(), pageinfo(), pagesize(), pointer_size(), ptn_data_pgs(), reserved_pages(), reserved_pgs(), rowcnt(), row_count(), showplan_in_xml(), syb_quit(), syb_sendmsg(), System Funktionen, tempdb_id(), tran_dumpable_status(), tsequal(), used_pages(), used_pgs().
|