Назад | Перейти на главную страницу

Как оптимизировать производительность для баз данных MSSQL?

Я dba с базой данных с ~ 280 таблицами и общим объемом данных ~ 1,5 ГБ. Я хотел бы настроить базу данных, чтобы она работала лучше.

Что вы делаете для поддержания работоспособности баз данных SQL? Как много вы возитесь с индексами, статистикой и дефрагментацией?

Каковы самые большие убийства / улучшения производительности, и как вы устраняете неполадки, чтобы узнать, где оптимизировать?

Редактировать: Это база данных из сторонней CRM-системы, поэтому я не могу контролировать код. Они добавили много индексов (в разумных местах), но я хотел бы знать, как я могу поддерживать скорость сервера.

Я бегаю каждую ночь

EXEC sp_MSforeachtable "dbcc dbreindex('?', '', 90)"

для восстановления индексов и (надеюсь) обновления статистики, используя план обслуживания. Тот же план также выполняет «Задачу сжатия базы данных».

Какие еще еженедельные / еженедельные задачи обслуживания или разовые оптимизации можно было бы выполнить?

Изменить 2:

Советы собраны:

вам следует удалить часть своего плана обслуживания, относящуюся к сокращению базы данных. "сжатая база данных" фрагментирует ваш индекс! Вот - отличный пост в блоге Пола С. Рэндала, который подробно объясняет это.

вы можете восстановить свою статистику с помощью:

EXEC sp_updatestats

обновляйте статистику всегда после переиндексации базы данных. Вот - это сообщение в блоге Колина Стасюка, в котором объясняется эта передовая практика.

Я получил улучшение производительности на порядки только за счет индексации (хотя я особо не возился с этим)

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

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

Убедитесь, что вы заранее выделили достаточно места, чтобы база данных не увеличивалась все время автоматически.

если у вас есть пакет обновления sql2005 с пакетом обновления 2 (sp2), вы можете (и поскольку вы, вероятно, уже сделали это) установить плагин отчетов панели мониторинга производительности. после перезагрузки сервера я буду смотреть монитор производительности на предмет полезных показателей. монитор производительности предоставляет огромное количество информации. со временем я обнаружил, что он накапливается очень много (но это может быть потому, что у меня есть настройка базы данных, такая как fogbugz ... у меня много клиентских баз данных, все с одинаковой структурой, на одном сервере ... sql server будет обрабатывать необходимые индексы в каждом из них как отдельные, что приводит к множеству фактически дублирующихся записей в отчете). в любом случае, я трачу много времени на просмотр отчетов об отсутствующих индексах и добавление / изменение индексов в результате.

С уважением, Дон

Разместите основные файлы базы данных на физических дисках, отличных от файлов журналов. т.е. - отделите свой .MDF и ваш .LDF файлы.

Прошу прощения за все аппаратные исправления, но я предлагаю использовать;

64-разрядная Windows 2008 Много памяти (16 ГБ или около того, я бы посоветовал, на данный момент это дешево). Журналы на SSD, данные на зеркальной паре дисков SCSI / SAS со скоростью 15 оборотов в минуту. В идеале, пара микросхем Xeon серии 55xx.

Очевидно, что все это будет стоить денег, но гарантирует быстрое увеличение производительности - вы можете улучшить свою БД, но это требует времени (что, конечно, тоже стоит денег) и не гарантирует, что сделает это быстрее.

Протестируйте свои sql / хранимые процессы в SQL Management Studio. Когда вы запустите их, включите Просмотр плана выполнения и клиентской статистики. Ищите сканирование таблиц или другие шаги, которые занимают много% времени выполнения. Если вы используете SQL 2008, он предложит индексы, которые заставят ваш код работать быстрее.