Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
MariaDB, проблемы с Alter ignore table.
|
|||
|---|---|---|---|
|
#18+
Добрый день, Использую MariaDB версии 10.0.27 с InnoDB таблицами. Столкнулся с проблемой с Alter Table процедурой (добавление/удаление индекса или колонки, проходит в онлайне без локов на таблице) Если во время альтера попытаться записать в таблицу дублирующую по Unique индексу запись, то получаем Dublicate Key update ошибку как на Insert операцию, так и на Alter операцию. Причём Alter сваливается с ошибкой не моментально, а только под конец своей работы. (через час-полтора после запуска). Предположив, что альтер склонировав таблицу пытается накатить все накопившееся изменения (почему то даже неуспешные), попробовал пускать его через ALTER IGNORE TABLE. Документация говорит, что в таком случае альтер должен игнорировать Dublicate Key Update ошибки. Но он всё равно крашиться. Собственно нужна помощь. Как заставить Alter игнорировать Dublicate Key Update ошибки. Архитектурно от таких ошибок не избавится. Downtime не выбить, всё должно происходить без остановки работы бд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 15:20 |
|
||
|
MariaDB, проблемы с Alter ignore table.
|
|||
|---|---|---|---|
|
#18+
Поправляюсь, ошибка - Dublicate entry "123" dor key "UNIQUE INDEX NAME" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 15:26 |
|
||
|
MariaDB, проблемы с Alter ignore table.
|
|||
|---|---|---|---|
|
#18+
Вы хотите сказать, что при выполнении ALTER TABLE таблица не блокируется, и Вы можете в неё добавлять данные??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2017, 16:56 |
|
||
|
MariaDB, проблемы с Alter ignore table.
|
|||
|---|---|---|---|
|
#18+
Да, InnoDB умеет делать неблокирующие таблицу альтеры. https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 13:09 |
|
||
|
MariaDB, проблемы с Alter ignore table.
|
|||
|---|---|---|---|
|
#18+
Я так понимаю проблема в этом. Но есть ли возможность её избежать средствами бд? When running an online DDL operation, the thread that runs the ALTER TABLE statement applies an “online log” of DML operations that were run concurrently on the same table from other connection threads. When the DML operations are applied, it is possible to encounter a duplicate key entry error (ERROR 1062 (23000): Duplicate entry), even if the duplicate entry is only temporary and would be reverted by a later entry in the “online log”. This is similar to the idea of a foreign key constraint check in InnoDB in which constraints must hold during a transaction. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 13:36 |
|
||
|
MariaDB, проблемы с Alter ignore table.
|
|||
|---|---|---|---|
|
#18+
Grega123 , это был вопрос типа "Вы сознательно решили устроить себе этот геморрой?"... ну да ладно. На момент выполнения запроса INSERT/UPDATE в структуре таблицы УЖЕ имеется ограничение на уникальность поля (именно CONSTRAINT, а не UNIQUE INDEX!!! - индекса ещё нет, он только строится). Поэтому запрос сразу получает отлуп. А ALTER TABLE отваливается по завершении, вероятно, потому, что построение нового, уникального, индекса, является закрытым суб-процессом, в то время как сведения о проблеме находятся в основном процессе изменения структуры таблицы и ждут окончания очередного этапа изменения, и приводят к ошибке по завершении суб-процесса. Ну или что-то типа того. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 13:56 |
|
||
|
MariaDB, проблемы с Alter ignore table.
|
|||
|---|---|---|---|
|
#18+
О! собсно, приведённая цитата приблизительно об этом и говорит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 13:58 |
|
||
|
MariaDB, проблемы с Alter ignore table.
|
|||
|---|---|---|---|
|
#18+
Проблема то ясна. Интересно, можно ли её как нибудь избежать средствами mysql. В голову ничего не приходит. Разве что попробовать через триггер проверять уникальность и вручную крашить транзакцию с другим эксепшеном. Но, даже если поулчится, это попахивает костылями :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2017, 10:13 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39502552&tid=1830491]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 153ms |

| 0 / 0 |
