28

数据库自增ID用完了会怎样

 4 years ago
source link: http://www.hongweipeng.com/index.php/archives/1880/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

起步

对DBA来说这应该是送分题吧。而我是突如其来的想法想测试下的。正常来说程序员是不会关心自增ID用完的情况的。

以 Mysql 为例,它支持的最大的整型是 unsigned bigint ,上限是 2 的 64 次次方。假设每秒记录100万条数据的增长,用完自增ID要58万年以后了。

自增ID用完了会怎样,什么报错

那要是真的58万年以后了呢。就是要探究下用光了会怎样。在我的 Mysql 5.7 它的报错是:

SQL Error (167): Out of range value for column 'id'.

也有人在其他版本测出来的报错是:

Duplicate entry '*****' for key 'PRIMARY'

可以看出,不同的数据库底层实现不一样,不同版本也有差异。只能知道会报错,具体报错信息是什么不好说,可能是数据越界,也可能是主键冲突。

补充

另外,另一个让程序员不关心自增ID用完的原因是。MySQL单机单表的处理能力是千万级别。当单表数据达到1千万时,MySQL性能就会开始下降,需要着手优化,这里的瓶颈主要是查询耗时。

我们可以通过分区再撑一段时间,当数据量到10亿时,基本到了MySQL的极限,不分表分库的话,业务难以持续。如果分表分库的话那么自增ID就很难保证唯一性,这时候就得弃用自增ID,采用其他算法(如uuid)。

总的来说,从业务的角度来讲自增ID不可能用完,单表也支撑不了那么大的数据量。不用担心自增ID用完的情况。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK