
Fike
29.06.2017
11:52:57
если про это

lost
29.06.2017
11:53:22
про это,но автор как я понял хотел что-то вроде системы очередей сделать
чтобы захватить строку и больше ее никто заюзать не смог

Google

Nurik
29.06.2017
12:04:11

Fike
29.06.2017
12:05:25
насколько понимаю, да (головой сейчас немного в других облаках)

lost
29.06.2017
12:07:00
иначе блокировка на строку будет в момент обновления
а не в момент старта транзакции

Fike
29.06.2017
12:07:44
не в момент чтения?

lost
29.06.2017
12:08:49
нет, там неблокирующее чтение, строка читается из снепшота

Alexey
29.06.2017
12:09:28

Nurik
29.06.2017
12:11:36

Fike
29.06.2017
12:11:43
Так, теперь уже для тупого меня. Там же REPEATABLE READ по умолчанию. Разве он не гарантирует, что между r1 ... w1 не будет другой записи?
в смысле я понял про блокировку, но не понимаю важности этого момента

Alexey
29.06.2017
12:12:18
Да. Правильно понимаете.
Тогда самым правильным решением будет SELECT ... FOR UPDATE SKIP LOCKED. Но это только с 8.0: https://dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.html

Google

Alexey
29.06.2017
12:12:36
там в самом конце страницы есть пример, иллюстрирующий что это такое
если есть возможность использовать 8.0, то лучше её. иначе придётся костыли городить

lost
29.06.2017
12:13:29
сомневаюсь что кто-то еще в проде её юзает... но не об этом сейчас

Alexey
29.06.2017
12:13:54
ну, не всё, что разработчики используют, обязательно используется в проде
даже чаще наоборот :)

Nurik
29.06.2017
12:16:46
а не в момент старта транзакции
Хочу подвести небольшой итог:
1. FOR UPDATE использовать!
2. Это в свою очередь гарантирует, что необходимое мне поведение будет достигнуто.
Верно я понял ?

lost
29.06.2017
12:17:36

Alexey
29.06.2017
12:19:06

Nurik
29.06.2017
12:19:17

Alexey
29.06.2017
12:19:38
ну если на носу, тогда да, не надо 8.0

lost
29.06.2017
12:19:53
огосподи
что это за дичь
?
уже эмодзи не оттправишь

Nurik
29.06.2017
12:22:39

lost
29.06.2017
12:24:21
Затронет производительность
потому что for update это неявный serializable будет, возможна эскалация блокировок и все будет работать медленнее

Fike
29.06.2017
12:26:28
контеншн в любом случае ничего хорошего не сулит, тут вопрос в том, сколько может запросов прийти на одного и того же парня

lost
29.06.2017
12:26:33

Google

lost
29.06.2017
12:26:34
во

Fike
29.06.2017
12:26:35
если один-два, то вряд ли небеса рухнут

Alexey
29.06.2017
12:28:51

Nurik
29.06.2017
12:31:58
если один-два, то вряд ли небеса рухнут
Ситуация следующая:
В одной густонаселенной местности могут одновременно прийти от 10 до сотни запросов, если радиус поиска в 3км. Из этого следует максимум 100 запросов теоритических.
Вот если исходить из этих данных, то стоит ли ?

lost
29.06.2017
12:32:21
если транзакции быстрые - почему нет?
главное правило: транзакции короче, комиты чаще
если все именно так и никаких подводных камней в том числе в дизайне бд нет - то ты этой сериализации даже не почувствуешь

Nurik
29.06.2017
12:34:13

Alexey
29.06.2017
12:34:54
если 100 транзакций в секунду в пике, но каждая транзакция занимает не более 1/100 секунды, то нет никаких проблем, даже если они сериализуются. Ваш К.О. :)

lost
29.06.2017
12:35:19

Nurik
29.06.2017
12:35:44
Всем спасибо за развернутые ответы и за дельные советы!

Fike
29.06.2017
12:39:02
Если пик, то я бы не стал сильно волноваться

Nurik
29.06.2017
12:41:11
Ребят можете плиз накидать пару книжек, чтобы детальнее разобраться в тонкостях, относительно блокировок в mysql (mariadb) и так далее.
(Язык не имеет значения, но если есть актуальное издание на русском, то было бы супер.)

lost
29.06.2017
12:51:44
Документация
Подробнее чем там вряд ли где будет

Nurik
29.06.2017
12:54:05

Fike
29.06.2017
12:55:04
https://www.microsoft.com/en-us/research/publication/a-critique-of-ansi-sql-isolation-levels/ вот в этой бумаге хорошо расписано, какие уровни изоляции с какими феноменами борются

Google

Fike
29.06.2017
12:55:13
(целиком я ее так и не прочитал)

lost
29.06.2017
12:56:44
https://habrahabr.ru/post/238513/
https://www.youtube.com/watch?v=mSQrRvo6l9I
это вот прям из первых уст

Alexey
29.06.2017
13:00:22
если нужен прямо совсем хардкор, то могу вот это рекомендовать: https://www.slideshare.net/valeriikravchuk1/understanding-innodb-locks-and-deadlocks

Nurik
29.06.2017
13:01:15
Во, спасибо за материалы. Почитаю/Посмотрю.

Alexey
29.06.2017
13:02:00
но в High Performance MySQL наверняка это всё в более удобнов виде описано

lost
29.06.2017
13:03:40
в книжке орейли с вороной?)
про блокировки там почти нет ничего, в основном упор на query performance

Alexey
29.06.2017
13:09:19
я уже не помню, щас проверю
да, как-то там размазано по всей книге. но полезная книжка в любом случае. и да, с птичкой на обложке

lost
29.06.2017
13:13:31
там есть еще одна, тоже с птичкой, тоже про мускуль, тоже полезная)
Талманн автор

Oleg
30.06.2017
02:55:24
Привет всим

Dmitry
01.07.2017
06:45:24
11 июля состоится встреча московской группы пользователей MySQL
http://www.opennet.ru/opennews/art.shtml?num=46788
11 июля в 18:00 в офисе компании Mail.Ru состоится очередная встреча московской группы пользователей MySQL (Moscow MySQL User Group). Специальный гость встречи - Пётр Зайцев (CEO, Percona). Пётр сделает два доклада и ответит на вопросы участников встречи. Вход свободный. #opennet

Nurik
01.07.2017
09:32:50
Всем привет. Ребят у меня тут вопрос есть. Чтобы запрос r2 и w2 блокировались пока не исполнится r1 и w2 нужно обязательно делать запрос вида SELECT ...FOR UPDATE и оборачивать в транзакцию ? ИЛи нужно уровни изоляции трогать ещё ?

Alexey
01.07.2017
11:23:23

Dan
01.07.2017
11:47:04
почему вот это плохо:
mysqldump -uroot -p database > utf8.dump

Google

Dan
01.07.2017
11:47:04
а вот это хорошо:
mysqldump -uroot -p database -r utf8.dump

Fike
01.07.2017
12:11:15
а кто сказал, что (а) - это а плохо, а (б) - хорошо, и что при этом было сказано дополнительно?
могу лишь предположить, что автор думал, что при использовании редиректа файл сначала будет создан целиком в оперативке - конечно, это не так
но что на самом деле думал автор, конечно, не знаю

Александр
01.07.2017
12:48:18
всем привет! )
ребят, подскажите пожалуйста что делать:
имеется большая БД (80 гигов), её нужно перенести на другой сервак
весь день убил - ума не приложу как
делать mysqldump - это смертоубийство, до нового года дампить буду, а потом еще столько же разворачивать на новом серве :(
пробовал файлами копировать - получается быстро (~2 часа), но БД после этого не работает (хотя делал по доке)