Size: a a a

2020 May 15

АБ

Алексей Барнев... in ru_mysql
можно ли как то получать с помощью mysqld —print-defaults то что прописано в секции [mysqld_safe] ?
источник

АБ

Алексей Барнев... in ru_mysql
либо каким то другим образом (не получая доступа к субд) смотреть параметры с которыми запустится/запущена субд (интересует именно параметр log-error)
источник

AK

Alexey Kopytov in ru_mysql
Dmitry MiksIr
Ну тут скорее даже вопрос не в удержании блокировки, а когда именно мы берем значение счетчика. Насколько я помню, нарушение внешнего ключа, например, не берет счетчик. Т.е. наверное можно было сначала полочить дырки в уникальном индексе, а уже потом брать инкремент, да?
чтобы вставить запись, нужно её сформировать. в том числе, получить следующее значение auto_increment. можно получить значение N и позволить параллельным транзакциями получать значения N+1, N+2, ... Но да, если при вставке получили duplicate key, на месте N будет "дырка". А можно было бы не давать параллельным транзакциям получать N+1, N+2, а заставить их ждать, пока мы полностью не выполним вставку и не откатимся из-за duplicate key. Тогда первая ожидающая транзакция получила бы значение N, дырки бы не было, но это ужасно неэффективно. Так понятнее, надеюсь
источник

РН

Роман НовАГ... in ru_mysql
да, я все понял. Спасибо. Просто надо было подумать, если честно
источник

DM

Dmitry MiksIr in ru_mysql
Alexey Kopytov
чтобы вставить запись, нужно её сформировать. в том числе, получить следующее значение auto_increment. можно получить значение N и позволить параллельным транзакциями получать значения N+1, N+2, ... Но да, если при вставке получили duplicate key, на месте N будет "дырка". А можно было бы не давать параллельным транзакциям получать N+1, N+2, а заставить их ждать, пока мы полностью не выполним вставку и не откатимся из-за duplicate key. Тогда первая ожидающая транзакция получила бы значение N, дырки бы не было, но это ужасно неэффективно. Так понятнее, надеюсь
т.е. ты хочешь сказать, что при innodb_autoinc_lock_mode=0 дырок не будет? 😉
источник

AK

Alexey Kopytov in ru_mysql
Dmitry MiksIr
т.е. ты хочешь сказать, что при innodb_autoinc_lock_mode=0 дырок не будет? 😉
при любом значении будут
источник

DM

Dmitry MiksIr in ru_mysql
Alexey Kopytov
при любом значении будут
ну о том и речь, что тут в общем суть не длительность лока, а просто ...так проще? 😉
источник

AK

Alexey Kopytov in ru_mysql
Dmitry MiksIr
ну о том и речь, что тут в общем суть не длительность лока, а просто ...так проще? 😉
а то, что innodb_autoinc_lock_mode в общем-то не о том, не смущает?
источник

А

Александр in ru_mysql
В Оракле сиквенсы вообще кешируются и хорошая практика кеш выставлять 10-100, т.е. со счётчика сразу забираем 10-100 значений, зато существенно ускоряется массовая вставка, особенно при конкурентной записи
источник

DM

Dmitry MiksIr in ru_mysql
Alexey Kopytov
а то, что innodb_autoinc_lock_mode в общем-то не о том, не смущает?
ну при 0 же как раз общий лок на автоинкремент и берется каждым стейтментом, разве не так?
источник

А

Александр in ru_mysql
а на id смотришь как на просто уникальную цифру, аналогично uuid'а
источник

AK

Alexey Kopytov in ru_mysql
Dmitry MiksIr
ну при 0 же как раз общий лок на автоинкремент и берется каждым стейтментом, разве не так?
innodb_autoinc_lock_mode=0 -- это про консистентность statement-based репликации с multi-row inserts. никаких обещаний по отмотке id обратно она не даёт
источник

DM

Dmitry MiksIr in ru_mysql
Alexey Kopytov
innodb_autoinc_lock_mode=0 -- это про консистентность statement-based репликации с multi-row inserts. никаких обещаний по отмотке id обратно она не даёт
а я и не говорю, что она это обещает
просто ты привел отсуствие глобального лока как основную причину, что появляются дырки...
а меня скорее интересовало - есть ли какие-то принципиалные архитектурные проблемы, которые мешают взять инкремент после взятия всех необходимых для инсерта блокировок, а не до, как сейчас
источник

DM

Dmitry MiksIr in ru_mysql
ок, давай иначе... попытка вставки - это сначала проверка уникальных индексов и ввзятие гап локов, если их нет... а уже потом процесс добавления записи... что принципиально мешает брать счетчик не до проверки, а после? Т.е. можно ли было написать код движка так, что бы брать счетчик уже после взяти всех локов?
источник

DM

Dmitry MiksIr in ru_mysql
почему перепутал... разве insert не берет локи на уникальных индексах перед вставкой?
источник

DM

Dmitry MiksIr in ru_mysql
т.е  мы же должны как-то заблокировать одновременную вставку одинаковых записей.. т.е. должны взять лок на несуществующую запись во вторичном индексе, пока добавляем саму запись... insert intention lock если не ошибаюсь
источник

JH

Jovid Hamrokulov in ru_mysql
Привет всем, как использовать ON DUPLICATE KEY UPDATE, когда пара столбцов UNIQUE в таблице. (teacher_id, student_id) -> UNIQUE.
источник

G

Gerda in ru_mysql
ребят
источник

G

Gerda in ru_mysql
это ведь неверно?
источник

А

Александр in ru_mysql
Я бы считал having count(distinct orderId) > 3
источник