Published on

January 16, 2020

Понимание автоматически создаваемой статистики в SQL Server

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

В SQL Server существуют два типа статистики: статистика, созданная пользователем, и автоматически создаваемая статистика. Статистика, созданная пользователем, создается вручную администраторами баз данных или разработчиками, в то время как автоматически создаваемая статистика генерируется автоматически SQL Server при необходимости.

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

Слишком большое количество автоматически создаваемой статистики может негативно сказаться на производительности вашего SQL Server. Эта статистика может недостоверно отражать запросы вашего приложения и приводить к неоптимальным планам запросов. Поэтому важно периодически проверять и управлять автоматически создаваемой статистикой в вашей системе.

Чтобы удалить всю автоматически создаваемую статистику в вашем SQL Server, вы можете использовать следующий скрипт:

SELECT DISTINCT 'DROP STATISTICS '
+ QUOTENAME(SCHEMA_NAME(ob.Schema_id)) + '.'
+ QUOTENAME(OBJECT_NAME(s.object_id)) + '.' +
QUOTENAME(s.name) DropStatisticsStatement
FROM sys.stats s
INNER JOIN sys.Objects ob ON ob.Object_id = s.object_id
WHERE SCHEMA_NAME(ob.Schema_id) <> 'sys'
AND Auto_Created = 1

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

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

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

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.