SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.11.2010 04:00:59

Lioha
Участник
Зарегистрирован: 24.11.2010
Сообщений: 22

Лочится ли вся таблица при DROP PARTITION

На сервере стоит Windows 2003 x64 (64-х разрядная).
Стоит база данных mysql 5.01.53 64-х разрядная.

Есть таблиц логов xxxxx. Эта таблица партицирована помесячно используя LIST Partitioning на 12 партиций.
Сейчас идет 11 месяц и все данные пишутся и считываются из таблици xxxxx из партиции 11.
Если производить периодически чистку этой таблици от старых логов (например почистить логи за первый месяц Январь),
то нужно выполнить следующие действия

ALTER TABLE xxxxx DROP PARTITION mnth1;
затем
ALTER TABLE xxxxx ADD PARTITION (PARTITION mnth1 VALUES IN (1));

Вопрос: во время действий удаления и создания партиции 1 будет ли лочится вся таблица xxxxx и в том числе и текущая рабочая партиция 11 и клиенты работающие с данными за текущий 11 месяц повиснут. Или же будет залочена только неактуальная на текущий момент времени партиция 1, что не помешает работе с текущими данными в партиции 11.

Спасибо!

Неактивен

 

#2 25.11.2010 14:39:03

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Лочится ли вся таблица при DROP PARTITION

Любой DDL в MySQL блокирует всю таблицу целиком. Другое дело, что
конкретно эти операции выполняются достаточно быстро (время, необ-
ходимое для удаления и создания соответственно, файлов в ФС).

Неактивен

 

#3 25.11.2010 17:11:15

Lioha
Участник
Зарегистрирован: 24.11.2010
Сообщений: 22

Re: Лочится ли вся таблица при DROP PARTITION

Пару вопросов еще:

1. Можно сразу выполнять на рабочей базе эти 2 операции
ALTER TABLE xxxxx DROP PARTITION mnth1;
затем
ALTER TABLE xxxxx ADD PARTITION (PARTITION mnth1 VALUES IN (1));
и mysql сама залочит и разлочит таблицу или нужно обязательно сначала самому залочить таблицу xxxxx, а после вышеописанных команд разлочить ее?

2. Что в таком случае будет с поступившим запросом INSERT на всавку записи(записей) в партицию 11 во время блокировки таблицы, они отвергнутся и клиенту вернется ошибка что INSERT не прошел или же INSERT дождется разблокировки таблици xxxxx и обязательно выполниться, а клиент подвиснет немного на это время?

Неактивен

 

#4 25.11.2010 19:17:38

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Лочится ли вся таблица при DROP PARTITION

1. MySQL позаботится об этом сам.
2. Запросы будут отброшены. И, видимо, никак обойти это не получится.
С другой стороны, Вы же все равно теряете эти данные.

Неактивен

 

#5 25.11.2010 20:57:59

Lioha
Участник
Зарегистрирован: 24.11.2010
Сообщений: 22

Re: Лочится ли вся таблица при DROP PARTITION

....С другой стороны, Вы же все равно теряете эти данные....

Не совсем так. Сперва в базе в других таблицах производятся апдейты а затем, как результат совершенных действий (апдейтов), в таблицу логов xxxxx вставляется статистическая информация. Так вот если апдейты проходят, а в лог информация об этом не вставиться то будет не совсем хорошо.
Выходит партицирование таблиц не панацея от безболезненной(на горячую) очистки старых данных из таблицы логов.
Ранее, когда таблица была непартиционная, то отключали всех клиентов, транкейтили таблицу логов и снова запускали клиентов.
Я думал, что партицирование позволит производить очистку старых логов(старых партиций) без отключения клиентов, а выходит по сути дела что схема очистки даже одной партиции будет как и ранее - отключение клиентов, удаление и пересоздание партиции и запуск клиентов.

Выход наверное один - переходить на транзакционные таблицы. В таком случае если бы не прошел инсерт в таблицу логов то откатился бы и предыдущий апдейт данных в других таблицах.

Неактивен

 

#6 25.11.2010 21:55:54

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Лочится ли вся таблица при DROP PARTITION

Хм. Ну тогда

LOCK TABLES tablename WRITE;
ALTER TABLE tablename DROP PARTITION mnth1;
ALTER TABLE tablename ADD PARTITION ...;
UNLOCK TABLES;

Все потоки будут ждать завершения обеих задач.

Неактивен

 

#7 26.11.2010 02:20:20

Lioha
Участник
Зарегистрирован: 24.11.2010
Сообщений: 22

Re: Лочится ли вся таблица при DROP PARTITION

Да, спасибо, это поможет.
буду так использовать.

Неактивен

 

#8 26.11.2010 19:00:04

Lioha
Участник
Зарегистрирован: 24.11.2010
Сообщений: 22

Re: Лочится ли вся таблица при DROP PARTITION

Еще, мучающий вопрос.

если в базе на текущий момент времени выполняется INSERT в таблицу tablename
и я вручную выполняю команду LOCK TABLES tablename WRITE;
то эта блокировка дождется окончания уже начавшего(начавшихся если их было много в этот момент) свое выполнение оператора INSERT и только после этого заблокирует таблицу или же блокировка вступит в силу немедленно и приостановит или отбросит уже начавшиеся INSERT?

И интересует точно такая же формулировка вопроса, только вместо оператора INSERT, например, выпллняется долгий оператор SELECT делающий большую выборку. Как будет вышеописанный вопрос в отношении SELECT?

Неактивен

 

#9 26.11.2010 19:25:59

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Лочится ли вся таблица при DROP PARTITION

Будет ждать, разумеется — Вы же должны взять эксклюзивную блокировку.
И другие запросы, которые прийдут после того, как LOCK встанет на ожида-
ние — будут ждать, когда LOCK возьмет блокировку, а потом отпустит.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson