Рекомендации по обслуживанию SQL Server? - PullRequest
2 голосов
/ 02 марта 2009

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

Я считаю себя достаточно компетентным в написании SQL-запросов и разработке таблиц, но я ни в коем случае не администратор баз данных ... отсюда и проблема.

Некоторый фон:

  1. Мой сайт и сервер SQL работают на удаленном хосте. Я обновляю код ASP.NET из Visual Studio и SQL через SQL Server Mgmt. Студия Экспресс. У меня нет физического доступа к серверу.

  2. Все мои сохраненные процы (кажется, я их все получил) обернуты транзакциями.

  3. В настоящее время в основной таблице только 9400 записей. Я добавляю 12 новых записей в эту таблицу каждый вечер.

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

  5. вторичные таблицы - это записи меньшего размера, но их больше. 70000 в одном, 115000 в другом. Это записи комментариев и оценок предметов в №3.

  6. Индексы находятся в наиболее необходимых полях. И я установил для них Auto Recompute Statistics для больших таблиц.

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

К сожалению, мои пользователи разочарованы этими проблемами, и их участие сокращается.

Так что мой вопрос ... в удаленной среде, каков наилучший способ настройки и планирования плана обслуживания, чтобы моя БД SQL работала на пике ???

Большое спасибо! КЛК

Ответы [ 2 ]

2 голосов
/ 02 марта 2009

Моя интуиция говорит, что вы делаете что-то не так. Это звучит немного похоже на те истории, которые вы слышите, когда какая-то система не может работать, пока вы не перезагрузите сервер ночью: -)

Что-то не так с вашими запросами, количество строк у вас почти не зависит от производительности, и ваша база данных очень мала. Я не слишком знаком с SQL-сервером, но думаю, что у него есть довольно приятные инструменты для анализа запросов. Я также представляю, что есть способ регистрации медленных запросов.

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

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

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

Суть в том, что я действительно сомневаюсь, что это что-то неправильно настроено в SQL Server. Я имею в виду, если бы вам приходилось перезагружать сервер каждую ночь, потому что система зависала, вы бы обвиняли систему или свой код? То же самое и здесь ... изучите инструменты, предоставляемые SQL Server, держу пари, что они довольно удобны: -)

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

0 голосов
/ 02 марта 2009

Вам не нужно настраивать задачи обслуживания как план обслуживания.

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

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

Чтобы создать работу, используйте процедуру sp_add_job.

Для создания расписания используйте процедуру sp_add_schedule.

Я надеюсь, что то, что я описал, ясно и понятно, но не стесняйтесь, напишите мне, если вам потребуется дополнительная помощь.

Приветствия, Джон

...