Если вы столкнулись с медленным поиском в базе данных MS SQL Server 2008, то для решения этой проблемы есть несколько вариантов. Для поиска проблем будем использовать как продакшен базу, так и ее копию - тестовую базу (решения будут медленнее работать в производственной системе по сравнению с тестовой).
Вариант №1
- Используйте профилирование сервера MS SQL (Profile), чтобы проверить, какие sql запросы выполняются медленно (проверьте чтение, запись, продолжительность):
- запустите фильтр столбцов (column filter) с именем приложения и логином
- Нажмите Старт
- Произведите поиск
- Остановите поиск
- сохраните в xml и trc на будущее - в xml легче искать
- Сравните содержимое таблицы между двумя базами данных (производственной и тестовой)
- Проверьте индексы
USE database
GO
Select * from sys.indexes where name like ‘indexname%’
GO
- Сравните индексы между двумя базами данных
- Проверить последнее перестроение индексов
USE database;
GO
SELECT name AS Stats,
STATS_DATE(object_id, stats_id) AS LastStatsUpdate
FROM sys.stats
WHERE object_id = OBJECT_ID(‘table’)
and left(name,4)!=’_WA_’;
GO
- Перестройте все индексы
- Реорганизуйте все индексы
Вариант 2:
- Используйте профилирование сервера MS SQL (Profile), чтобы проверить, какие sql запросы выполняются медленно (проверьте чтение, запись, продолжительность):
- запустите фильтр столбцов (column filter) с именем приложения и логином
- Нажмите Старт
- Произведите поиск
- Остановите поиск
- сохраните в trc
- Используйте советник по настройке ядра базы данных (database engine tuning advisor)
- файл - новая сессия
- рабочая нагрузка (workload): используйте trc-файл, полученный выше выше для конкретной базы данных
- выберите базу данных, для которой запустится настройка
- начать анализ
- не забудьте сохранить рекомендации
- примените рекомендации, когда вы их просмотрели и осмыслили
- выполните поиск еще раз
Если он все еще медленный, повторяйте Варианты 1-2, пока производительность не станет удовлетворительной