Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Раздел 6.doc
Скачиваний:
32
Добавлен:
05.06.2015
Размер:
278.53 Кб
Скачать

2.5.2. Производительность.

В современных системах используются два основных метода повышения производительности – распараллеливание алгоритмов и многопроцессорная обработка при помощи нитей.

Распараллеливание алгоритмов.

Одним из способов повышения производительности серверов баз данных является распараллеливание алгоритмов. Существует три типа распараллеливания, применимых к архитектуре сервера баз данных: параллельные операции ввода-вывода с диском, параллельные утилиты и параллельная обработка запросов. Параллельные операции ввода-вывода с диском позволят серверу эффективно использовать многомерные таблицы и разбиение таблиц. Поддержка физического разбиения таблиц особенно важна для параллельного ввода-вывода с диском, при правильной реализации существенно возрастает эффективность и управляемость ресурсами. Параллельные операции-утилиты (сортировка, построение индексов, загрузка, резервирование, восстановление) используют как параллельную обработку, так и параллельные обмена с диском, однако обычно распараллеливание допускает лишь небольшое число компонент.

В отличие от параллельных обменов и параллельных утилит, параллельная обработка запросов имеет гораздо более сложный вид. Обработка запроса обычно требует осуществления горизонтального параллелизма или вертикального параллелизма.

Если каждая из операций баз данных разработана таким образом, что она управляется запросом (т.е. подход потока данных), сервер может использовать параллелизм, одновременно выполняя разные операции баз данных. Например, операция, выбирающая записи по значению поля, может выполняться одновременно с операцией доступа к записям с диска и не должна ждать, пока все записи будут считаны. Аналогично, выбранные записи могут быть загружены для сортировки для начального разбиения в соответствии с ключом сортировки, пока выполняются операции выбора и доступа. Вдобавок к независимости реализации от степени параллелизма проблемно-ориентированный подход допускает прозрачное включение новых существенно параллельных алгоритмов. Это позволяет использовать современные достижения в области алгоритмов для увеличения производительности.

Этот подход, напоминающий конвейер команд в современных процессорах, называется вертикальным параллелизмом. Сочетание вертикального и горизонтального параллелизма увеличивает общую пропускную способность и уменьшает время отклика по сравнению с обычным последовательным подходом. Степень улучшения называется ускорением.

Многопроцессорная обработка с помощью нитей.

Метод обработки запросов пользователя, с которым связаны наименьшие накладные издержки, называется многопроцессорной обработкой с помощью нитей (отличается от моделируемой обработки). Нить как вариант процесса представляет собой управление контекстом, работающее под управлением одного процесса, он может быть либо порожден внутри процесса (например, сервер базы данных), либо средствами ОС. Переключатель контекста процесса уровня ОС – это более дорогое действие, чем переключатель уровня самой нити, так же как и операции создания и уничтожения процессов по сравнению с аналогичными операциями для нитей. В принципе, нити могут выполнять одновременные задания с помощью саморазмножения, создавая нити, похожие на подпроцессы. Поскольку ОС не требуется создавать, распределять или прерывать множественные процессы, накладные расходы многопроцессорных баз данных, использующие нити, будут ниже, чем для других архитектур.

Оптимизация.

Возможности оптимизатора запроса сервера базы данных в большей степени определяет способность реляционной СУБД эффективно выполнять множественную обработку данных. Особенно важна способность оптимизатора запросов использовать подходящие индексы, ограничивающие выделенные строки, и обрабатывать запросы, ссылающиеся на различные таблицы. Оптимизатор не должен быть чувствителен к синтаксису SQL. Он должен быть чувствителен к статистикам данных и распределениям значений данных; таки образом можно оценить ожидаемую стоимость обработки запросов и выбрать схему, отвечающую наименьшим издержкам.

Управление ресурсами.

Эффективное управление ресурсами состоит из двух частей: прозрачной поддержки соответствующих ресурсов и эффективного использования специальных ресурсов. Критически важной является прозрачная поддержка ресурсов. Например, при разработке приложения в архитектуре клиент-сервер разработчик не может (и не должен) делать предположения о том, как клиент и сервер будут обмениваться сообщениями. На разработку не должно влиять то, какие средства используются – сетевые или общей памяти; при разработке также нельзя ограничивать их использование.

Одним из наиболее важных ресурсов является память. Приложения реляционных СУБД используют память для поддержки состояния соединений, а также для кэширования запросов и результатов. Без эффективного управления общей памятью архитектура сервера баз данных не способна удовлетворить всем требованиям.

Параллельная обработка запросов.

Параллельная обработка запросов позволяет решить проблему низкой производительности для сложных запросов и объемных баз данных. Получая доступ и обрабатывая данные параллельно, параллельная обработка запросов может привести к существенному увеличению производительности для DSS и пакетной обработки. Такое увеличение производительности позволяет включать самые сложные запросы в транзакции читать/писать без ущерба целостности данных и изоляции транзакций. При подходящей величине времени отклика очереди DSS, которые были бы невозможны на традиционных системах, становятся возможными и не конкурируют разрушительным образом с приложениями OLTP.