Функции MySQL Get_Lock и Release_Lock занимают много времени - PullRequest
0 голосов
/ 16 мая 2019

Мы пытаемся использовать блокирующие функции MYSQL Get_Lock и Release_Lock в нашем весеннем Java-приложении.Код, который мы используем, определен в процедуре для обоих по отдельности, которые просто вызывают из нашего кода Java. Запросы внутри proc приведены ниже.

Мы наблюдали за временем выполнения этих функций и обнаружили, что виногда для выполнения требуется миллисекунда, но в других случаях это занимает от 400 до 600 мс.Я попробовал следующие подходы, но между ними не было большой разницы: 1. Используйте «Do» вместо select с этими функциями.2. Используя тип данных int ключа, который мы используем в качестве строки блокировки.3. Уменьшение длины строки блокировки.

Я использую таймаут 0, чтобы избежать блокировки соединений.

Может кто-нибудь предложить мне способ оптимизировать это. Есть ли способ оптимизации пула буферов innodb или что-то, связанное с этими конфигурациями.Пожалуйста, дайте мне знать, если какой-либо другой ввод требуется с моей стороны.

Пожалуйста, найдите ниже некоторый код процедуры и статистику для вашей справки.

Текущий код Mysql:

Процесс:

get_Name_lock:

- Использование выбора

Select get_lock(Name,0) into c_Name_flag;

- Использование Do

Do get_lock(Name,0) ;

Proc:

release_Name_lock:

- Использование select

Select release_lock(Name) into c_Name_flag;

-- Использование Do

Do release_lock(Name);

Частота запросов: (около) 10 запросов / сек.Mysql версия: 5.7.19-log

...