none
Concurrent Transactions and Unique ID RRS feed

  • Frage

  • Hello,

    Due to a large number of data that should be written to a table, we want to split it into manageable blocks. Primary key column is defined as Identity. This key is also a foreign key in child tables and shoud be known for further processing. Each transaction read the current Identity value and reseed it to the required block size (lets say to 500). As one cannot lock the Identity during reading its next and update value there is a chance that parallel transactions are using or reserving the same set of Ids. How to get tranaction wide the unique ids?

    Thanks.
    Montag, 30. Januar 2012 09:28

Antworten

  • Hallo,

    da dies ein deutschsprachiges Forum ist und Dein Anzeigename auch, die Antwort in deutsch:

    Ein Identätswert sollte nicht als Teil einer Transaktion geändert werden.
    Dort wird eine Schema Sperre (Sch-M) gesetzt, und dies würde andere Transaktionen blockieren
    und kann gar einen Deadlock provozieren.

    Für das Konzept von OID mit Unterbereichen, wie man es vereinzelt für Datenzugriffe propagiert
    sind sie nicht geeignet, wenn das mit "manageable blocks"gemeint ist.

    Dafür sind eigene Tabellen, die dazu Nummerkreise verwalten besser geeignet,
    zumindest bis SQL Server 2012 wo Sequenzen dafür eingesetzt werden könnten.

    Für das Aufteilen großer Tabellen sind Partitionen besser geeignet,
    da sie andere Dinge wie unnötige Fragmentierung vermeiden.

    Gruß Elmar

    Montag, 30. Januar 2012 15:09
    Beantworter

Alle Antworten