A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z  Sonderzeichen  sybase-tech-blog


Kategorie: ASE: Funktionen: System Funktionen

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().