Мы пытаемся использовать блокирующие функции 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