|
По материалам статьи Luis
Martin: How
to Identify Non-Active SQL Server Indexes Для администраторов баз данных регулярной задачей является просматривание баз данных и поиск различных путей увеличения их производительности. В то время как добавление новых или улучшение индексов базы данных является одним из основных путей повышения производительности, повышение производительности через удаление неиспользуюемых индексов или определение слишком больших индексов, которые потребляют много ресурсов SQL Server. Неиспользуемые индексы снижают производительность выполнения команд INSERT, UPDATE и DELETE, и приводят к лишним дисковым операциям. Поэтому, чем больше лишних индексов мы сможем удалить, тем будет лучше. Кроме того, часто бывает полезным определить очень большие индексы и установить, правильно ли они используются. Непродуманный состав очень большого индекса может вызывать те же проблемы, что и неиспользуемые индексы. Возникает сложный вопрос - как мы узнаем, какие индексы используются, а какие нет? И как мы можем просто определить очень большие индексы? Здесь у SQL Server имеется не очень много автоматизированных средств, и часто приходится определять неиспользуемые или слишком большие индексы самостоятельно. Метод, который предлагается в этой статье для определения неиспользуемых и очень больших индексов, прост, но он требует некоторого времени и терпения. Нашим главным инструментом является Profiler. С его помощью мы соберем статистику по активности базы данных за по крайней мере 4-5 дней. Если временные рамки не критичны, то чем больше времени будет собираться статистика, тем лучше - это поможет удостовериться, что редко используемые индексы не будут определены как неиспользуемые и, таким образом, не будут случайно удалены. События, которые мы будем собирать с помощью Profiler, включают: Stored Procedures: TSQL: Также рекомендуется выбрать следующие столбцы: ApplicationName Чтобы уменьшить количество событий, собираемых Profiler, рекомендуется отбирать только события с продолжительностью 50 миллисекунд и дольше. Это все равно приведет к созданию достаточно большого файла трассировки, поэтому нужно удостовериться, что эти данные не будут храниться на вашем рабочем SQL Server, а также что у вас достаточно дискового пространства для файла трассировки. Создание отчета по активным индексам Следующим шагом нам нужно будет проанализировать полученный из Profiler файл трассировки, используя Index Tuning Wizard. Убедитесь, что используете опцию "Keep all existing indexes" и режим настройки индексов "Thorough". В "Advanced Options" уберите флажок "Limit number of workload queries to sample". Как вы понимаете, выполнение такого анализа приведет к дополнительной нагрузке на ваш рабочий SQL Server. Убедитесь, что выполняете анализ в то время, когда ваш рабочий SQL Server не слишком загружен. Когда работа Index Tuning Wizard завершена, нужно будет взглянуть на Index Usage Report, как показано ниже. Стоит отметить, что этот отчет показывает, какие индексы были использованы, а какие нет. Он также показывает размер каждого индекса. На этом месте мы можем остановиться и воспользоваться этими результатами как основой для удаления неиспользуемых индексов и определения больших индексов. Но если у нас есть множество таблиц, то можно выполнить следующие дополнительные шаги. Предполагая, что мы хотим автоматизировать дополнительный анализ, нужно сохранить этот отчет в текстовом формате, используя кнопку "Save", после этого мы сможем импортировать этот текстовый файл в таблицу SQL Server. В любой выбранной вами базе данных создайте следующую таблицу:
Когда таблица создана, вы можете использовать DTS Import для загрузки текстового файла в таблицу SQL. При импортировании текстового файла выберите TAB как разделитель столбцов и таблицу Analysis для импорта. Когда текстовый файл импортирован, вы можете использовать следующую хранимую процедуру для вывода списка неактивных индексов.
Эта хранимая процедура выполняется в SQL Analyzer без параметров. В результате работы процедуры выводится отчет по неиспользуемым индексам.
Ниже показана еще одна хранимая процедура. Она создана для вывода списка используемых индексов в трассировке Profiler. Мы будем использовать эти результаты чтобы узнать, какие индексы являются очень большими.
После выполнения мы получаем отчет. Например:
Оба результата важны. Первый важен потому, что он показывает, какие индексы не используются. Второй важен потому, что он выдает список размеров всех индексов, возможно, давая нам информацию, какие индексы должны быть тщательно проверены. Очень большие размеры индексов могут сообщать о потенциальной возможности замедления работы. Когда вы удалите все ненужные или очень большие индексы, вы захотите и дальше внимательно следить за производительностью вашей базы данных, чтобы убедиться, что удаленные вами индексы действительно не были нужны, а не являлись редко используемыми индексами, не попавшими в трассировку. |
Перевод: Виталия Степаненко 2004г. |