Предложения по обслуживанию SQL Server?
-
03-07-2019 - |
Вопрос
Я руковожу онлайн-сообществом фотографов, и кажется, что сайт вынужден обходить доступ к базе данных, иногда превышая тайм-ауты.
Я считаю себя достаточно компетентным в написании SQL-запросов и проектировании таблиц, но ни в коем случае не являюсь администратором базы данных...отсюда и проблема.
Некоторая предыстория:
Мой сайт и SQL server запущены на удаленном хостинге.Я обновляю ASP.NET код из Visual Studio и SQL через SQL Server Mgmt.Студия Экспресс.У меня нет физического доступа к серверу.
Все мои сохраненные процедуры (я думаю, что я получил их все) заключены в транзакции.
На данный момент в основной таблице всего 9400 записей.Каждую ночь я добавляю в эту таблицу 12 новых записей.
В этой главной таблице есть представление, которое объединяет данные из нескольких других таблиц в единое представление.
вторичные таблицы - это записи меньшего размера, но их больше.70 000 в одном, 115 000 в другом.Это записи комментариев и оценок для элементов в # 3.
Индексы указаны для наиболее необходимых полей.И я настроил их на автоматический пересчет статистики по большим таблицам.
Когда сайт останавливается, если я запускаю код для очистки журнала транзакций, обновления статистики, перестроения основного представления, а также перестроения хранимой процедуры для получения комментариев, скорость возвращается.Однако я должен сделать это вручную.
К сожалению, мои пользователи расстраиваются из-за этих проблем, и их участие сокращается.
Итак, мой вопрос таков...каков наилучший способ настройки и планирования плана обслуживания в удаленной среде, чтобы поддерживать максимальную производительность моей базы данных SQL???
Большое спасибо!KLK
Решение
Вам не нужно настраивать задачи технического обслуживания в виде плана технического обслуживания.
Просто создайте хранимую процедуру, которая выполняет задачи обслуживания, которые вы хотите выполнить, перестройку индекса, обновление статистики и т.д.
Затем создайте задание, которое вызывает ваши хранимые процедуры.Задание может быть настроено на выполнение по вашему желаемому расписанию.
Чтобы создать задание, используйте процедуру sp_add_job.
Для создания расписания используйте процедуру sp_add_schedule.
Я надеюсь, что то, что я подробно изложил, ясно и доходчиво, но не стесняйтесь, напишите мне, если вам понадобится дополнительная помощь.
Твое здоровье, Джон
Другие советы
Мое чутье подсказывает мне, что ты делаешь что-то не так.Это немного похоже на те истории, которые вы слышите, когда какая-то система не может работать, если вы не перезагружаете сервер каждую ночь :-)
Что-то не так с вашими запросами, количество строк, которые у вас есть, почти всегда не имеет отношения к производительности, и ваша база данных в любом случае очень мала.Я не слишком знаком с SQL server, но я предполагаю, что у него есть несколько довольно приятных инструментов анализа запросов.Я также предполагаю, что у него есть способ регистрировать медленные запросы.
Мне действительно кажется, что у вас отсутствует индекс.Конечно, вы можете подумать, что добавили правильные индексы, но пока вы не убедитесь, что они используются, это не имеет значения.Возможно, вы думаете, что у вас есть правильные ответы, но ваши запросы свидетельствуют об обратном.
Во-первых, выясните, как регистрировать ваши запросы.Очень велика вероятность, что у вас там убийца, выполняющий какое-то последовательное сканирование, которое исправит индекс.
Во-вторых, у вас может быть куча небольших запросов, которые вместо этого убивают его.Например, у вас может быть какой-то объект "User", который попадает в базу данных каждый раз, когда вы просматриваете имя пользователя из user_id.Найдите места, где вы запрашиваете базу данных сто раз, и замените ее кэшем - даже если этот "кэш" представляет собой не что иное, как закрытую переменную, которая стирается в конце запроса.
Суть в том, что я действительно сомневаюсь, что это что-то неправильно настроенное в SQL Server.Я имею в виду, если бы вам приходилось перезагружать свой сервер каждую ночь из-за сбоя системы, стали бы вы винить систему или свой код?Здесь то же самое...изучите инструменты, предоставляемые SQL Server, держу пари, они довольно хитрые :-)
Тем не менее, как только вы признаете, что делаете что-то неправильно, наслаждайтесь процессом.По-моему, нет ничего интереснее оптимизации медленных запросов к базе данных.Просто удивительно, что вы можете взять запрос с 10-секундным временем выполнения и превратить его в запрос со временем выполнения 50 мс с одним хорошо расположенным индексом.