#sql #sql-server
#sql #sql-сервер
Вопрос:
У меня есть две разные машины, на которых запущены экземпляры SQL server 2017 Developer Edition на основе обеих машин. Обе машины имеют на 100% одинаковую структуру ядра SQL server engine (таблицы, представления, SP, индексы и т.д.), Но на разных машинах спецификации. Вот спецификации:
Компьютеров-1 (ноутбук) Оперативная память: 12 ГБ (100% выделено для SQL) Процессор: Intel Core i7-7500U 2,7 ГГц Хранилище: SSD 500 ГБ ОС: Windows 10 Pro
Компьютер-2 (настольный компьютер) Оперативная память: 32 ГБ (100% выделено для SQL) Процессор: Intel Xeon Silver 4110CPU 2,10 ГГц Хранилище: M.2 для ОС и жесткий диск для SQL Server ОС: Windows Server 2016
Проблема, с которой я сталкиваюсь прямо сейчас, заключается в том, что одни и те же запросы и SPS занимают гораздо больше времени на компьютере-2, чем на компьютере-1. Максимальное время обработки сложного запроса на компьютере-1 составило 25 минут, что составляет 1,5 часа на компьютере-2.
Пожалуйста, пожалуйста, помогите мне устранить эту проблему с производительностью, поскольку это сильно влияет на повседневные операции.
Комментарии:
1. Я почти уверен, что проблема заключается в одном из следующих: (1) компьютеры по-разному настроены для SQL Server; (2) данные на двух машинах разные; (3) структура данных / параметры базы данных разные. Однако вы будете утверждать, что они одинаковы, пока не обнаружите проблему.
2. Разные размеры данных и разная статистика приведут к разным планам выполнения и разной производительности. Хотя даже 25 минут — это слишком много. Что делает запрос? Отсутствуют ли индексы? Конструкции, предотвращающие использование индексов?
3. Спасибо за ваш ответ, ребята. Ежедневный объем обрабатываемых данных такой же, как и раньше, даже индексы присутствуют. Пожалуйста, просто дайте мне знать, чем поделиться с вашими экспертами для анализа или помогите мне, что сравнить между двумя экземплярами, чтобы получить первопричину.
4. Извините, это слишком широко для StackOverflow. Вы не упомянули, например, работают ли другие приложения на Machine2. Вы не упомянули, отличается ли уровень ведения журнала на двух машинах. Вероятно, это лучше подходит для совершенно другого сайта. (Например, dba.stackexchange.com )
5. Я работаю на обеих машинах в полном одиночестве, и обе машины работают с одним и тем же пользователем домена, которым являюсь я. Я перенес все данные с machine1 на machine2, поскольку ноутбук не подходит для запуска SQL Server.
Ответ №1:
Вы не должны устанавливать выделение памяти на 100% для SQL Server, вам нужно оставить немного места для вашей операционной системы, иначе все пострадает.
У вас также могут возникнуть проблемы с параллелизмом, из-за которого может использоваться больше процессоров, чем на самом деле необходимо. В результате вы увидите множество ожиданий CXPACKET. Настройте максимальную степень параллелизма на основе следующих рекомендаций
- Сервер с одним узлом NUMA и менее чем 8 логическими процессорами поддерживает MAXDOP на уровне или ниже числа логических процессоров
- Сервер с одним узлом NUMA и более чем 8 логическими процессорами поддерживает MAXDOP на уровне 8
- Сервер с несколькими узлами NUMA и менее чем 8 логическими процессорами на узел NUMA Поддерживает MAXDOP на уровне или ниже числа логических процессоров на узел NUMA
- Сервер с несколькими узлами NUMA и более чем 8 логическими процессорами на узел NUMA Поддерживает MAXDOP на уровне 8
Вам также необходимо настроить пороговое значение затрат на параллелизм, поскольку значение по умолчанию слишком низкое для реальных проблем.
Наконец, вам нужно учитывать, что ваши данные на ноутбуке хранятся на SSD, а данные на рабочем столе — на жестком диске. Это будет иметь огромное значение для того, как быстро извлекаются и обрабатываются данные.
Я не уверен, что есть что-то еще, что можно решить. Убедитесь, что ваша статистика создана и обновлена в обоих местах, и выполняется обслуживание индекса.
Ответ №2:
- используйте максимальный объем памяти для sql server
- ssd и hdd могут существенно повлиять на ввод-вывод
- Две машины могут иметь разную конфигурацию sql
- На этих машинах может быть запущен другой процесс, например, антивирусное приложение может сканировать mdf и tempdb, если sql server не исключен в настройках
Чтобы быстро выяснить, что отличается на этих двух машинах,
Запустите проверку работоспособности с помощью sp_Blitz
- Запустите sp_blitz [sp] (https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit#sp_blitz-overall-health-check ) чтобы увидеть, что на самом деле является причиной вашего узкого места в производительности.
- проверьте приоритеты от 1 до 50, они наиболее важны.
- начните исправлять их один за другим