Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / правильно-ли я пишу продедуру для галеры? / 15 сообщений из 15, страница 1 из 1
08.12.2014, 12:22:28
    #38827885
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
правильно-ли я пишу продедуру для галеры?
Я так понимаю что галера и блокировочник и версионник, в зависимости от того на одну ноду попали сессии или нет.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
CREATE PROCEDURE test (IN ff INT)
BEGIN
DECLARE IDD INT;
DECLARE xx INT;

DECLARE exit handler for sqlexception
begin
  ROLLBACK; 
  select 555555; /* попали на разные ноды, итоговый commit не получился */
end;

START TRANSACTION;

SELECT id into IDD FROM test where f0="2w" LIMIT 1 for update ; /* попали на одну ноду, наткнемся на блокировку */

select sleep(ff) into xx;
  
IF IDD IS NOT NULL THEN
  update test set f0="1" where id = IDD;
  commit;
  Select IDD;  /* все отлично возращаем искомое id */
else 
  ROLLBACK;  
  select 33333; /* попали на одну ноду заблокировать первым не удалось */
end if;
END
/

Тут все верно ? А то у меня mysql клиент падает после вызова, и с разными ошибками.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
]> call test(15);
+--------+
| 555555 |
+--------+
| 555555 |
+--------+
1 row in set (11.27 sec)

ERROR 2027 (HY000): Malformed packet

ERROR 2013 (HY000): Lost connection to MySQL server during query

Segmentation fault (core dumped)


Или вообще транзакциями в процедурах лучше не управлять?
...
Рейтинг: 0 / 0
08.12.2014, 12:47:16
    #38827905
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
правильно-ли я пишу продедуру для галеры?
Журавлев ДенисгалераК моему стыду, до сих пор даже не слышал про такое.
Пришлось гуглить.

Журавлев ДенисSegmentation fault (core dumped)Штатно после такого я бы предложил обновить софт (т.е. MySQL). Но в данной ситуации - даже не знаю.
Тут упоминается некий патч.
...
Рейтинг: 0 / 0
08.12.2014, 12:53:07
    #38827918
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
правильно-ли я пишу продедуру для галеры?
miksoftЖуравлев ДенисгалераК моему стыду, до сих пор даже не слышал про такое.
Пришлось гуглить.Синхронная репликация транзакций в кластере, на запись работает со скоростью самой медленной ноды плюс задержки сети, блокировки не реплицируются, поэтому надо и select for update делать и ловить падения commit.
...
Рейтинг: 0 / 0
08.12.2014, 12:55:24
    #38827923
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
правильно-ли я пишу продедуру для галеры?
А вообще в sp нормально start transaction/commit или моветон, и лучше из клиента?
...
Рейтинг: 0 / 0
08.12.2014, 12:58:13
    #38827928
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
правильно-ли я пишу продедуру для галеры?
Журавлев ДенисА вообще в sp нормально start transaction/commit или моветон, и лучше из клиента?В одиночных инстансах - нормально (желательно чтобы транзакция откатывалась/фиксировалась на том же уровне архитектуры всей БД, где и начиналась). Как тут - не знаю.
...
Рейтинг: 0 / 0
08.12.2014, 12:59:26
    #38827931
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
правильно-ли я пишу продедуру для галеры?
miksoftЖуравлев ДенисгалераК моему стыду, до сих пор даже не слышал про такое.
Пришлось гуглить.

Журавлев ДенисSegmentation fault (core dumped)Штатно после такого я бы предложил обновить софт (т.е. MySQL). Но в данной ситуации - даже не знаю.
Тут упоминается некий патч.

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

ТС. а зачем тебе галера???
а тем более не совсем ясно - что значит попали на разные ноды...юзер всмысле на сайт заходит и на разные ноды?? так тем более зачем тебе галера, если у тебя так нельзя работать..
...
Рейтинг: 0 / 0
08.12.2014, 13:07:36
    #38827943
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
правильно-ли я пишу продедуру для галеры?
alex564657498765453ТС. а зачем тебе галера???ммм, ну, дали адрес, сказали там балансировщик, за ним n-нод галеры.


alex564657498765453а тем более не совсем ясно - что значит попали на разные ноды...юзер всмысле на сайт заходит и на разные ноды?? так тем более зачем тебе галера, если у тебя так нельзя работать..а нету юзеров, скажем приходят три робота и меняют одну и туже строчку, в одной таблице, менять можно только первому.
...
Рейтинг: 0 / 0
08.12.2014, 13:08:33
    #38827947
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
правильно-ли я пишу продедуру для галеры?
miksoftЖуравлев ДенисгалераК моему стыду, до сих пор даже не слышал про такое.
Пришлось гуглить.

Журавлев ДенисSegmentation fault (core dumped)Штатно после такого я бы предложил обновить софт (т.е. MySQL). Но в данной ситуации - даже не знаю.
Тут упоминается некий патч.
так это клиент упал в core от неожиданного ответа. в логи сервера лучше бы посмотреть


Galera - дополнительный координирующий слой. Они все синхронно обновляют информацию.
Они называют это Certification based Replication. Так что ближе к "блокировочнику" в такой терминологии.

То есть, шардинга там нет. Если кластер функционирует в нормальном режиме, то почему вообще возникла мысль, что какие сессии могут попасть на одну ноду или не на одну ? на всех все должно примениться. или же настроено неправильно.

Журавлев ДенисИли вообще транзакциями в процедурах лучше не управлять?
И ведь не самая плохая идея при любом раскладе. Зачем пытаться делать из mysql оракл ?
Но точно не могу сказать в чем тут дело.
...
Рейтинг: 0 / 0
08.12.2014, 13:23:12
    #38827963
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
правильно-ли я пишу продедуру для галеры?
Журавлев Дениса нету юзеров, скажем приходят три робота и меняют одну и туже строчку, в одной таблице, менять можно только первому.
Теперь понятно. Кажется, select for update был бы более традиционен и уместен.
...
Рейтинг: 0 / 0
08.12.2014, 13:31:00
    #38827969
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
правильно-ли я пишу продедуру для галеры?
netwindGalera - дополнительный координирующий слой. Они все синхронно обновляют информацию.
Они называют это Certification based Replication. Так что ближе к "блокировочнику" в такой терминологии.
блокировки не реплицируются.

1. случайно балансировщик закинул на разные ноды
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
на первой ноде  | на второй ноде
connect sess1   | connect sess2
start tran      | start tran         
update t1       |
                | update t1 
commit          |
                | comit -> Deadlock found when....


2. случайно балансировщик закинул на одну ноду
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
на первой ноде  | на первой ноде
connect sess1   | connect sess2
start tran      | start tran         
update t1       |
                | update t1 -> висим на lock
commit          |
                | update -> проходит успешно
                | commit -> успешно

netwindТо есть, шардинга там нет. мне и не нужен шардинг

netwindЖуравлев ДенисИли вообще транзакциями в процедурах лучше не управлять?
И ведь не самая плохая идея при любом раскладе. Зачем пытаться делать из mysql оракл ?
Но точно не могу сказать в чем тут дело.Ок, будем управлять из клиента.
...
Рейтинг: 0 / 0
08.12.2014, 13:36:56
    #38827979
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
правильно-ли я пишу продедуру для галеры?
netwindЖуравлев Дениса нету юзеров, скажем приходят три робота и меняют одну и туже строчку, в одной таблице, менять можно только первому.
Теперь понятно. Кажется, select for update был бы более традиционен и уместен.
только если к одной ноде ходить для записи.
...
Рейтинг: 0 / 0
08.12.2014, 13:53:41
    #38827993
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
правильно-ли я пишу продедуру для галеры?
Журавлев Денисnetwindпропущено...

Теперь понятно. Кажется, select for update был бы более традиционен и уместен.
только если к одной ноде ходить для записи.
почему ? а чем же тогда galera занимается в этой связке?
...
Рейтинг: 0 / 0
08.12.2014, 13:59:51
    #38828000
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
правильно-ли я пишу продедуру для галеры?
netwindЖуравлев Дениспропущено...

только если к одной ноде ходить для записи.
почему ? а чем же тогда galera занимается в этой связке?синхронной репликацией транзакций.
Еще раз: блокировки не реплицируются, но если пишущие случайно окажутся на одной ноде, то блокировки будут.
На самом деле там все просто.

У меня вообще затруднение в том что я первый раз в жизни вижу mysql и там надо поправить процедуру, которая глючит, потому что писавший не понимает весь юмор неатомарности хранимых процедур при autocommit.
...
Рейтинг: 0 / 0
08.12.2014, 14:19:48
    #38828045
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
правильно-ли я пишу продедуру для галеры?
а какая там точно версия mysql ?
есть ли переменная wsrep_sync_wait в выводе show variables ?
по-моему может как-то влиять на эти блокировки :
https://mariadb.com/kb/en/mariadb/documentation/replication/galera/galera-cluster-system-variables/#wsrep_sync_wait
причем, она динамическая, так что возможно ее в приложении устанавливать и делать свои чорные дела.
...
Рейтинг: 0 / 0
08.12.2014, 15:46:09
    #38828168
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
правильно-ли я пишу продедуру для галеры?
Журавлев ДенисА вообще в sp нормально start transaction/commit или моветон, и лучше из клиента?

А это как у тебя приложение написано, и какой СУБД. Блокировочник длинные транзакции не любит, версионнику пофигу.
Т.е. если блокировочник, то вроде бы как долгие транзакции -- плохо, и лучше их делать в SP (но вовсе не обязательно).
Версионник -- можно и так, и так.
Поскольку MySQL в разных ипостасях и такой, и такой, то однозначно тут ничего сказать нельзя.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / правильно-ли я пишу продедуру для галеры? / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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