|
|
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
Коллеги, доброго дня, Подскажите каким образом можно определить заблокированна или нет некоторая таблица? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2005, 16:53:17 |
|
||
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
какой тип таблиц и желательно версия MySQL ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2005, 13:59:33 |
|
||
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
Тип таблиц MyISAM, версия 4.1.11-standard. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2005, 14:06:42 |
|
||
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
А не проапгрейдиться ли вам? Таки в в 4.1.11 критическая уязвимость, трудно эксплуатируемая, но всё ж таки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2005, 14:10:36 |
|
||
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
На практике определить можно только наткнувшись на блокировку. Увидеть состояние коннектов можно в show processlist; Блокировки могут быть сняты либо в самом запросе, либо если коннект, который поставил их потерялся. Опишите задачу, скорее всего решение будет в другом месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2005, 14:37:53 |
|
||
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
DocAlА не проапгрейдиться ли вам? Таки в в 4.1.11 критическая уязвимость, трудно эксплуатируемая, но всё ж таки. Я пробовал на 4.1.12 перейти, но все закончилось сегфаултом при загрузке сиквела. Пришлось откатываться. У меня MySQL локальный, сеть не слушает. Сервером пользуюсь только я, так что эксплойтов особенно не боюсь. Валентин К На практике определить можно только наткнувшись на блокировку. Увидеть состояние коннектов можно в show processlist; Спасибо, но до этого я дотумкал. Но вот не хотелось бы натыкаться. Валентин К Опишите задачу, скорее всего решение будет в другом месте. Есть таблица с несколькими миллионами записей, записи добавляються пачками по 100 тысяч, раз в полчаса, и раз в день старые записи удаляются (т.е. за раз удаляются около 5 млн записей). Таблица содержит некоторого рода архивную информацию, которая в общем то нужна пользователю, но не сильно. Т.е. в момент когда данные в таблицу добавляются или удаляются (а этот процесс занимает порядочно времени), я хочу выводить пользователю сообщение что архив временно недоступен, для того чтобы интерфейс у юзера не подвисал. Первое что приходит в голову - проверить блокировку таблицы. Вот такая задачка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2005, 15:34:51 |
|
||
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
Почему бы не использовать InnoDB и не блокировать таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2005, 16:03:38 |
|
||
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
DocAlПочему бы не использовать InnoDB и не блокировать таблицу? Во первых есть печальный опыт использования InnoDB, таблицы пару раз сыпались. Во вторых, производительность. В третьих если я в одном процессе заблокирую InnoDB таблицу - есть ли способ посмотреть состояние блокировки из другого процесса, а не нарватся на саму блокировку и "подвиснуть" до ее окончания? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2005, 16:07:41 |
|
||
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
Можно создать простенькую таблицу status с одним полем int(1), которое и будет показывать состояние блокировки главной таблицы (что-то типа "критической секции" из параллельного программирования). Минус состоит в том, что необходимо будет перед каждым обращением к основной таблице просматривать ее состояние, но это уже вопрос реализации. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2005, 16:37:37 |
|
||
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
заглянувшийМожно создать простенькую таблицу status с одним полем int(1), Я об этом тоже думал. Но тут возможны нюансы. Скажем установка флага произойдет сразу после проверки, и процесс нарвется на блокировку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2005, 16:43:27 |
|
||
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
temofey заглянувшийМожно создать простенькую таблицу status с одним полем int(1), Я об этом тоже думал. Но тут возможны нюансы. Скажем установка флага произойдет сразу после проверки, и процесс нарвется на блокировку. Баг окажется в том, что клиент, который поставил блокировку - сдох, а статус остался и никто в нее не влезет. Логично в принципе, но я это делал косвенным способом. Щаз опишу. Процессы, которые выполняются автоматически по расписанию логируются влодь до конкретного задания в пачке. В лог идет датавремя начала и конца операции. Автоматический модуль если его увалили сруки при повторном запуске закроет все незакрытые операции в логе. Клиенту остается только поискать в логах операцию сегодня и сейчас и выполняется ли она. В принципе это совмещает понятие статуса, только придает задаче несколько осмысленный вид. Типа 2 в 1. Если нравитсо - делай так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2005, 19:38:05 |
|
||
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
Ну, знаете ли, с точки зрения "сыпаться" InnoDB понадёжней будут. И кто вас заставляет блокировать всю таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2005, 19:48:44 |
|
||
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
DocAlНу, знаете ли, с точки зрения "сыпаться" InnoDB понадёжней будут. И кто вас заставляет блокировать всю таблицу? Блокируется таблица, как не странно я на это нарвался тоже MyISAM. Для скорости заливки и удаления MyIsam быстрее работают чем InnoDB, тоже из практики. Бенчи однако другое на сайтах показывают на innodb.com Кстати блокироки на InnoDB тоже табличные, если в настройке не поставишь сам строчные. Насчет надежности - согласен. InnoDB на практике понадежней оказались. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2005, 19:55:16 |
|
||
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
В том-то и дело, что _МОЖНО_ поставить построчную блокировку. И скорость вставки у 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2005, 20:16:56 |
|
||
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
DocAlВ том-то и дело, что _МОЖНО_ поставить построчную блокировку. Чтото мне подсказывает, что для 5 млн записей построчная блокировка будет подобна смерти :-) Насчет надежности - согласен. InnoDB на практике понадежней оказались. Я два раза в разных конфигурация пробовал переходить на InnoDB, и в обоих случаях на второй/третий день таблицы сыпались. Уж не знаю в чем причина, но факт остаюется фактом. Причем сыпались так основательно что восстановлению не подлежали. MyISAM таблицы пару раз сыпались тоже, из за непредвиденных ребутов, но они хоть восстанавливались нормально. могут быть полезны: IS_FREE_LOCK(str) IS_USED_LOCK(str) А вот это, похоже, то что нужно. Я так понял что с помощью этих функций можно создовать абсрактные именованные блокировки, которые не привязанны к никаким физическим обьектам базы данных. Я правильно понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2005, 11:22:10 |
|
||
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
temofey DocAlВ том-то и дело, что _МОЖНО_ поставить построчную блокировку. Чтото мне подсказывает, что для 5 млн записей построчная блокировка будет подобна смерти :-) Гм, на основании чего вы так думаете? Насчет надежности - согласен. InnoDB на практике понадежней оказались. Я два раза в разных конфигурация пробовал переходить на InnoDB, и в обоих случаях на второй/третий день таблицы сыпались. Уж не знаю в чем причина, но факт остаюется фактом. Причем сыпались так основательно что восстановлению не подлежали. MyISAM таблицы пару раз сыпались тоже, из за непредвиденных ребутов, но они хоть восстанавливались нормально. Не замечал такого, сколько пользуюсь InnoDB, вы уверены, что с железом всё в порядке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2005, 12:39:16 |
|
||
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
[quot DocAlГм, на основании чего вы так думаете? [/quot ] Ну если удаление само по себе довольно дорогое удовольствие, то если еще и блокировать отдельные записи, то выйдет ну никак не быстрее. Не замечал такого, сколько пользуюсь InnoDB, вы уверены, что с железом всё в порядке? Ситуация возникакл на разных машинах, под разными ОС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2005, 16:09:20 |
|
||
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
Гм. Вообще, чем больше записей в таблице, тем большее значение играет тот фактор, что при row-level блокировке с остальными записями можно работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2005, 16:12:33 |
|
||
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
DocAlГм. Вообще, чем больше записей в таблице, тем большее значение играет тот фактор, что при row-level блокировке с остальными записями можно работать. На практике я столкнулся с тем, что при load data infile происходит блокировка на уровне таблицы и с хаписями работать нельзя, это для MyIsam, может я чего-то не понял, но row-level применить в этой операции не удалось... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2005, 16:18:15 |
|
||
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
InnoDB поддерживает row-level (точнее, index entry-level) блокировки, BDB page-level, а MyISAM только блокировки уровня таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2005, 16:24:16 |
|
||
|
Подскажите как определить факт блокировки таблицы
|
|||
|---|---|---|---|
|
#18+
DocAlInnoDB поддерживает row-level (точнее, index entry-level) блокировки, BDB page-level, а MyISAM только блокировки уровня таблицы. Это я тоже знаю, у афтара MyIsam. Но как обучающее замечание - поддерживаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2005, 16:26:05 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=33367669&tid=1853463]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
483ms |
get topic data: |
16ms |
get forum data: |
4ms |
get page messages: |
73ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 833ms |

| 0 / 0 |
