Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Актуализирайте статистиката на SQL Server с помощта на план за поддръжка на база данни

Архивирането на бази данни, проверките на целостта и оптимизирането на производителността са основни редовни задачи на DBA. Клиентските данни са много важни за DBA, за да управлява архивирането на базата данни и да се увери в целостта на архивите. Така че, ако нещо се обърка с производствена база данни, тя може да бъде възстановена с минимално време на престой. Проверките на целостта на базата данни също са важни, защото в случай на повреда на базата данни тя може да бъде коригирана с минимално време на престой и загуба на данни. Управлението на производителността на базата данни също е важно. Управлението на производителността на базата данни е комбинация от множество задачи.

  1. Определете списъка с ресурсоемки заявки и помогнете на разработчиците да ги пренапишат.
  2. Създавайте и управлявайте индекси в таблицата. Освен това извършете дефрагментиране на индекса, за да сте сигурни, че остават в добра форма.
  3. Накрая, управление на статистиката на таблици.

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

Първо, нека обясня какво представляват статистиката на SQL Server и как може да помогне за повишаване на производителността на SQL сървъра.

Статистика на SQL сървъра и тяхното значение

Статистиките са метаданни, използвани от оптимизатора на заявки на SQL Server, което помага да се определи най-добрият начин за извличане на данните. Оптимизаторът използва статистически данни, за да разбере данните, тяхното разпределение и броя на редовете, които дадена заявка вероятно ще върне от наличните статистически данни. Въз основа на тази информация той решава оптималния път за достъп до данни. Той също така определя дали да се направи сканиране на таблица или търсене на индекс, да се използва присъединяване на вложен цикъл или хеш присъединяване и т.н.

Ако статистическите данни са остарели или ако са недостъпни, оптимизаторът може да избере лошия план за изпълнение, което значително намалява производителността на заявката. SQL Server може автоматично да поддържа статистически данни и да ги обновява въз основа на проследяването на модификациите на данните.

Статистическите данни могат да се създават и актуализират автоматично, като активирате „Автоматично създаване на статистика“ и „Автоматично актуализиране на статистики“. Въпреки това, за някои таблици, като тези, подложени на значителни промени в разпределението на данни, е възможно автоматичната актуализация на статистиката на SQL Server да е недостатъчна, за да поддържа постоянно високи нива на производителност на заявката.

Преди да обясня различните подходи за актуализиране на статистическите данни, нека обясня различните начини за преглед на статистическите данни, създадени на която и да е таблица.

Как да прегледате статистиката

Можем да преглеждаме статистики за колони и индекси

  1. Използване на SQL Server Management Studio.
  2. Използване на системни съхранени процедури и системни каталози и динамични изгледи за управление

Преглед на статистически данни с помощта на SQL Server Management Studio

Например искам да видя статистическите данни, създадени в [Човешки ресурси].[Служител] таблица, създадена в AdventureWorks2017 база данни. За да направите това, стартирайте SQL Server Management Studio. След това разгънете AdventureWorks2017 база данни, разгънете [Човешки ресурси].[Служител] маса. Вижте следното изображение:

Използване на системни съхранени процедури и динамични изгледи за управление

Ако използвате по-стара версия на SQL Server, можете да използвате sp_helpstats системна процедура за преглед на статистиката на таблиците. sp_helpstats ще покаже статистиката, създадена от SQL Server или от потребител. Той няма да показва статистическите данни, създадени от Index. За да демонстрирам това, създадох статистика с име User_Statistics_BirthDate на [Човешки ресурси].[Служител] таблица.

Следва примерът:

ИЗПОЛЗВАЙТЕ ADVENTUREWORKS2017 GOEXEC SP_HELPSTATS 'HUMANRESOURCES.EMPLOYEE'

Следва изходът.

Можете да прегледате статистическите данни, като направите заявка в sys.stats системен каталог. Той предоставя информация за статистическите данни, създадени от SQL Server, създадени от индекси и създадени от потребител.

Изпълнете следната заявка:

ИЗБЕРЕТЕ ИМЕ КАТО „ИМЕ НА СТАТИСТИКА“, AUTO_CREATED КАТО „СЪЗДАДЕНО АВТОМАТИЧНО“, USER_CREATED КАТО „СЪЗДАДЕНО ОТ ПОТРЕБИТЕЛ“ ОТ SYS.STATS КЪДЕТО OBJECT_ID =OBJECT_ID('HUMANRESOURCES.EMPLOYEE') 

Следва изходът:

Сега нека обединим тази таблица с други системни каталози, за да получим подробна информация за статистическите данни. За да направите това, изпълнете следната заявка:

ИЗБЕРЕТЕ [СХЕМИ].[ИМЕ] + '.' + [ОБЕКТИ].[ИМЕ] КАТО [ИМЕ_ТАБЛИЦА], [ИНДЕКСИ].[ИНДЕКС_ИД] КАТО [ИНДЕКС ИД], [СТАТИСТИКА].[ИМЕ] КАТО [СТАТИСТИКА], STUFF((ИЗБЕРЕТЕ ', ' + [КОЛОНИ].) [ИМЕ] ОТ [SYS].[STATS_COLUMNS] [STATS_COLUMN] ПРИСЪЕДИНЕТЕ [SYS].[КОЛОНИ] [КОЛОНИ] НА [КОЛОНИ].[COLUMN_ID] =[STATS_COLUMN].[COLUMN_ID] И [КОЛОНИ].[OBJECT_ID] =[STATS_COLUMN].[OBJECT_ID] WHERE [STATS_COLUMN].[OBJECT_ID] =[STATS].[OBJECT_ID] И [STATS_COLUMN].[STATS_ID] =[STATS].[STATS_ID] ПОРЪЧАЙТЕ ПО [STATS_COLUMN].[STATS_COLUMN] [STATS_COLUMN X]. PATH('')), 1, 2, '') КАТО [КОЛОНИ_В_СТАТИСТИКА] ОТ [SYS].[СТАТИСТИКА] [СТАТИСТИКА] ПРИСЪЕДИНЯВАНЕ [SYS].[ОБЕКТИ] КАТО [ОБЕКТИ] НА [СТАТИСТИКА].[OBJECT_ID] ==[ОБЕКТИ].[OBJECT_ID] ПРИСЪЕДИНЯВАЙТЕ [SYS].[СХЕМИ] КАТО [СХЕМИ] НА [ОБЕКТИ].[SCHEMA_ID] =[SCHEMAS].[SCHEMA_ID] ЛЯВО ВЪНШНО ПРИСЪЕДИНЕНИЕ. [SYS].[ИНДЕКСИ] КАТО [ИНДЕКСИ] НА [ОБЕКТИ].[OBJECT_ID] =[INDEXES].[OBJECT_ID] И [СТАТИСТИКИ].[NAME] =[ИНДЕКСИТЕ].[NAME] КЪДЕ [ОБЕКТИ].[OBJECT_ID].[OBJECT_ID].[NAME] =[INDEXES].[NAME] ] =OBJECT_ID(N'HUMANRESOURCES.EMPLOYEE') ПОРЪЧАЙ ПО [СТАТИСТИКИ].[USER_CREATED] GO

Заявката по-горе попълва следните подробности

  1. Таблицата, върху която се създават статистически данни.
  2. Идентификационен номер на индекса.
  3. Име на статистиката.
  4. Колони, включени в статистиката.

Следва изходът:

В следващия раздел ще обясня различни начини за актуализиране на статистическите данни.

Различни подходи за актуализиране на статистиката

Можем да актуализираме статистическите данни по следните начини:

  1. Създайте план за поддръжка на SQL Server.
  2. Създаване с помощта на персонализирания скрипт.
  3. Ръчно изпълнете командата за актуализиране на статистическите данни на отделна таблица.

Първо, ще обясня как можем да създадем план за поддръжка за актуализиране на статистиката.

Създайте план за поддръжка на SQL Server за актуализиране на статистиката

Сега, в тази демонстрация, ще създадем план за поддръжка на актуализирана статистика, за да актуализираме статистиката. Планът за поддръжка ще изпълнява следните задачи:

Първо създайте план за поддръжка. За да направите това, отворете SQL Server Management Studio. Разгънете екземпляр на SQL сървър>>Папка за управление>> Под Управление щракнете с десния бутон на MaintenancePplans и изберете Нов план за поддръжка. Вижте следното изображение:

Новият план за поддръжка диалогов прозорец се отваря. В полето посочете име на плана за поддръжка и щракнете върху OK. Вижте следното изображение:

Отваря се дизайнер на план за поддръжка. В кутията с инструменти на дизайнера на план за поддръжка плъзнете и пуснете „Задача за актуализиране на статистиката“ в прозореца на дизайнера. Вижте следното изображение:

Сега щракнете двукратно върху Задача за актуализиране на статистиката . Задачата за актуализиране на статистическите данни диалогов прозорец се отваря. В диалоговия прозорец има опции, които могат да се използват за персонализиране на плана за поддръжка. Вижте следното изображение:

Можем да персонализираме следните опции за използване на Актуализиране на статистиката План за поддръжка.

  1. Актуализиране на статистическите данни за всички обекти от конкретна база данни. Вижте следното изображение:
  2. Конкретни обекти от избрани бази данни. Можете да актуализирате статистически данни за Всички таблици и изгледи / Конкретни таблици и изгледи. Вижте следното изображение:

    Ако изберем таблици или изгледи, SQL ще попълни името на изгледите или таблиците в селекцията диалогов прозорец. Вижте следното изображение:
  3. Третата опция е Актуализиране . Можем да актуализираме всички статистически данни на таблици/изгледи или можем да изберем да актуализираме само статистически данни за колони (статистика, създадена върху неиндексирани колони), или можем да изберем само индексна статистика (статистика, създадена от индекси). Вижте следното изображение:
  4. Можем също да изберем типа сканиране на всяка статистика. Можем да изберем Пълно сканиране или Проба от определен процент или посочени редове. Вижте следното изображение:

Сега, както споменах, ще създадем задача за поддръжка, която ще актуализира статистиката на всички таблици в AdventureWorks2017 база данни с пълно сканиране. Така че, изберете опциите съответно. След като задачата за поддръжка е конфигурирана, тя изглежда така:

След като задачата за поддръжка е конфигурирана правилно, затворете диалоговия прозорец със статистически данни за актуализиране. След конфигурирането планът за поддръжка изглежда по следния начин:

След като планът за поддръжка е създаден, нека планираме плана за поддръжка. За да направите това, щракнете върху иконата на календар срещу Описание колона. Вижте следното изображение:

След като щракнете върху бутона календар, се отваря диалогов прозорец за конфигуриране на графика на заданията. Вижте следното изображение:

Както споменах, нашият план за поддръжка на актуална статистика ще се изпълнява всяка неделя в 4:00 часа сутринта. Така че ще конфигурираме съответно графика за работа. Планирането на работата е лесно. След като конфигурирате графика, диалоговият прозорец изглежда по следния начин:

След като е конфигуриран график за изпълнение, целият план за поддръжка изглежда като следното изображение. Запазете плана за поддръжка и затворете прозореца.

Сега нека изпълним този план за поддръжка, като изпълним SQL заданието, създадено от плана за поддръжка. За да отворите SQL задания, разгънете SQL Server Agent и разширете Работни места . Можете да видите SQL заданието, създадено от плана за поддръжка на SQL. Сега, за да изпълните заданието, щракнете с десния бутон върху Update Statistics Weekly.Weekly.Subplan_1 и щракнете върху Стартиране на работа в стъпка . Вижте следното изображение.

След като заданието приключи, можете да видите следния диалогов прозорец за успешно изпълнение на заданието.

Резюме

В тази статия разгледах:

  1. Подробно обяснение на статистиката на SQL Server и нейното значение.
  2. Различни опции за актуализиране на статистическите данни.
  3. Работен пример за създаване на план за поддръжка на SQL за актуализиране на статистическите данни.

В следващата си статия ще обясня различни T-SQL команди за актуализиране на статистиката. Освен това ще обясня T-SQL скрипт, който ще актуализира статистическите данни въз основа на обема промени в данните, настъпили след вмъкване/актуализация/изтриване на таблицата.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 10 SP_EXECUTESQL Трябва да избягвате за по-добър динамичен SQL

  2. Как да генерирате изявление за добавяне на колона за всички таблици в база данни в SQL Server - SQL Server / T-SQL урок, част 49

  3. Как TRY_CONVERT() работи в SQL Server

  4. Как да върна множество набори от резултати със SqlCommand?

  5. SQL Server 2005 ROW_NUMBER() без ORDER BY