Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите как определить факт блокировки таблицы / 21 сообщений из 21, страница 1 из 1
07.11.2005, 16:53:17
    #33364714
temofey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как определить факт блокировки таблицы
Коллеги, доброго дня,

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

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

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

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

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

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

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


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

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

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

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

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

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

Насчет надежности - согласен. InnoDB на практике понадежней оказались.
...
Рейтинг: 0 / 0
08.11.2005, 20:16:56
    #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
10.11.2005, 11:22:10
    #33370553
temofey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как определить факт блокировки таблицы
DocAlВ том-то и дело, что _МОЖНО_ поставить построчную блокировку.

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

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

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



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

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

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

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

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

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

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

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


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