Проблемы производительности SQL Server 2008 и SQL Server 2017 [закрыто]

Вопрос или проблема

Недавно мне пришлось мигрировать базу данных с SQL Server 2008 Express на SQL Server 2017 Express, и одна из хранимых процедур начала испытывать значительно ухудшение производительности. Профайлер показывает, что на SQL Server 2008 эта хранимая процедура выполняет 1370 чтений и занимает 59 мс для выполнения, в то время как на SQL Server 2017 эта же хранимая процедура выполняет 127256 чтений и занимает 6931 мс для выполнения. База данных была мигрирована с помощью функции бинарного резервного копирования/восстановления. Что может вызывать такое огромное ухудшение производительности?

Ответ или решение

Сравнение производительности SQL Server 2008 и SQL Server 2017: Причины ухудшения производительности после миграции

Миграция базы данных из SQL Server 2008 Express в SQL Server 2017 Express может привести к неожиданным проблемам с производительностью, как указано в вашем примере. Ваша ситуация, в которой хранимая процедура в SQL Server 2008 выполняется за 59 мс с 1370 обращениями к диску, а в SQL Server 2017 — за 6931 мс с 127256 обращениями, поднимает множество вопросов, которые мы обсудим ниже.

1. Изменение в планах запросов

Одна из наиболее распространенных причин ухудшения производительности при миграции между версиями SQL Server — это изменение механизмов оптимизации запросов. SQL Server 2017 имеет улучшенные алгоритмы для создания планов выполнения, но они могут быть неэффективными для старых хранимых процедур.

  • Решение: Попробуйте обновить статистику с помощью команды UPDATE STATISTICS или используйте sp_updatestats, чтобы оптимизировать планы запросов.

2. Устаревшие индексы

При миграции базы данных могут возникнуть ситуации, когда индексы, созданные в SQL Server 2008, не оптимальны для работы в SQL Server 2017. Если индексы не обновлены или плохо подходят для новых запросов, это приведет к ухудшению производительности.

  • Решение: Проверьте индексы и их использование в этой хранимой процедуре. Используйте динамический менеджер представлений (DMV), такие как sys.dm_db_index_usage_stats, чтобы выяснить, какие индексы использовались и как часто.

3. Различия в конфигурационных настройках

Настройки конфигурации могут различаться между версиями SQL Server. Факторы, такие как размер кэша, настройки параллелизма и максимальное количество потоков, могут сильно влиять на производительность.

  • Решение: Сравните настройки конфигурации (например, sp_configure) между SQL Server 2008 и 2017. Настройте параметры, такие как max degree of parallelism и размер кэша, для оптимизации производительности.

4. Изменения в функциональности и архитектуре

SQL Server 2017 имеет множество улучшений по сравнению с SQL Server 2008, включая новые функции, которые могут влиять на работу старых stored procedures. Некоторые изменения в архитектуре или поведении систем могут вызвать тормоза при выполнении определенных операций.

  • Решение: Проверьте изменения улучшений производительности и новые функции, представленные в SQL Server 2017. Иногда может потребоваться переписывание или оптимизация хранимых процедур с учетом новых возможностей платформы.

5. Эффективность использования памяти

Изменения в управлении памятью и кэшированием между SQL Server 2008 и SQL Server 2017 тоже могут стать причиной существенной разницы в производительности. Если хранимая процедура требует значительных объемов памяти, а версия SQL Server 2017 не выделяет нужное количество памяти, могут возникнуть проблемы с производительностью.

  • Решение: Проверьте использование памяти на сервере SQL Server 2017 и примените оптимизацию, если необходимо. Используйте sys.dm_os_memory_clerks для анализа распределения памяти.

Заключение

Улучшения и изменения в SQL Server 2017 могут приводить к неожиданным проблемам с производительностью хранимых процедур, особенно после миграции из старших версий, таких как SQL Server 2008. Рекомендуется использовать инструменты для анализа производительности, обновлять статистику, оптимизировать индексы и конфигурацию. Постоянный мониторинг и тестирование — ключ к эффективному управлению производительностью базы данных в новой среде.

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

Оцените материал
Добавить комментарий

Капча загружается...