Was, wenn auto_increment das ende erreicht?
Was, wenn auto_increment das ende erreicht?
am 13.10.2006 06:28:15 von Martin Kaffanke
Hallo!
Ein INT geht von -2147483648 bis -2147483647, ein UNSIGNED BIGINT von 0
bis 18446744073709551615
Was passiert wenn ich einen Primary Key mit auto increment definiere und
diese Zahlen erreicht werden?
lg,
Martin
Re: Was, wenn auto_increment das ende erreicht?
am 13.10.2006 07:59:41 von Claus Reibenstein
Martin Kaffanke schrieb:
> Ein INT geht von -2147483648 bis -2147483647, ein UNSIGNED BIGINT von 0
> bis 18446744073709551615
>
> Was passiert wenn ich einen Primary Key mit auto increment definiere und
> diese Zahlen erreicht werden?
Nehmen wir einmal an, Du hast einen ultraflinken Server und eine
Software, die es gemeinsam schaffen, jede Millisekunde einen neuen
Datensatz anzulegen. Bei INT (welches übrigens bis +2147483647 geht)
würde der von Dir prognostizierte Fall also schon nach 2147483 Sekunden
eintreten, also nach rund 68 Jahren. Warum also jetzt schon Sorgen machen?
Für UNSIGNED BIGINT spare ich mir diese Betrachtung, weil ich davon
ausgehe, dass die Menschheit diesen Fall nicht mehr erleben wird.
GruÃ. Claus
Re: Was, wenn auto_increment das ende erreicht?
am 13.10.2006 08:17:56 von Guido Schmidt
Claus Reibenstein schrieb:
> Nehmen wir einmal an, Du hast einen ultraflinken Server und eine
> Software, die es gemeinsam schaffen, jede Millisekunde einen neuen
> Datensatz anzulegen. Bei INT (welches übrigens bis +2147483647 geht)
> würde der von Dir prognostizierte Fall also schon nach 2147483 Sekund=
en
> eintreten, also nach rund 68 Jahren.=20
2147483 Sekunden sind gerade mal knapp 25 Tage. Vielleicht sollte er=20
sich doch Sorgen machen :)
68 Jahre ergeben sich bei einem neuen Datensatz pro Sekunde und nicht=20
pro Millisekunde.
Guido
Re: Was, wenn auto_increment das ende erreicht?
am 13.10.2006 08:28:21 von Claus Reibenstein
Guido Schmidt schrieb:
> Claus Reibenstein schrieb:
>
>> würde der von Dir prognostizierte Fall also schon nach 2147483 Sekunden
>> eintreten, also nach rund 68 Jahren.
>
> 2147483 Sekunden sind gerade mal knapp 25 Tage. Vielleicht sollte er
> sich doch Sorgen machen :)
>
> 68 Jahre ergeben sich bei einem neuen Datensatz pro Sekunde und nicht
> pro Millisekunde.
Stimmt. Hier lag mein Rechenfehler.
Ich habe in der Zwischenzeit mal versucht, über Google irgendetwas zu
diesem Thema rauszufinden. Leider komplette Fehlanzeige. Offenbar hat
sich bislang noch nie jemand Sorgen zu diesem Thema gemacht.
Gruß. Claus
Re: Was, wenn auto_increment das ende erreicht?
am 13.10.2006 08:36:46 von Andreas Kretschmer
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de
Re: Was, wenn auto_increment das ende erreicht?
am 13.10.2006 11:00:22 von Weinzierl Stefan
Martin Kaffanke wrote:
> Hallo!
>
>
> Ein INT geht von -2147483648 bis -2147483647, ein UNSIGNED BIGINT von 0
> bis 18446744073709551615
>
> Was passiert wenn ich einen Primary Key mit auto increment definiere und
> diese Zahlen erreicht werden?
CREATE TABLE test(id TINYINT AUTO_INCREMENT PRIMARY KEY);
128x INSERT INTO test(id) VALUES(NULL);
ERROR 1062 (23000): Duplicate entry '127' for key 1
Stefan
Re: Was, wenn auto_increment das ende erreicht?
am 13.10.2006 12:29:13 von Norbert Melzer
Am Fri, 13 Oct 2006 07:59:41 +0200 schrieb Claus Reibenstein:
> Bei INT (welches übrigens bis +2147483647 geht) würde der von Dir
> prognostizierte Fall also schon nach 2147483 Sekunden eintreten, also
> nach rund 68 Jahren. Warum also jetzt schon Sorgen machen?
Mal von Deinem Rechenfehler abgesehen, immerhin wurdest Du schon darauf
gestoßen, ist das IMHO die Falsche Einstellung, denn die letzten
AUswirkung solchen Gedankengutes waren vor ungefähr 7 Jahren deutlich zu
spüren (auch wenn es da zum großteil Gottseidank Panikmache war)
MfG
Norbert
Re: Was, wenn auto_increment das ende erreicht?
am 13.10.2006 18:44:50 von Dominik Echterbruch
Weinzierl Stefan wrote:
[Überlauf von auto_increment]
> CREATE TABLE test(id TINYINT AUTO_INCREMENT PRIMARY KEY);
>
> 128x INSERT INTO test(id) VALUES(NULL);
>
> ERROR 1062 (23000): Duplicate entry '127' for key 1
Das ist interessant. Früher lautete die Fehlermeldung mal "Table full".
Grüße,
Dominik
--
http://www.vlights.com/
vLights.com - Das Portal für virtuelle Kerzen
Re: Was, wenn auto_increment das ende erreicht?
am 13.10.2006 19:06:42 von Andreas Kretschmer
Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)
Re: Was, wenn auto_increment das ende erreicht?
am 13.10.2006 19:27:19 von Andreas Kretschmer
Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)
Re: Was, wenn auto_increment das ende erreicht?
am 14.10.2006 07:52:30 von NOSPAM_newsgroups
Hi
Norbert Melzer schrieb:
> =
> Am Fri, 13 Oct 2006 07:59:41 +0200 schrieb Claus Reibenstein:
> =
> > Bei INT (welches übrigens bis +2147483647 geht) würde der von Dir=
> > prognostizierte Fall also schon nach 2147483 Sekunden eintreten, also=
> > nach rund 68 Jahren. Warum also jetzt schon Sorgen machen?
> =
> Mal von Deinem Rechenfehler abgesehen, immerhin wurdest Du schon darauf=
> gestoßen, ist das IMHO die Falsche Einstellung, denn die letzten
> AUswirkung solchen Gedankengutes waren vor ungefähr 7 Jahren deutlich=
zu
> spüren (auch wenn es da zum großteil Gottseidank Panikmache war)
:-)))
allerdings bei bigint sollte er selbst bei 1 Mrd. DS/Sec.
seine Sorgen nicht mehr erleben :-)))
Nun gut, man könnte da jetzt Kryonic einwerfen ...
=
gruß n.Olivier
-- =
Nachbagauer Olivier - www.nOlivier.com
www.reedb.com - Immobilien national & international =
Webportal der Immobilien-Branche - www.Immofinder.de
Re: Was, wenn auto_increment das ende erreicht?
am 14.10.2006 12:02:13 von Kris
Dominik Echterbruch wrote:
> Das ist interessant. Früher lautete die Fehlermeldung mal "Table full".
Das verwechselst Du. Die Fehlermeldung "table full" bekommst Du, wenn Deine
Tabelle zu gross wird, um noch mit dem durch MAX_ROWS und AVG_ROW_SIZE
definierten Row Pointer adressierbar zu sein.
Kris
Re: Was, wenn auto_increment das ende erreicht?
am 14.10.2006 12:41:43 von Johannes Vogel
Hi Andreas
Andreas Kretschmer wrote:
> begin Andreas Kretschmer wrote:
>> begin Dominik Echterbruch wrote:
>>>> 128x INSERT INTO test(id) VALUES(NULL);
>>>> ERROR 1062 (23000): Duplicate entry '127' for key 1
>
>>> Das ist interessant. Früher lautete die Fehlermeldung mal "Table full".
>
>> Yeah. Die Fehlermeldungen von MySQL werden sinnvoller. Aber so richtig
>> sinnvoll sind sie noch nicht...
> Offensichtlich macht MySQL von sich aus ein CYCLE, und merkt erst dann,
> daß da schon was ist. Womit die Frage des Fragestellers wohl beantwortet
> wäre.
Nein, MySQL reduziert den errechneten Wert > 127 auf 127 und versucht
einen solchen Eintrag anzulegen. Das jedoch gelingt nicht, weil ein
solcher bereits vorhanden ist. Deshalb ist auch die Fehlermeldung völlig
in Ordnung. Schade nur, dass die Warning nicht offensichtlicher zum
Ausdruck kommt.
------------------------------8<----------------------------------------
mysql> create table test (id tinyint primary key auto_increment);
Query OK, 0 rows affected (0.10 sec)
mysql> alter table test auto_increment=127;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> insert into test values (null);
Query OK, 1 row affected (0.03 sec)
mysql> insert into test values (null);
ERROR 1062 (23000): Duplicate entry '127' for key 1
mysql> show warnings;
+---------+------+------------------------------------------ -----------+
| Level | Code | Message |
+---------+------+------------------------------------------ -----------+
| Warning | 1264 |Data truncated; out of range for column 'id' at row 1|
| Error | 1062 |Duplicate entry '127' for key 1 |
+---------+------+------------------------------------------ -----------+
2 rows in set (0.01 sec)
------------------------------8<----------------------------------------
HTH, Johannes
Re: Was, wenn auto_increment das ende erreicht?
am 15.10.2006 03:04:22 von Dominik Echterbruch
Kristian Köhntopp wrote:
>
>>Das ist interessant. Früher lautete die Fehlermeldung mal "Table full".
>
> Das verwechselst Du. Die Fehlermeldung "table full" bekommst Du, wenn Deine
> Tabelle zu gross wird, um noch mit dem durch MAX_ROWS und AVG_ROW_SIZE
> definierten Row Pointer adressierbar zu sein.
Hmm... Ich war mir bei dieser Aussage absolut sicher und habe deswegen
mal Google konsultiert. Und tatsächlich habe ich einen Beitrag gefunden,
in dem dieses Phänomen mit der o.g. Meldung dokumentiert wurde.
Dummerweise stammte dieser Beitrag von mir und war eine Antwort auf eine
entsprechende Frage. Also blöderweise kein belastbarer Beweis :)
Grüße,
Dominik
--
http://www.vlights.com/
vLights.com - das Portal für virtuelle Kerzen
Re: Was, wenn auto_increment das ende erreicht?
am 15.10.2006 03:20:24 von Dominik Echterbruch
Kristian Köhntopp wrote:
>
>>Das ist interessant. Früher lautete die Fehlermeldung mal "Table full".
>
> Das verwechselst Du. Die Fehlermeldung "table full" bekommst Du, wenn Deine
> Tabelle zu gross wird, um noch mit dem durch MAX_ROWS und AVG_ROW_SIZE
> definierten Row Pointer adressierbar zu sein.
Hmm... Ich war mir bei dieser Aussage absolut sicher und habe deswegen
mal Google konsultiert. Und tatsächlich habe ich einen Beitrag gefunden,
in dem dieses Phänomen mit der o.g. Meldung dokumentiert wurde.
Dummerweise stammte dieser Beitrag von mir und war eine Antwort auf eine
entsprechende Frage. Also blöderweise kein belastbarer Beweis :)
Aber ich bin mir nach wie vor sehr sicher, daß vor einigen Jahren öfter
mal diese Frage gestelt wurde. Und dann immer im zusammenhang mit
"tinyint" und "Table full". Die Idee für meine damalige Antwort kam ja
nicht von ungefähr... Leider konnte ich es auch auf meiner angestaubten
3.23 nicht mehr nachvollziehen. Auch dort kommt der "Duplicate key".
Vielleicht war es in in 3.22 mit den ISAM Tabellen so.
Grüße,
Dominik
--
http://www.vlights.com/
vLights.com - das Portal für virtuelle Kerzen