Рефераты | Рефераты по информатике, программированию | Версионность в Yukon
Версионность в Yukon
Категория реферата: Рефераты по информатике, программированию
Теги реферата: курсовые работы скачать бесплатно, защита дипломной работы
Добавил(а) на сайт: Скуратов.
И, что характерно, блокировка произойдет на той же
самой записи. Иными словами, в отсутствии индексов Yukon осуществляет поиск по
таблице как самый обычный блокировочник, даже при уровне изоляции snapshot.
Версионник в данной ситуации сначала сканирует всю таблицу обычным версионным
запросом, выясняя нужные записи, а потом обращается с обновлением только к тем, которые подходят под условие выборки, поэтому подобного там не происходит.
Yukon же сканирует таблицу, накладывая блокировку обновления на каждую запись, и снимая ее, если запись не удовлетворяет условию выборки, или конвертируя в
эксклюзивную, если удовлетворяет. Таким образом, даже если заблокированная
запись не удовлетворяет условию выборки обновляющего оператора
snapshot-транзакции, в случае отсутствия индексов транзакция все равно
застрянет на блокировке.
Результат подобного ожидания snapshot-транзакции
вполне закономерен. Если блокирующую транзакцию зафиксировать, то
snapshot-транзакция будет отменена, несмотря на то, что формально измененная
запись ни до, ни после запроса под условия выборки не попадала. Оборачивается
это тем, что если в момент изменения записей в таблице без индексов из
snapshot-транзакции будет изменена любая запись, то snapshot-транзакция не
выполнится.
Судя по всему, сделать согласованное неблокирующее
сканирование при обновлении записей – задача нетривиальная. Поэтому все сделано
единообразно, «по-блокировочному». С одной стороны, подобное блокировочное
сканирование обещает довольно мрачные перспективы попыткам записи из
snapshot-транзакций в неиндексированные таблицы. Но, с другой стороны, это
предотвращает некоторые экзотические случаи фантомов, которые пропускает
классический snapshot.
Serializable
Несмотря на то, что версионный snapshot помогает
избавиться от большинства побочных эффектов, связанных с параллельным
выполнением транзакций, вероятность появления некоторых феноменов по-прежнему
остается. Чтобы избавиться от подобных эффектов, при работе с классическим
версионником и некоторыми гибридами приходится предпринимать дополнительные
меры в виде фиктивных изменений или специальных блокировок некоторых записей.
Но Yukon, как и предыдущие версии SQL Server от
Microsoft, поддерживает уровень изоляции serializable, который по определению
не допускает никаких феноменов. По механизму этот уровень изоляции является
чисто блокировочным и никакие версионные запросы, даже на чтение, здесь не
поддерживаются, если конечно, не давать специальных указаний оптимизатору.
Заключение
Новая функциональность, безусловно, окажется очень
полезной. Самый заметный эффект – это отсутствие блокировок между читающими и
пишущими запросами. То есть читающие запросы не блокируют пишущие, и наоборот.
Собственно, вся версионность ради этого и затевалась.
У чистых блокировочников, каковым до недавнего времени
являлся и Microsoft SQL Server, при наступлении того печального момента, когда
читающие запросы начинают довольно сильно конфликтовать с пишущими, используется стандартный архитектурный прием. Механизм работы с данными делится
на две составляющие, OLAP и OLTP. OLTP реализует работу пишущих транзакций на
относительно небольшом объеме актуальных данных, а OLAP содержит основные
данные, доступные только для чтения, причем в силу того, что каждый механизм
оптимизирован исключительно под свои задачи, подобное решение, как правило, оказывается очень эффективным. При этом совершенно необязательно сразу строить
большую систему и покупать дополнительное оборудование. Если задача не требует
излишней громоздкости, то начинается все обычно с построения промежуточных
агрегирующих таблиц и материализованных представлений, в дальнейшем возможен
перенос одной из составляющих в отдельную базу, экземпляр сервера и, наконец, если в том возникнет необходимость, на отдельный сервер или даже группу
серверов.
Может показаться, что класс задач, для которых реально
нужна версионность, достаточно узок. С одной стороны, использование
версионности имеет смысл, если в блокировочнике конфликт читающих и пишущих
запросов начинает оказывать заметное влияние на производительность. Но с другой
стороны, при дальнейшем увеличении нагрузки, производительность версионного
механизма довольно быстро начнет снижаться из-за частых обновлений по причине
больших накладных расходов на поддержку версионности, она ведь тоже обходится
не даром.
Но тут можно вспомнить, что существуют задачи, где
необходимо выполнять большое количество малопрогнозируемых запросов (ad-hoc
queries). В этом случае конфликты читающих и пишущих запросов выходят на первое
место, поскольку в подобной ситуации очень высока вероятность возникновения
взаимоблокировок.
Также стоит заметить, что, несмотря на всю полезность
агрегатных таблиц, они обладают одним большим недостатком, сильно сужающим
область их применения. Если в исходной таблице активность запросов можно
физически разнести по разным страницам данных, то в агрегатной таблице большое
количество изменений создаст совершенно ненужный ажиотаж в очень маленьком
объеме.
Немаловажно также и то, что писать приложения для БД с
поддержкой версионности попросту удобнее. Отсутствие необходимости отслеживать
возможные конфликты читающих и пишущих запросов здорово облегчает жизнь, особенно не слишком опытным разработчикам, и повышает масштабируемость системы
(хотя в этом случае выше вероятность появления некоторых неочевидных эффектов).
И наконец, введенная поддержка версионности позволит
легче адаптироваться к новому серверу тем, кто привык работать с подобной
функциональностью.
Преимущества версионности.
Рекомендуем скачать другие рефераты по теме: контрольная работа по математике класс, контрольные работы по математике.