powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите как определить факт блокировки таблицы
21 сообщений из 21, страница 1 из 1
Подскажите как определить факт блокировки таблицы
    #33364714
temofey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, доброго дня,

Подскажите каким образом можно определить заблокированна или нет некоторая таблица?

Заранее спасибо.
...
Рейтинг: 0 / 0
Подскажите как определить факт блокировки таблицы
    #33366582
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какой тип таблиц и желательно версия MySQL ???
...
Рейтинг: 0 / 0
Подскажите как определить факт блокировки таблицы
    #33366600
temofey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тип таблиц MyISAM, версия 4.1.11-standard.
...
Рейтинг: 0 / 0
Подскажите как определить факт блокировки таблицы
    #33366610
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не проапгрейдиться ли вам? Таки в в 4.1.11 критическая уязвимость, трудно эксплуатируемая, но всё ж таки.
...
Рейтинг: 0 / 0
Подскажите как определить факт блокировки таблицы
    #33366678
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На практике определить можно только наткнувшись на блокировку.
Увидеть состояние коннектов можно в show processlist;
Блокировки могут быть сняты либо в самом запросе, либо если коннект, который поставил их потерялся.

Опишите задачу, скорее всего решение будет в другом месте.
...
Рейтинг: 0 / 0
Подскажите как определить факт блокировки таблицы
    #33366900
temofey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DocAlА не проапгрейдиться ли вам? Таки в в 4.1.11 критическая уязвимость, трудно эксплуатируемая, но всё ж таки.

Я пробовал на 4.1.12 перейти, но все закончилось сегфаултом при загрузке сиквела. Пришлось откатываться. У меня MySQL локальный, сеть не слушает. Сервером пользуюсь только я, так что эксплойтов особенно не боюсь.

Валентин К
На практике определить можно только наткнувшись на блокировку.
Увидеть состояние коннектов можно в show processlist;

Спасибо, но до этого я дотумкал. Но вот не хотелось бы натыкаться.

Валентин К
Опишите задачу, скорее всего решение будет в другом месте.


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

Вот такая задачка.
...
Рейтинг: 0 / 0
Подскажите как определить факт блокировки таблицы
    #33366978
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему бы не использовать InnoDB и не блокировать таблицу?
...
Рейтинг: 0 / 0
Подскажите как определить факт блокировки таблицы
    #33366988
temofey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DocAlПочему бы не использовать InnoDB и не блокировать таблицу?

Во первых есть печальный опыт использования InnoDB, таблицы пару раз сыпались. Во вторых, производительность. В третьих если я в одном процессе заблокирую InnoDB таблицу - есть ли способ посмотреть состояние блокировки из другого процесса, а не нарватся на саму блокировку и "подвиснуть" до ее окончания?
...
Рейтинг: 0 / 0
Подскажите как определить факт блокировки таблицы
    #33367093
Можно создать простенькую таблицу status с одним полем int(1), которое и будет показывать состояние блокировки главной таблицы (что-то типа "критической секции" из параллельного программирования). Минус состоит в том, что необходимо будет перед каждым обращением к основной таблице просматривать ее состояние, но это уже вопрос реализации. :-)
...
Рейтинг: 0 / 0
Подскажите как определить факт блокировки таблицы
    #33367110
temofey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
заглянувшийМожно создать простенькую таблицу status с одним полем int(1),
Я об этом тоже думал. Но тут возможны нюансы. Скажем установка флага произойдет сразу после проверки, и процесс нарвется на блокировку.
...
Рейтинг: 0 / 0
Подскажите как определить факт блокировки таблицы
    #33367622
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
temofey заглянувшийМожно создать простенькую таблицу status с одним полем int(1),
Я об этом тоже думал. Но тут возможны нюансы. Скажем установка флага произойдет сразу после проверки, и процесс нарвется на блокировку.
Баг окажется в том, что клиент, который поставил блокировку - сдох, а статус остался и никто в нее не влезет.

Логично в принципе, но я это делал косвенным способом.
Щаз опишу.
Процессы, которые выполняются автоматически по расписанию логируются влодь до конкретного задания в пачке. В лог идет датавремя начала и конца операции. Автоматический модуль если его увалили сруки при повторном запуске закроет все незакрытые операции в логе.
Клиенту остается только поискать в логах операцию сегодня и сейчас и выполняется ли она.
В принципе это совмещает понятие статуса, только придает задаче несколько осмысленный вид. Типа 2 в 1.

Если нравитсо - делай так.
...
Рейтинг: 0 / 0
Подскажите как определить факт блокировки таблицы
    #33367640
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, знаете ли, с точки зрения "сыпаться" InnoDB понадёжней будут. И кто вас заставляет блокировать всю таблицу?
...
Рейтинг: 0 / 0
Подскажите как определить факт блокировки таблицы
    #33367649
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DocAlНу, знаете ли, с точки зрения "сыпаться" InnoDB понадёжней будут. И кто вас заставляет блокировать всю таблицу?
Блокируется таблица, как не странно я на это нарвался тоже MyISAM.
Для скорости заливки и удаления MyIsam быстрее работают чем InnoDB, тоже из практики. Бенчи однако другое на сайтах показывают на innodb.com

Кстати блокироки на InnoDB тоже табличные, если в настройке не поставишь сам строчные.

Насчет надежности - согласен. InnoDB на практике понадежней оказались.
...
Рейтинг: 0 / 0
Подскажите как определить факт блокировки таблицы
    #33367669
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том-то и дело, что _МОЖНО_ поставить построчную блокировку. И скорость вставки у InnoDB начальная меньше, чем у MyISAM, но с ростом нагрузки уменьшается значительно меньше.
Ну да ладно, моё дело посоветовать.
Если, всё же, хочется непременно использовать блокировки -- вот эти функции могут быть полезны:

#

IS_FREE_LOCK(str)

Checks whether the lock named str is free to use (that is, not locked). Returns 1 if the lock is free (no one is using the lock), 0 if the lock is in use, and NULL on errors (such as incorrect arguments).
#

IS_USED_LOCK(str)

Checks whether the lock named str is in use (that is, locked). If so, it returns the connection identifier of the client that holds the lock. Otherwise, it returns NULL.
...
Рейтинг: 0 / 0
Подскажите как определить факт блокировки таблицы
    #33370553
temofey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DocAlВ том-то и дело, что _МОЖНО_ поставить построчную блокировку.

Чтото мне подсказывает, что для 5 млн записей построчная блокировка будет подобна смерти :-)

Насчет надежности - согласен. InnoDB на практике понадежней оказались.

Я два раза в разных конфигурация пробовал переходить на InnoDB, и в обоих случаях на второй/третий день таблицы сыпались. Уж не знаю в чем причина, но факт остаюется фактом. Причем сыпались так основательно что восстановлению не подлежали. MyISAM таблицы пару раз сыпались тоже, из за непредвиденных ребутов, но они хоть восстанавливались нормально.



могут быть полезны:
IS_FREE_LOCK(str)
IS_USED_LOCK(str)

А вот это, похоже, то что нужно. Я так понял что с помощью этих функций можно создовать абсрактные именованные блокировки, которые не привязанны к никаким физическим обьектам базы данных. Я правильно понял.
...
Рейтинг: 0 / 0
Подскажите как определить факт блокировки таблицы
    #33370895
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
temofey DocAlВ том-то и дело, что _МОЖНО_ поставить построчную блокировку.

Чтото мне подсказывает, что для 5 млн записей построчная блокировка будет подобна смерти :-)

Гм, на основании чего вы так думаете?

Насчет надежности - согласен. InnoDB на практике понадежней оказались.

Я два раза в разных конфигурация пробовал переходить на InnoDB, и в обоих случаях на второй/третий день таблицы сыпались. Уж не знаю в чем причина, но факт остаюется фактом. Причем сыпались так основательно что восстановлению не подлежали. MyISAM таблицы пару раз сыпались тоже, из за непредвиденных ребутов, но они хоть восстанавливались нормально.

Не замечал такого, сколько пользуюсь InnoDB, вы уверены, что с железом всё в порядке?
...
Рейтинг: 0 / 0
Подскажите как определить факт блокировки таблицы
    #33371666
temofey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot DocAlГм, на основании чего вы так думаете?
[/quot ]
Ну если удаление само по себе довольно дорогое удовольствие, то если еще и блокировать отдельные записи, то выйдет ну никак не быстрее.

Не замечал такого, сколько пользуюсь InnoDB, вы уверены, что с железом всё в порядке?
Ситуация возникакл на разных машинах, под разными ОС.
...
Рейтинг: 0 / 0
Подскажите как определить факт блокировки таблицы
    #33371680
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гм. Вообще, чем больше записей в таблице, тем большее значение играет тот фактор, что при row-level блокировке с остальными записями можно работать.
...
Рейтинг: 0 / 0
Подскажите как определить факт блокировки таблицы
    #33371709
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DocAlГм. Вообще, чем больше записей в таблице, тем большее значение играет тот фактор, что при row-level блокировке с остальными записями можно работать.
На практике я столкнулся с тем, что при load data infile происходит блокировка на уровне таблицы и с хаписями работать нельзя, это для MyIsam, может я чего-то не понял, но row-level применить в этой операции не удалось...
...
Рейтинг: 0 / 0
Подскажите как определить факт блокировки таблицы
    #33371733
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InnoDB поддерживает row-level (точнее, index entry-level) блокировки, BDB page-level, а MyISAM только блокировки уровня таблицы.
...
Рейтинг: 0 / 0
Подскажите как определить факт блокировки таблицы
    #33371739
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DocAlInnoDB поддерживает row-level (точнее, index entry-level) блокировки, BDB page-level, а MyISAM только блокировки уровня таблицы.
Это я тоже знаю, у афтара MyIsam.
Но как обучающее замечание - поддерживаю.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите как определить факт блокировки таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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