Wie schon vor einiger Zeit hier vorgestellt, werden Record- und Prime-IDs in 5.6-Datenbanken intern als 64-Bit-Zähler gespeichert. Ab Version 5.6.06 wird daher der zulässige Wertebereich der IDs verdoppelt, ohne das eine Anpassung der Applikation erforderlich ist.
Bisher war der maximale ID-Wert auf 2^31 (dez. 2.147.483.647 – hex. 0x7FFFFFFF) beschränkt. Ab der kommenden Release erhöht sich dieses Limit auf 2^32 (dez. 4.294.967.295 – hex. 0xFFFFFFFF), sofern sich die Datenbank auf dem Stand 5.6 oder 3.9 befindet. In Datenbanken älteren Stands bleiben IDs auf das bisherige Limit beschränkt. Die maximale Anzahl von Datensätzen bleibt ebenfalls unverändert (2^31).
Der Server generiert zukünftig eine Fehlermeldung, wenn in einer Tabelle der maximale ID-Wert überschritten wird („Prime ID counter overflow„). Danach können keine neuen Datensätze mehr in diese Tabelle eingefügt werden. Dies gilt auch bei der Verwendung von Datenbanken < 5.6.
Die Nutzung einer vollständigen 64-Bit-ID wird in einem späteren Update möglich sein. Diese Möglichkeit muss jedoch für eine Tabelle explizit aktiviert werden, da die Programmierung dann für die Verarbeitung von 64-Bit-Rec-IDs anzupassen ist. In diesem Fall steigt das Limit auf 2^64 (dez. 18.446.744.069.414.584.320). Selbst beim Anlegen von zehn Millionen neuer Datensätze pro Sekunde ist dieses Limit erst nach mehr als 50.000 Jahren Dauerbetrieb erreicht.
2 Antworten
@Th.Eichele
RecInfo(…,_RecGetPrime) liefert zunächst negative Werte, beginnend bei -1 bis -2.147.483.648, danach folgt der Wert 2.147.483.647, von diesem wird dann heruntergezählt bis 1.
Eine Prüfabfrage mit 100 Mio. IDs als Reserve muss in Zukunft also Primewert > 0 und < 100.000.000 lauten.
und wie kann man diesen Wert dann abfragen ?
RecInfo() liefert ja Int zurück (was auf 2 Mrd. beschränkt ist)
Wir haben bei uns eine Prüfschleife eingebaut, die rechtzeitig vor dem Überlauf eine Warn-Email versenden soll.