Программирование >>  Oracle 

1 ... 16 17 18 [ 19 ] 20 21 22 ... 469


случая, когда индекс скорее всего не будет использоваться (даже если 99,9 процентов запросов будут содержать конструкцию WHERE x < 50).

Кроме того, я обнаружил, что, хотя установка CURSORSHARING = FORCE обеспечивает намного большую скорость работы, чем повторный анализ и оптимизация множества одинаковых запросов как уникальных, это все равно медленнее, чем выполнение запросов, где связываемые переменные используются изначально. Это происходит не из-за неэффективности механизма совместного использования кода курсора, а из-за неэффективности самой программы. В главе 10 мы рассмотрим, как разбор операторов SQL может влиять на производительность в целом. Во многих случаях приложение, не использующее связываемые переменные, также не обеспечивает эффективного анализа и повторного использования курсоров. Поскольку в приложении предполагается уникальность каждого запроса (так как для каждого из них создается уникальный оператор), то и курсор в нем не будет использоваться более одного раза. Факт в том, что если программист использует связываемые переменные, то он зачастую также разбирает запрос один раз и затем использует многократно. Именно затраты ресурсов на повторный разбор приводят к наблюдаемому снижению производительности.

Итак, важно помнить, что просто добавление параметра инициализации CURSORSHARING = FORCE не всегда позволяет решить проблемы. Могут даже возникнуть новые. Во многих случаях параметр CURSOR SHARING - действительно полезное средство, но это не панацея. Для хорошо продуманного приложения он не нужен. В долгосрочной перспективе обоснованное использование связываемых переменных (и при необходимости - констант) - наиболее правильно.

Даже если есть соответствующие параметры, которые можно установить на уровне базы данных, а их пока немного, проблемы одновременного доступа и неэффективных запросов (неудачно сформулированных или вызванных неудачной организацией данных) нельзя решить только установкой параметров сервера. Для решения этих проблем необходимо переписать приложение (а зачастую и изменить его архитектуру). Перенос файлов данных с одного диска на другой, изменение количества блоков, читаемых подряд одной операцией ввода, и другие настройки на уровне базы данных часто мало влияют на общую производительность приложения. Они никак не дадут ускорения в 2, 3, ... N раз, необходимого для достижения приемлемой скорости работы приложения. Как часто требуется ускорить работу приложения на 10 процентов? Если надо ускорить работу на 10 процентов, обычно никто вообще не поднимает вопрос об этом. Пользователи начинают жаловаться, когда, по их мнению, скорость надо увеличить раз в пять. Однако повторяю: вы не увеличите скорость работы в пять раз за счет переноса файлов данных на другие диски. Это можно сделать только путем изменения приложения, например, сократив объем ввода/вывода.

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



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

Взаимоотношения АБД и разработчиков

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

Разработчик не обязан знать, как устанавливать и конфигурировать программное обеспечение. Этим должен заниматься АБД и, возможно, системный администратор. Настройка Net8, запуск программы прослушивания, конфигурирование режима MTS, организация пула подключений, установка СУБД, создание базы данных и т.д. возлагаются на АБД и системного администратора.

Не обязан разработчик также уметь настраивать операционную систему. Лично я обычно предлагаю сделать это системным администраторам. Разработчик приложений баз данных должен быть квалифицированным пользователем соответствующей операционной системы, но нельзя требовать от него знания тонкостей ее настройки.

Пожалуй, одной из основных забот АБД является резервное копирование и восстановление базы данных, и я считаю это обязанностью исключительно АБД. А вот знать принцип работ и использования сегментов отката и журналов повторного выполнения разработчик должен. Знать, как выполнить восстановление табличного пространства по состоянию на определенный момент времени разработчику необязательно. Знание того, что это в принципе возможно, может пригодиться, но делать это самостоятельно вам не придется.

Настройка на уровне экземпляра базы данных, определение оптимального значения параметра SORT AREA SIZE - этим обычно занимается АБД. Бывают ситуации, когда разработчику необходимо изменить ряд параметров сеанса, но за параметры уровня базы данных отвечает АБД. Обычно база данных поддерживает приложения нескольких разработчиков, поэтому только АБД, занимающийся поддержкой всех приложений, может принять правильное решение.

Выделение пространства на диске и управление файлами данных - обязанность АБД. Разработчики должны оговорить необходимый объем пространства (сколько им предположительно потребуется), но остальное должны делать АБД и системный администратор.

Итак, разработчики могут не знать, как запустить СУБД, но должны уметь работать в ней. Разработчик и АБД совместно решают разные части одной головоломки. АБД связывается с разработчиком, заметив, что запросы потребляют слишком много ресурсов, а разработчик обычно обращается к АБД когда не знает, как ускорить работу системы



(вот когда занимаются настройкой экземпляра - когда приложение полностью настроено).

Конечно, в зависимости от среды разработки возможны варианты, но мне нравится делить обязанности. Хороший разработчик обычно - очень плохой АБД, и наоборот. У них разные навыки и опыт, а также, по моим наблюдениям, разное устройство ума и личностные характеристики.

Резюме

Мы в общих чертах рассмотрели, почему необходимо знать используемую СУБД. Приведенные примеры - не уникальны, подобное происходит на практике каждый день. Давайте кратко повторим ключевые моменты. Если вы разрабатываете ПО для СУБД Oracle:

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

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

Не воспринимайте СУБД как черный ящик, устройство которого понимать не обя-

зательно. СУБД - самая важная часть большинства приложений. Ее игнорирование приводит к фатальным последствиям.

Не изобретайте велосипед. Я встречал разработчиков, попавших в трудное положение не только технически, но и на личном уровне из-за незнания возможностей СУБД Oracle. Это происходило, когда оказывалось, что реализуемые ими в течение нескольких месяцев функции на самом деле давно встроены в СУБД.

Решайте проблемы как можно проще, максимально используя встроенные возможности СУБД Oracle. Вы немало заплатили за это.

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



1 ... 16 17 18 [ 19 ] 20 21 22 ... 469

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика