Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

mySQL блокировка таблиц.

4
05 января 2002 года
mike
3.7K / / 01.10.2002
Тут такая проблема

Есть таблица, в которую все время что-то пишут (иногда более 50 раз в секунду). Естественно размер быстро растет.

Ежедневно, точнее еженочно, старые записи из талицы удаляются. Удаление занимает некоторое время, на которое таблица блокируется для записи. Все пишущие клиенты выстраиваются в очередь, и через пару секунд мы получаем To many connections.

Удаление ни как не затрагивает добавляемые записи, нельзя ли как-то ускорить удаление, или сделать так, чтобы таблица не блокировалась.

P.S. На другой SQL сервер переходить не предлагать, и без вас знаю.

[ Это Сообщение было отредактировано mike в 2002-01-05 1444 ]
372
05 января 2002 года
Flying
312 / / 20.09.2000
Цитата:

On 2002-01-05 1444, mike wrote
Тут такая проблема

Есть таблица, в которую все время что-то пишут (иногда более 50 раз в секунду). Естественно размер быстро растет.

Ежедневно, точнее еженочно, старые записи из талицы удаляются. Удаление занимает некоторое время, на которое таблица блокируется для записи. Все пишущие клиенты выстраиваются в очередь, и через пару секунд мы получаем To many connections.

Удаление ни как не затрагивает добавляемые записи, нельзя ли как-то ускорить удаление, или сделать так, чтобы таблица не блокировалась.

P.S. На другой SQL сервер переходить не предлагать, и без вас знаю.



Жаль, последняя фраза удерживает меня от первой мысли, пришедшей мне в голову

Если уж нужен именно MySQL то можно попытаться предложить следующие пути решения

1. Производить удаление почаще (например раз в час). Тогда время, затрачиваемое на него будет значительно меньше и сократит риск подобной ситуации.

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

- делаешь дополнительно 2 таблицы. Одна из них - полная копия (по структуре) той таблицы в которую ты так интенсивно пишешь (назовем ее SHADOW). Вторая - всего лишь одна строчка (назовем ее CONFIG).

- вводишь понятие "активной таблицы", имя которой будет храниться у тебя в таблице CONFIG (той, которая из одной строчки). Любой, кто захочет записать что-то в таблицу, должен будет сначала взать имя "активной" таблицы из таблицы CONFIG и использовать его при создании запроса.

- Процесс, занимающийся удалением информации из таблицы делает это в 5 этапов
1. UPDATE CONFIG SET ACTIVE_TABLE='SHADOW'
2. DELETE FROM LOG WHERE ....
3. UPDATE CONFIG SET ACTIVE_TABLE='LOG'
4. <перенос данных из SHADOW в LOG>
5. DELETE FROM SHADOW

Должно работать. Хотя и появляется дополнительный запрос, но время его выполнения ничтожно, так что на общей производительности системы не скажется.

P.S. Хех, и на какие извращения идут люди, продолжная тем не менее упорно использовать это жалкое подобие нормального SQL сервера...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог