- •Основные функции субд:
- •По модели данных:
- •Иерархические (Иерархической базой данных является файловая система, состоящая из корневого каталога, в котором имеется иерархия подкаталогов и файлов).
- •Сетевые (Сетевые базы данных подобны иерархическим, за исключением того, что в них имеются указатели в обоих направлениях, которые соединяют родственную информацию).
- •По степени распределённости
- •Локальные субд (все части локальной субд размещаются на одном компьютере)
- •Распределённые субд (части субд могут размещаться на двух и более компьютерах).
- •Различные представления о данных в базах данных:
- •Ограничения не-Null Ограничение не-null просто говорит, что колонка не должна содержать значение null. Пример синтаксиса:
- •2. Определение структур базы данных (ddl)
- •3. Манипуляция данными (dml)
- •4. Отбор данных (dql)
- •5. Язык управления данными (dcl)
- •6. Команды администрирования данных
- •7. Команды управления транзакциями
- •14.Запись sql-операторов
- •15.Типы данных языка sql, определенные стандартом
- •16.Основные команды языка ddl
- •17.Основные команды языка dml
- •18.Оператор выбора select
- •19.Применение агрегатных функций и вложенных запросов в операторе выбора
- •20. Операторы манипулирования данными
- •21.Физическая организация бд: файлы, записи, блоки.
- •23.Организация файла бд в виде кучи. Эффективность таких файлов.
- •24.Хешированные файлы: бакет, каталог бакетов, дополнительный каталог бакетов, выбор хеш-функции. Операции над хешированными файлами.
- •25.Сравнение эффективности хешированных файлов и файлов, организованных в виде кучи. Причины снижения эффективности хешированных файлов.
- •26.Динамическое хеширование. Операции над динамически хешированными файлами.
- •27.Последовательная организация файлов. Операции добавления и удаления записей в последовательных файлах, блок переполнения.
- •28. Индексированные файлы: инициализация, поиск.
- •29. Индексированные файлы: операции вставки и удаления записей.
- •30.Разреженные и плотные индексы. Индексация по нескольким полям.
- •Составные индексы
- •31.Эффективность операций в индексированных файлах при различной организации поиска.
- •32.B-деревья: принципы построения, операция поиска.
- •33.В-деревья: операции добавления и удаления записей.
- •34.Эффективность организации файлов в виде в-дерева.
- •35.Технология кластеризации бд.
- •36.Технология сжатия информации в бд.
- •37.Основные шаги обработки запросов.
- •Можно транслировать в выражение
- •38.Статистика бд.
- •40.Алгоритмы выполнения селекции с одним условием сравнения: размер селекции, использование первичного индекса, использование вторичного индекса.
- •41.Размер комплексной селекции при конъюнкции и дизъюнкции условий.
- •43.Алгоритм внешней сортировки.
- •44.Размер операции соединения. Алгоритм соединения, основанный на двух вложенных циклах.
- •45.Алгоритмы выполнения соединения: поблочное соединение, усовершенствование алгоритма поблочного соединения, соединение по индексу.
- •46.Алгоритм соединения слиянием.
- •47.Алгоритмы выполнения операций с множествами, проекции, внешнего соединения.
- •48.Два подхода к вычислению выражений при обработке запросов.
- •50.Виды оптимизаторов: итеративный, основанный на стоимостях и эвристический.
- •51.Понятие транзакции. Свойства acid транзакций.
- •52.Аномалии параллельных транзакций: потерянное обновление, зависимость от нефиксированных результатов, несогласованная обработка.
- •53.Понятие плана параллельного выполнения транзакций. Последовательные, непоследовательные и неупорядоченные планы.
- •54.Конфликтное упорядочивание планов и упорядочивание планов по просмотру.
- •55.Блокировки как механизм управления параллельными транзакциями: понятие блокировки, хранение блокировок, виды блокировок.
- •56.Работа транзакций при использовании механизма блокировок. Предотвращение аномалий при использовании блокировок.
- •57.Понятие протокола. Двухфазный протокол.
- •58.Проблема каскадного отката в параллельных транзакциях. Строгий двухфазный протокол.
- •59.Взаимная блокировка параллельных транзакций.
- •60.Использование метода временных отметок для управления параллельными транзакциями.
- •61.Оптимистические технологии управления транзакциями.
- •63.Уровни изоляции параллельных транзакций.
- •64.Восстановление бд: возможные причины отказов, механизм резервного копирования, журнал транзакций, создание контрольных точек.
- •65.Методы восстановления бд: восстановление с резервной копии, метод «redo», метод теневых страниц.
- •66.Улучшенные модели транзакции: проблемы классических моделей транзакций, модель вложенных транзакций, модель хроник.
- •67.Технология raid. Уровни raid.
- •68.Oltp- технологии и хранилища данных. Хранилища данных.
- •Понятие хранилища данных.
- •Проблемы хранилищ данных.
- •Архитектура хранилища данных
- •Проектирование схемы бд для хранилища данных.
- •Olap-технологии.
52.Аномалии параллельных транзакций: потерянное обновление, зависимость от нефиксированных результатов, несогласованная обработка.
Управление параллельностью – это процесс организации одновременного выполнения в БД различных операций, гарантирующий исключение их взаимного влияния друг на друга.
Почему необходимо управлять параллельностью?
Важнейшей целью организации БД является обеспечение параллельного доступа нескольких пользователей к общим данным. Такой доступ осуществляется достаточно просто, если все пользователи читают данные, но как только один из параллельно обратившихся пользователей начинает изменять информацию возникает взаимное влияние процессов друг на друга. Обеспечивать же совместный доступ необходимо, так как это повышает общую производительность системы.
Существует три основных проблемы, которые могут иметь место при параллельном выполнении транзакций.
1 Проблема потерянного обновления. Эта проблема проявляется в том, что результаты успешно завершенной операции обновления одной транзакции перекрываются результатами выполнения другой транзакции.
время |
T1 |
T2 |
значение элемента f |
t1 |
|
begin tran |
100 |
t2 |
begin tran |
read f |
100 |
t3 |
read f |
f:=f+100 |
100 |
t4 |
f:=f-10 |
write f |
200 |
t5 |
write f |
commit |
90 |
t6 |
Commit |
|
90 |
В данном случае элемент – значение поля некоторого кортежа.
Транзакции Т1 и Т2 начинаются практически одновременно и считывают одинаковое значение элемента f. Одна добавляет к значению элемента 100 и записывает результат, а вторая вычитает 10 и также записывает результат. Таким образом значение элемента равно 90. Если бы транзакции выполнялись последовательно, то значение поля было бы равно 190. То есть явное влияние транзакций друг на друга. Избежать такой проблемы можно, если запретить Т1 читать элемент f до тех пор, пока Т2 не запишет его значения.
2 Проблема зависимости от нефиксированных результатов. Проблема возникает, если одна транзакция получит доступ к промежуточным результатам выполнения другой транзакции до того, как они будут зафиксированы в БД.
время |
Т1 |
Т2 |
значение элемента f |
t1 |
|
begin tran |
100 |
t2 |
|
read f |
100 |
t3 |
|
f:=f+100 |
100 |
t4 |
begin tran |
write f |
200 |
t5 |
read f |
... {т.е Т1 читает после записи Т2} |
200 |
t6 |
f:=f-10 |
rollback |
100 |
t7 |
write f |
|
190 |
t8 |
commit |
|
190 |
Если бы транзакции выполнялись бы последовательно, то значение элемента f было бы равно 90. Подобную проблему можно устранить, если запретить Т1 читать значение элемента f до того, как Т2 будет зафиксирована или отменена.
3 Проблема несогласованной обработки (неповторяемого чтения). Эта проблема возникает, когда одна транзакция только считывает элементы, но вторая в это время изменяет их значения. (T1переводит деньги с f1 на f3, а Т2 считает общую сумму на счетах f1, f2, f3)
время |
Т1 |
Т2 |
f1 |
f2 |
f3 |
sum |
t1 |
|
begin tran |
100 |
50 |
25 |
|
t2 |
begin tran |
sum:=0 |
100 |
50 |
25 |
0 |
t3 |
read f1 |
read f1 |
100 |
50 |
25 |
0 |
t4 |
f1:=f1-10 |
sum:=sum+f1 |
100 |
50 |
25 |
100 |
t5 |
write f1 |
read f2 |
90 /*уТ1 100*/ |
50 |
25 |
100 |
t6 |
read f3 |
sum:=sum+f2 |
90 |
50 |
25 |
150 |
t7 |
f3:=f3+10 |
|
90 |
50 |
25 |
150 |
t8 |
write f3 |
|
90 |
50 |
35 |
150 |
t9 |
commit |
read f3 |
90 |
50 |
35 |
150 |
t10 |
|
sum:=sum+f3 |
90 |
50 |
35 |
185 |
t11 |
|
Commit |
90 |
50 |
35 |
185 |
Таким образом, сумма получилась не верной, не смотря на то, что перевод осуществлялся между теми же счетами, по которым считалась сумма. В данном случае БД осталась в корректном состоянии, но пользователь получил некорректные данные.
Избежать этой проблемы можно запретив чтение данных, пока их не запишет другая транзакция, даже если первая из них – транзакция, только читающая данные.