Почему идентификатор автоматического приращения не увеличивается один за другим, как его установить?


У меня есть кластер MariaDB Galera (3 узла), я установил uid, чтобы автоматически увеличиваться и быть первичным ключом таблицы как

 `uid       | int(11)     | NO   | PRI | NULL    | auto_increment`. 


 MariaDB [hello_cluster]> select uid from table order by uid limit 10;
    +-----+
    | uid |
    +-----+
    |   3 |
    |   6 |
    |   9 |
    |  12 |
    |  15 |
    |  18 |
    |  21 |
    |  24 |
    |  27 |
    |  30 |
    +-----+

Я попробовал следующую команду, и она не работает

 alter table uid AUTO_INCREMENT=1
1 8

1 ответ:

Это по замыслу и сообщается в MariaDB Galera Cluster-известные ограничения :

Не полагайтесь на то, что значения автоинкремента будут последовательными. Галера использует механизм, основанный на приращении автоинкремента, для получения уникальных неконфликтных последовательностей, поэтому на каждом отдельном узле последовательность будет иметь пробелы.

Рациональное объясняется в управлении Автоинкрементами с несколькими мастерами , а также почему наблюдаемое автоинкремент имеет то же самое шаг как число кластеров.

MySQL имеет системные переменные auto_increment_increment и auto_increment_offset для управления автоинкрементными "последовательностями"в среде multi master. Используя эти переменные, можно настроить многомастерную репликацию, гдепоследовательности автоматического приращения в каждом главном узле чередуются , и в кластере не должно происходить конфликтов. Независимо от того, какой мастер(ы) получает вставки.

Даже без кластеров, это редко " хорошо" идея полагаться на автоинкрементные столбцы, чтобы быть плотными последовательностями из-за отката транзакций и удаленных записей.