powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Автоинкремент не по порядку
20 сообщений из 20, страница 1 из 1
Автоинкремент не по порядку
    #39014889
petr12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Такая ситуация. В журнал пишутся логи всех запросов к серверу. Сделал 2 временные таблицы (четный час пишется в одну таблицу, нечетный час - в другую) и одну основную в которую по крону каждый час скидываются данные поочередно из 2-х временных таблиц.

Данные скидываются в основную таблицу таким образом

mysql_query("INSERT INTO `log_requests`(`created` ,`url` ,`params`) SELECT `created` ,`url` ,`params` FROM `log_requests1`");
mysql_query("TRUNCATE TABLE `log_requests1`");

Проблема такая: после заполнения основной таблицы, наблюдаются пробелы в ID.
К примеру вот id записей вставленных по порядку.
..
189998 1437658199 /url {"key":"CF725E79-0B52-FA79-C298-151F8DDC3A76"}
189999 1437658199 /url {"hash":"2840201cf49f65071fad3fbf374242b1cc72b906~...}
190000 1437658199 /url {"key":"22243F4C-9A2F-3118-784F-DE0932CE92E9"}
196606 1437658200 /url {"key":"03F853A0-66B0-B24D-58FF-14F4B85867D7"}
196607 1437658200 /url {"hash":"22cdbbb140a967687162162783612786263666..}
...

Круглое число в данном примере случайность. Разрывы наблюдаются между запусками агрегирующего скрипта.
Никаких удалений из таблицы нет совсем.

В данный момент такой запрос

Код: sql
1.
SELECT min( id ) , max( id ) , count( * ) FROM `log_requests` 



выдает

1 | 772980 | 683761

Кто-то сталкивался с таким или может объяснить почему такое происходит?
...
Рейтинг: 0 / 0
Автоинкремент не по порядку
    #39014933
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это - НОРМАЛЬНО.
И вообще - нахрена тебе та непрерывность? Уникален? Да... и достаточно.
...
Рейтинг: 0 / 0
Автоинкремент не по порядку
    #39015073
petr12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, с практической, так сказать, точки зрения ваш ответ устраивает ))
Но, чисто из спортивного интереса, хочется узнать о причинах такого поведения.
...
Рейтинг: 0 / 0
Автоинкремент не по порядку
    #39015079
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petr12345,

"К примеру вот id записей вставленных по порядку."

а как вы получили данный набор, ORDER BY id ?
т.е. у вас нет id 190001-196605 ? тогда это глюк
ЕСЛИ просто SELECT * FROM table,
ТОГДА
MySQL - пишет как хочет, а еще и показывает не так как пишет... (без ORDER BY)
...
Рейтинг: 0 / 0
Автоинкремент не по порядку
    #39015100
petr12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinov,

да именно с ORDER BY `id` ASC

визуально заметил после очередного запуска скрипта, что последнее значение 190000
после следующего запуска скрипта, обнаружил, что следующий id = 196606
записей [190001 - 196605] - нету
...
Рейтинг: 0 / 0
Автоинкремент не по порядку
    #39015289
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно только предположить, что каким-то образом не прошел скрипт со вставкой пачки 6605 строк, т.е. инкремент увеличился, а вставка "отменилась" (из-за ошибки или при других обстоятельствах)
...
Рейтинг: 0 / 0
Автоинкремент не по порядку
    #39015371
petr12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinov,

по второй колонке timestamp видно, что пробелов нет
...
Рейтинг: 0 / 0
Автоинкремент не по порядку
    #39015384
petr12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сейчас вот максимальный id 17580, а следующий инкремент показывает 32768
...
Рейтинг: 0 / 0
Автоинкремент не по порядку
    #39015436
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автоинкремент еще увеличивается при INSERT ... ON DUPLICATE KEY UPDATE при срабатывании ветки UPDATE.
...
Рейтинг: 0 / 0
Автоинкремент не по порядку
    #39015530
petr12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

с этой таблицей работает только один скрипт, который выполняет 2 запроса

Код: sql
1.
2.
mysql_query("INSERT INTO `log_requests`(`created` ,`url` ,`params`) SELECT `created` ,`url` ,`params` FROM `log_requests1`");
mysql_query("TRUNCATE TABLE `log_requests1`");



всё! никаких апдейтов, никаких удалений.
...
Рейтинг: 0 / 0
Автоинкремент не по порядку
    #39015549
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petr12345,

а не может быть что при переключении часов(таблицу куда писать) происходит сбой - что не пишеться ни туда ни туда, или же при работе инсерта, всё есчё продолжается запись в таблицу, и транкейт потом удаляет...задержку поставь между инсертом и транкейтом и посмотри сколько записей в таблице - столько же как было перед инсертом или другое число.
...
Рейтинг: 0 / 0
Автоинкремент не по порядку
    #39015567
petr12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кому не лень, может проделать самостоятельно следующие действия.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
mysql> CREATE TABLE IF NOT EXISTS `log_requests` (
         `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
         `created` int(10) NOT NULL,
         `url` varchar(255) NOT NULL,
         `params` text NOT NULL,
         PRIMARY KEY (`id`)
       ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.01 sec)



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
mysql> CREATE TABLE IF NOT EXISTS `log_requests1` (
         `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
         `created` int(10) NOT NULL,
         `url` varchar(255) NOT NULL,
         `params` text NOT NULL,
         PRIMARY KEY (`id`)
       ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.01 sec)



Заполняем временную табличку
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
mysql> INSERT INTO `log_requests1` (`id`, `created`, `url`, `params`) VALUES
       (1, 1437718931, '/url', '{"v":"2"}'),
       (2, 1437731119, '/url', '{"v":"2"}'),
       (3, 1437731148, '/url', '{"v":"2"}'),
       (4, 1437731213, '/url', '{"v":"2"}'),
       (5, 1437733129, '/url', '{"v":"2"}');
Query OK, 5 rows affected (0.01 sec)
Records: 5  Duplicates: 0  Warnings: 0



Выполняем перенос из временной таблицы в основную таблицу

Код: sql
1.
2.
3.
mysql> INSERT INTO `log_requests`(`created` ,`url` ,`params`) SELECT `created` ,`url` ,`params` FROM `log_requests1`;
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0



Проверяем следующее значение инкремента (Не забываем указывать название своей базы в TABLE_SCHEMA !!! )
Код: sql
1.
2.
3.
4.
5.
6.
7.
mysql> SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'log_requests' and TABLE_SCHEMA = 'test';
+----------------+
| AUTO_INCREMENT |
+----------------+
|              8 |
+----------------+
1 row in set (0.00 sec)


И видим что оно не 6, как ожидалось, а 8

Проверим еще раз скинув данные из временной таблички

Код: sql
1.
2.
3.
mysql> INSERT INTO `log_requests`(`created` ,`url` ,`params`) SELECT `created` ,`url` ,`params` FROM `log_requests1`;
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0



Смотрим что имеется:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
mysql> select * from log_requests;
+----+------------+------+-----------+
| id | created    | url  | params    |
+----+------------+------+-----------+
|  1 | 1437718931 | /url | {"v":"2"} |
|  2 | 1437731119 | /url | {"v":"2"} |
|  3 | 1437731148 | /url | {"v":"2"} |
|  4 | 1437731213 | /url | {"v":"2"} |
|  5 | 1437733129 | /url | {"v":"2"} |
|  8 | 1437718931 | /url | {"v":"2"} |
|  9 | 1437731119 | /url | {"v":"2"} |
| 10 | 1437731148 | /url | {"v":"2"} |
| 11 | 1437731213 | /url | {"v":"2"} |
| 12 | 1437733129 | /url | {"v":"2"} |
+----+------------+------+-----------+
10 rows in set (0.00 sec)



Значений 6 и 7 нету!!

Следущий инкремент ожидается 15

Код: sql
1.
2.
3.
4.
5.
6.
7.
mysql> SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'log_requests' and TABLE_SCHEMA = 'test';
+----------------+
| AUTO_INCREMENT |
+----------------+
|             15 |
+----------------+
1 row in set (0.00 sec)
...
Рейтинг: 0 / 0
Автоинкремент не по порядку
    #39015829
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какая у вас версия MySQL ради интереса
...
Рейтинг: 0 / 0
Автоинкремент не по порядку
    #39015843
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MariaDB 10 тоже самое, после insert-select автоинкремент перескакивает...
...
Рейтинг: 0 / 0
Автоинкремент не по порядку
    #39015845
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и увеличение на 2 больше, чем max(id)
...
Рейтинг: 0 / 0
Автоинкремент не по порядку
    #39015850
Serguei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petr12345В журнал пишутся логи всех запросов к серверу. Сделал 2 временные таблицы (четный час пишется в одну таблицу, нечетный час - в другую) и одну основную в которую по крону каждый час скидываются данные поочередно из 2-х временных таблиц.

Утолите любопытство отрока-невежды - для чего такие премудрости?
Практический смыл есть какой нибудь?
...
Рейтинг: 0 / 0
Автоинкремент не по порядку
    #39016291
petr12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinov,
на локалхосте mysql 5.5
на сервере Maria 10
...
Рейтинг: 0 / 0
Автоинкремент не по порядку
    #39016292
petr12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Serguei, практический смысл есть, но не хотелось бы отвлекаться от поставленной проблемы
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Автоинкремент не по порядку
    #39375510
pinguin88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petr12345, здравствуйте!

Удалось решить вопрос с "перескакиванием" автоинкремента?
Какое решение?
...
Рейтинг: 0 / 0
Автоинкремент не по порядку
    #39375549
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pinguin88 ,решение тут: 17927439
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Автоинкремент не по порядку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]