Начиная с версии MySQL 4.0.5, появилась возможность менять уровни изолированности транзакций с помощью переменной TRANSACTION ISOLATION LEVEL. По умолчанию MySQL устанавливает уровень изолированности REPEATABLE READ. Его можно отменить с помощью команды SET.
Листинг 12.15.
mysql> SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
Query OK, 0 rows affected (0.00 sec)
Текущее значение этой переменной определяется с помощью быстрого оператора SELECT.
По умолчанию значение переменной TRANSACTION ISOLATION LEVEL устанавливается для каждого сеанса отдельно, но ее можно задать и глобально для всех сеансов с помощью ключевого слова GLOBAL в командной строке SET.
Листинг 12.17.
mysql> SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
Query OK, 0 rows affected (0.00 sec)
Но для выполнения этой операции требуется привилегия SUPER. Способ получения этой (и других) привилегии подробно описан в главе 14, "Безопасность, управление доступом и привилегии". Это непосредственно касается системы управления доступом
MySQL.
Транзакции и производительность
Вследствие того, что при поддержке транзакции база данных должна работать в более напряженном режиме, чем база данных, транзакций не поддерживающая, т.к. ей необходимо изолировать сеансы различных пользователей друг от друга, вполне понятно, что это отражается на производительности системы. Удовлетворение других правил ACID, а особенно тех, которые направлены на обеспечение целостности баз данных при сбоях системы, для чего используются журналы транзакций, накладывает дополнительную нагрузку на системы, работающие с поддержкой транзакций. И MySQL не является исключением из этого правила - при прочих равных условиях таблицы MyISAM, не поддерживающие работу транзакций, работают значительно быстрее таблиц типа InnoDB и BDB, которые транзакции поддерживают. (Большей частью это зависит от типа запроса и взаимовлияния запросов. Совмещение операций чтения и записи способствует ускорению работы таблиц InnoDB, а таблицы MyISAM выигрывают у InnoDB при сканировании таблиц и больших операциях DELETE.)
Можно сказать, что если у вас нет иного выбора, чем использовать таблицы, работающие с транзакциями, у вас остается небольшой маневр для того, чтобы транзакции не перегружали систему.
Используйте небольшие транзакции
Хорошо известный принцип KISS (Keep It Simple, Stupid!) вполне применим и в сложном мире транзакций, потому что MySQL использует блокировку на уровне строк для предотвращения одновременного чтения разными транзакциями одной и той же записи базы данных с большой вероятностью его разрушения. Механизм блокировки на уровне строк предотвращает доступ к строке более чем одной транзакции, что не только предохраняет данные от разрушения, но и приводит к тому, что другим транзакциям приходится ожидать завершения работы транзакции, осуществляющей блокировку. Таким образом, если транзакция небольшая, это время ожидания будет совершенно незаметным. Однако при работе с большими базами данных и большим количеством сложных транзакций, длительное время ожидания, пока другие транзакции снимут блокировку, может существенно повлиять на производительность всей системы.
По этой причине хорошим "тоном" считается сохранение размера транзакций небольшим и ускорение выполнения ими изменений, чтобы другие транзакции, ожидающие своей очереди, при этом не испытывали больших задержек. На прикладном уровне с этой целью разработаны две общие стратегии.
Запусти меня
При запуске можно установить стандартный уровень изолированности. Для этого при запуске сервера mysqld используется специальный аргумент---transaction-isolation.
■ Ввод данных пользователем должен осуществляться до команды START TRANSACTION. Очень часто неопытные разработчики запускают транзакцию еще до получения полного набора значений, необходимого для нее. Другие транзакции, запущенные в это же время должны ждать своей очереди до тех пор, пока пользователь не введет все необходимые данные, вследствие чего прикладной процесс не обработает их, а затем запросит дополнительные данные и т.д. В однопользовательской среде такие задержки не имеют никакого значения, т.к. при этом другие транзакции не получают доступ к базе данных. Однако в многопользовательских системах задержка, вызванная одной транзакцией, может привести к волновому эффекту для всех других транзакций, ожидающих своей очереди, вызвав тем самым существенную деградацию производительности всей системы.
■ Попробуйте разбить большие транзакции на маленькие и выполнить их независимо друг от друга. Это приведет к ускорению выполнения каждой транзакции, освобождая тем самым большие системные ресурсы, которые в противном случае обслуживали бы систему.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
Все о MySQL. Изменение уровня изолированности транзакций
28-12-2009
<< Предыдущая статья | Следующая статья >> |
Все о MySQL. read committed | Все о MySQL. Выбор соответствующего уровня изолированности |