Вопрос

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

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

Некоторая предыстория:

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

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

  3. На данный момент в основной таблице всего 9400 записей.Каждую ночь я добавляю в эту таблицу 12 новых записей.

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

  5. вторичные таблицы - это записи меньшего размера, но их больше.70 000 в одном, 115 000 в другом.Это записи комментариев и оценок для элементов в # 3.

  6. Индексы указаны для наиболее необходимых полей.И я настроил их на автоматический пересчет статистики по большим таблицам.

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

Твое здоровье, Джон

Другие советы

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

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

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

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

Во-вторых, у вас может быть куча небольших запросов, которые вместо этого убивают его.Например, у вас может быть какой-то объект "User", который попадает в базу данных каждый раз, когда вы просматриваете имя пользователя из user_id.Найдите места, где вы запрашиваете базу данных сто раз, и замените ее кэшем - даже если этот "кэш" представляет собой не что иное, как закрытую переменную, которая стирается в конце запроса.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top