Проблема с производительностью системной таблицы syscolpars в SQL Server 2016 - PullRequest
0 голосов
/ 13 ноября 2018

Привет, мы столкнулись с важным падением производительности БД, когда мы перешли с 2008 R2 на 2016. База данных используется в качестве публикации для других серверов, и при ее публикации у нас задержка составляет 2 секунды, когда мы выполняемmsgstr "таблица сценариев как создать ...".Проблема на самом деле не связана с этой операцией, это просто симптомы (потому что она была очень быстрой, прежде чем мы ее опубликовали).Основная проблема заключается в том, что такой же тип запроса выполняется при создании моментального снимка, он проверяет структуру таблицы путем запроса к столбцам sysobjects и sys.all_columns, которые ОЧЕНЬ медленны.

Вот результаты STATISTICS IO:

(13 row(s) affected)
Table 'syssingleobjrefs'. Scan count 53, logical reads 117, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'sysclsobjs'. Scan count 0, logical reads 26, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'sysnsobjs'. Scan count 1, logical reads 27, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'sysschobjs'. Scan count 2, logical reads 62, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'sysscalartypes'. Scan count 1, logical reads 53, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'syscolpars'. Scan count 1, logical reads 15646, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'sysobjvalues'. Scan count 15, logical reads 45, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'sysidxstats'. Scan count 13, logical reads 26, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'syscolpars'. Scan count 1, logical reads 4, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Workfile'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'syspalvalues'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(1 row(s) affected)

Время выполнения SQL Server: время ЦП = 1343 мс, истекшее время = 1871 мс.

Время выполнения SQL Server: время ЦП = 1937 мс, истекшее время = 2469 мс.Время анализа и компиляции SQL Server: время ЦП = 0 мс, истекшее время = 0 мс.

Время выполнения SQL Server: время ЦП = 0 мс, истекшее время = 0 мс.

Мы можемясно видите, что здесь выполняется множество операций чтения:

Таблица 'syscolpars'.Число сканирований 1, логическое чтение 15646

Эта таблица также может рассматриваться как основной фактор снижения производительности в плане выполнения:

План выполнения

Выможно увидеть его использование кластерного индекса этого syscolpars (системная таблица), и я заметил изменение в этом индексе между 2008 R2 и 2016.

В 2008 R2 кластерные столбцы:

  1. ColumnName
  2. ID

В то время как в 2016 году оно изменилось:

  1. ID
  2. ColumnName

Так как он больше не кластеризован по имени, он выполняет операцию сканирования индекса CLustered, а в 2008 R2 выполняет операцию поиска кластерного индекса.

Из-за этого для создания снимка требуется 4 часа.возьмите 10 минут против 2008 R2.

sys.syscolpars индексы между 2008 R2 и 2016

У всех есть идеи, почему они устанавливают идентификатор в качестве первого столбца своегоКластерный индекс в этой системной таблице syscolpars?А также как я могу это изменить (Вы не можете редактировать системный индекс).

Спасибо за помощь в понимании этой проблемы!

...