|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
6.4 Оптимизация запросовОптимизация запросов, количество логических чтений, SET STATISTICS IO ON, хинты оптимизатора, OLE DB и ODBC, SET NOCOUNT OFF Вся работа с индексами обычна подчинена решению главной проблемы: как ускорить выполнение запросов к нашей базе данных? Тема эта сама по себе очень большая, ей посвящены специальные книги. Первый вопрос - как можно объективно измерить эффективность нашего запроса? Скорость выполнения здесь подходит не совсем, поскольку она зависит от состояния кэша, активности других пользователей и т.п. Главный параметр, который позволяет объективно оценить эффективность выполнения запросов - это количество логический операций чтения (то есть чтение без учета влияния кэша). На SQL Server просмотреть его можно при помощи Query Analyzer: вначале выполнить команду SET STATISTICS IO ON, а затем выполнить запрос. Для каждой таблицы будет показана информация о просмотренных экстентах, количестве логических, физических и упреждающих чтений. Наша задача - добиться, чтобы логических чтений было как можно меньше. Обычно это можно сделать: · изменением системы индексов; · использованием Optimizer Hints - когда план, генерируемый модулем Query Optimizer, нас не устраивает; · иногда неоптимальный план выполнения запроса генерируется по причине того, что не обновлена статистика в базе данных. Следует или включить автоматическое обновление статистики или регулярно выполнять эту операцию вручную. Оптимизация работы приложения, работающего с базой данных - это вопрос комплексный. Считается, что на 80 процентов производительность определяется архитектурой задачи, определенной разработчиком. На какие моменты есть смысл обращать внимание: · одна из самых распространенных причин неудовлетворительной производительности - в базе данных находятся лишние архивные данные, которые нужны только для небольшого количества отчетов, но не для текущей работы. Возможно, есть смысл разбить базу данных на текущую (OLTP) и архивную (Data Warehouse); · возможно, используется неоптимальный драйвер для подключения к источнику (например, OLE DB, как правило, работает намного быстрее ODBC); · очень большой выигрыш может дать переход с настольного ядра (Access, FoxPro, DBase и т.п.) на клиент-серверную систему (SQL Server, Oracle, IBM DB2), особенно с точки зрения экономии сетевого трафика; · при выполнении запросов к SQL Server всегда рекомендуется устанавливать параметр SET NOCOUNT ON - обычно достигается выигрыш порядка 10 процентов; · не следует забывать и про оптимизацию оборудования и операционной системы. В настоящее время существуют 64-разрядные системы, применение которых может дать большой выигрыш в скорости.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Получить учебные материалы по этому курсу
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||