Обслуживание статистики=рост TempDB? Часть1 TempDB usage during Column statistics maintenance.Part1

preview_player
Показать описание
Интересный случай использования ресурсов tempDB. В этот раз "поймали за хвост" колоночную статистику. Почему так происходит и как индентифицировать проблему - смотрите в видео. Это только первая часть. На подходе использование xEvent-ов в обнаружении проблемы, ну и конечно, варианты решения.


Линк на скрипт - usp_whatsup

Задать вопросы и узнать обо мне можно тут:
К слову сказать, не стесняемся, добавляемся в Linkedin сеть!

Почитать статьи от Александра Каленика можно тут:
Рекомендации по теме
Комментарии
Автор

Александр, добрый день. Отличное видео, полезная тема, с нетерпением жду вторую часть.

antonanashkin
Автор

Спасибо. Узнал пару новых моментов относительно статистики. Было бы интересно посмотреть еще что-то на эту тему.

ЕвгенийСмирнов-шс
Автор

Александр, приветствую! А разве сортировка не должна по возможности сначала выполняться в оперативной памяти и только вследствие нехватки таковой перетекать в TempDB?

ЕвгенийЛунев-ен
Автор

Скрипт, которым в видео пользовался. Не поместился в описание:) К сожалению, автор этого замечательного скрипта не я, а первоисточник потерялся:( надеюсь, если что меня простят:)))

--# THIS SAMPLE CODE AND ANY RELATED INFORMATION ARE PROVIDED "AS IS" WITHOUT
--#WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
--#LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS
--#FOR A PARTICULAR PURPOSE.


set nocount on
create table #Data(
FileID int NOT NULL,
[FileGroupId] int NOT NULL,
TotalExtents int NOT NULL,
UsedExtents int NOT NULL,
[FileName] sysname NOT NULL,
[FilePath] nvarchar(MAX) NOT NULL,
[FileGroup] varchar(MAX) NULL)

create table #Results(
db sysname NULL,
FileType varchar(4) NOT NULL,
[FileGroup] sysname not null,
[FileName] sysname NOT NULL,
TotalMB numeric(18, 2) NOT NULL,
UsedMB numeric(18, 2) NOT NULL,
PctUsed numeric(18, 2) NULL,
FilePath nvarchar(MAX) NULL,
FileID int null)

create table #Log(
db sysname NOT NULL,
LogSize numeric(18, 5) NOT NULL,
LogUsed numeric(18, 5) NOT NULL,
Status int NOT NULL,
[FilePath] nvarchar(MAX) NULL)

INSERT #Data (FileID, [FileGroupId], TotalExtents, UsedExtents, [FileName], [FilePath])
EXEC ('DBCC showfilestats WITH NO_INFOMSGS')

update #Data
set #Data.FileGroup = sysfilegroups.groupname
from #Data, sysfilegroups
where #Data.FileGroupId = sysfilegroups.groupid

INSERT INTO #Results (db, [FileGroup], FileType, [FileName], TotalMB, UsedMB, PctUsed, FilePath, FileID)
SELECT DB_NAME() db,
[FileGroup],
'Data' FileType,
[FileName],
TotalExtents * 64./1024. TotalMB,
UsedExtents *64./1024 UsedMB,
UsedExtents*100. /TotalExtents UsedPct,
[FilePath],
FileID
FROM #Data
order BY --1, 2
DB_NAME(), [FileGroup]

insert #Log (db, LogSize, LogUsed, Status)
exec('dbcc sqlperf(logspace) WITH NO_INFOMSGS ')

insert #Results(db, [FileGroup], FileType, [FileName], TotalMB, UsedMB, PctUsed, FilePath, FileID)
select DB_NAME() db,
'Log' [FileGroup],
'Log' FileType,
s.[name] [FileName],
s.Size/128. as LogSize,
FILEPROPERTY(s.name, 'spaceused')/8.00 /16.00 As LogUsedSpace,
((FILEPROPERTY(s.name, 'spaceused')/8.00 /16.00)*100)/(s.Size/128.) UsedPct,
s.FileName FilePath,
s.FileID FileID
from #Log l, master.dbo.sysaltfiles f, dbo.sysfiles s
where f.dbid = DB_ID()
and (s.status & 0x40) <> 0
and s.FileID = f.FileID
and l.db = DB_NAME()

SELECT r.db AS "Database",
r.FileType AS "File type",
CASE
WHEN r.FileGroup = 'Log' Then 'N/A'
ELSE r.FileGroup
END "File group",
r.FileName AS "Logical file name",
r.TotalMB AS "Total size (MB)",
r.UsedMB AS "Used (MB)",
r.PctUsed AS "Used (%)",
r.FilePath AS "File name",
r.FileID AS "File ID",
CASE WHEN s.maxsize = -1 THEN null
ELSE CONVERT(decimal(18, 2), s.maxsize /128.)
END "Max. size (MB)",
CONVERT(decimal(18, 2), s.growth /128.) "Autogrowth increment (MB)"
FROM #Results r
INNER JOIN dbo.sysfiles s
ON r.FileID = s.FileID
ORDER BY 1, 2, 3, 4, 5

DROP TABLE #Data
DROP TABLE #Results
DROP TABLE #Log

datainternalsru
Автор

Забавно, меня Ростелеком на www.datainternals.ru не пускает =)
Что натворили? xD

MaratLazarev