Для чего используется на практике уровень изоляции SERIALIZABLE?
Обычно используется при выполнении сложных запросов, для построения отчетов, где необходима точность вычислений и данные в базе постоянно изменяются.
Например, отчет по платежам строится час, один из запросов вычисляет итоговую сумму, другие запросы вычисляют подытоги; если таблица платежей изменится, поступают новые платежи, тогда цифры итогов и подытогов разойдутся, не будут совпадать. В этом случае целесообразно использовать режим SERIALIZABLE, чтобы данные ко времени начала построения отчета не отличались от данных к окончанию построения отчета.
При работе с уровнем я получаю ошибку ORA-8177, почему так происходит и как избежать данной ошибки?
Данная ошибка возникает при изменении данных одной таблицы разными сессиями в режиме SERIALIZABLE.
Уровень изоляции SERIALIZABLE захватывает слот в списке заинтересованных транзакций. Если ORACLE-слот недоступен, то возникает ошибка ORA-8177. Доступные слоты ITL контролируются параметрами INITRANS и MAXTRANS, которые задаются при создании таблицы.
Попробуйте увеличить параметры INITRANS и MAXTRANS и пересоздать таблицы, с которыми работает сессия SERIALIZABLE.
Другие СУБД поддерживают уровень изоляции SERIALIZABLE?
MS SQL поддерживает данный уровень изоляции, MYSQL, PostgreSQL поддерживают в ограниченном режиме, этот момент необходимо уточнить в документации к этим СУБД.
Какие еще бывают уровни изоляции?
Использую материал из Википедии.
Read unCOMMITted (чтение незафиксированных данных) — низший (первый) уровень изоляции. Он гарантирует только отсутствие потерянных обновлений. Если несколько параллельных транзакций пытаются изменять одну и ту же строку таблицы, то в окончательном варианте строка будет иметь значение, определенное всем набором успешно выполненных транзакций. При этом возможно считывание не только логически несогласованных данных, но и данных, изменения которых еще не зафиксированы.
READ COMMITTED (чтение фиксированных данных). Большинство промышленных СУБД, в частности Microsoft SQL Server, PostgreSQL и ORACLE, по умолчанию используют именно этот уровень. На этом уровне обеспечивается защита от чернового, «грязного» чтения, тем не менее в процессе работы одной транзакции другая может быть успешно завершена и сделанные ею изменения зафиксированы. В итоге первая транзакция будет работать с другим набором данных.
REPEATABLE READ (повторяемость чтения) — уровень, при котором читающая транзакция «не видит» изменения данных, которые были ею ранее прочитаны. При этом никакая другая транзакция не может изменять данные, читаемые текущей транзакцией, пока та не окончена.
Контрольные вопросы и задания для самостоятельного выполнения
1. Повторите материалы данного шага.
2. Объясните, как работает сессия при уровне изоляции SERIALIZABLE.
3. Объясните, как используется режим SERIALIZABLE на практике.
4. Объясните причину ошибки ORA-8177.
Шаг 85. Материализованные представления
Материализованные представления — это объект базы данных, который содержит результат выполнения запроса. Отличие материализованных представлений от обычных представлений в том, что рассчитанные данные в материализованных представлениях статичны, физически располагаются в табличном пространстве и обновляются по заданному алгоритму.
Материализованные представления используются при построении отчетности и позволяют ускорить построение отчетов с помощью запросов SQL в несколько десятков раз, позволяя за считаные секунды оперировать миллионами записей.
Также использование материализованных представлений позволяет заранее вычислить подытоги финансовых операций при построении отчетности, что многократно увеличивает производительность.
Материализованные представления появились в арсенале средств управления данными в базе данных ORACLE, начиная с ORACLE 8i. До этого подобные специальные конструкции назывались SNAPHSHOT. В материализованных представлениях предварительно вычисляются и сохраняются результаты запроса к базе данных, в этом запросе при желании могут быть использованы соединения, агрегирования, результаты сложных математических расчетов.
Создание материализованного представления.
Синтаксис:
Рассмотрим некоторые важные конструкции оператора CREATE MATERIALIZED VIEW.
BUILD OPTION может принимать следующие значения:
Читать дальше
Конец ознакомительного отрывка
Купить книгу