Регистрация
логин
пароль
Хостинг Реселлинг хостинга VPS - Хостинг Аренда серверов Dedicated server
Хостинг:

VPS - Хостинг:

Аренда серверов:

Dedicated server:


службы мониторинга серверов

www.megastock.ru

Z-Payment
Яндекс Деньги
Moneybookers
Payment Network
Юнистрим
Contact
Сбербанк России
MasterCard
VISA
Система CONTACT
Почтовый перевод
ВТБ 24
WIRE USD EURO
Дилеры Z-PAYMENT
SMS оплата
Терминалы КИВИ
Терминалы Мульти-кассы
Терминалы ComePay
Терминалы FreeCash

Регистрация  доменов. Хостинг

Сервисы:










Справочное руководство по MySQL

5.3.1 Как MySQL блокирует таблицы

5.3.1 Как MySQL блокирует таблицы

Описание различных методов блокировки дается в приложении, в разделе section E.4 Методы блокировки.

В MySQL все блокировки, кроме блокировок таблиц типов InnoDB и BDB, не создают тупиковых ситуаций. Это обеспечивается за счет того, что все необходимые блокировки всегда запрашиваются единожды в начале запроса и блокировка таблиц всегда происходит в одном и том же порядке.

В таблицах типа InnoDB устанавливается блокировка строк, а в таблицах типа BDB - блокировка страниц в процессе выполнения SQL-команд, а не в начале транзакции.

Метод блокирования, используемый в MySQL для блокировок записи (WRITE), работает следующим образом:

  • Если на данной таблице нет никаких блокировок, то на нее накладывается блокировка записи.
  • В противном случае запрос на данную блокировку ставится в очередь блокировок записи.

Метод блокирования, используемый в MySQL для блокировок чтения (READ), работает следующим образом:

  • Если на данной таблице нет блокировок записи, то на нее накладывается блокировка чтения.
  • В противном случае запрос на данную блокировку ставится в очередь блокировок чтения.

При освобождении текущей блокировки становится возможной следующая блокировка для потоков из очереди блокировок записи, затем для потоков из очереди блокировок чтения.

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

Чтобы обойти это в случае, когда для таблицы требуется выполнить много операций INSERT и SELECT, можно внести строки во временную таблицу и время от времени обновлять реальную таблицу записями из временной.

Для этого можно применить следующий код:

mysql> LOCK TABLES real_table WRITE, insert_table WRITE;
mysql> INSERT INTO real_table SELECT * FROM insert_table;
mysql> TRUNCATE TABLE insert_table;
mysql> UNLOCK TABLES;

В некоторых случаях, когда необходимо установить приоритеты извлечения данных, для команд INSERT, UPDATE или DELETE можно указывать опцию LOW_PRIORITY, а для команды SELECT - HIGH_PRIORITY. Тот же результат можно получить, запустив mysqld с --low-priority-updates.

Использование SQL_BUFFER_RESULT тоже способствует уменьшению времени блокировок таблиц. See section 6.4.1 Синтаксис оператора SELECT.

Можно также изменить блокировочный код в `mysys/thr_lock.c' - чтобы использовать только одну очередь блокировок. В этом случае блокировки записи и чтения будут иметь одинаковый приоритет, что может оказаться полезным для некоторых приложений.






Сервисы от Prime-Hosting.Ru:













Copyright © 2008-2010
Prime Hosting
Prime Hosting. Хостинг, VPS - Хостинг, Аренда серверов, dedicated serverPrime Hosting. Хостинг, VPS - Хостинг, Аренда серверов, dedicated server:
Хостинг Реселлинг хостинга VPS - Хостинг Аренда серверов Dedicated server