рд╣рд░ рджрд┐рди рд╕реЗрд╡рд╛ рдпреЛрдЬрдирд╛ - рднрд╛рдЧ 2: рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдЖрдБрдХрдбрд╝реЗ

рдкрд┐рдЫрд▓реА рдкреЛрд╕реНрдЯ рдореЗрдВ, рд╕реВрдЪрдХрд╛рдВрдХ рдбреАрдлрд╝реНрд░реИрдЧреНрдореЗрдиреНрдЯреЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм рдЖрдВрдХрдбрд╝реЛрдВ рдХреА рдмрд╛рд░реА рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ?

рдХрд┐рд╕реА рднреА рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдХреНрд╡реЗрд░реА рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░, рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЙрдкрд▓рдмреНрдз рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░, рдПрдХ рдЗрд╖реНрдЯрддрдо рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ - рдЬреЛ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдПрдХ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдЖрдк рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдСрдкрд░реЗрд╢рди рдХреЛ рдЪреБрдирдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдХреНрд╡реЗрд░реА рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдЖрдБрдХрдбрд╝реЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рддрд╛рд▓рд┐рдХрд╛ рдпрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рднреАрддрд░ рд╕реНрддрдВрднреЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдорд╛рдиреЛрдВ рдХреЗ рд╡рд┐рддрд░рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред

рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдРрд╕рд╛ рдЕрдиреБрдорд╛рди рдХреНрд╡реЗрд░реА рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХреЛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдпрджрд┐ рдЖрдВрдХрдбрд╝реЛрдВ рдореЗрдВ рдкреБрд░рд╛рдирд╛ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХрдо рдХреБрд╢рд▓ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдзреАрдореА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЗрдВрдбреЗрдХреНрд╕ рд╕реАрдХ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрдЬрд╛рдп рдкреБрд░рд╛рдиреЗ рдЖрдБрдХрдбрд╝реЛрдВ рдкрд░ рдПрдХ рдЫреЛрдЯреЗ рдирдореВрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рдЗрдВрдбреЗрдХреНрд╕ рд╕реНрдХреИрди рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрд╡реЗрд░реА рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдВрдХрдбрд╝реЗ рд╕рдЯреАрдХ рдФрд░ рддрд╛рдЬрд╝рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдордп-рд╕рдордп рдкрд░, SQL рд╕рд░реНрд╡рд░ рд╕рдордп-рд╕рдордп рдкрд░ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд░рд╣рддрд╛ рд╣реИ - рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ AUTO_CREATE_STATISTICS рдФрд░ AUTO_UPDATE_STATISTICS рд╡рд┐рдХрд▓реНрдкреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЙрди рдкрд░ рдЖрдВрдХрдбрд╝реЗ рдлреБрд▓рд╕реНрдХреИрди рдлреНрд▓реИрдЧ рдЗрдиреЗрдмрд▓реНрдб рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЖрдк рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рдбреЗрдЯрд╛ рд╡рд┐рддрд░рдг рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИред рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЛ рдкреБрдирд░реНрдЧрдард┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдБрдХрдбрд╝реЗ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдЬрдм рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдмрд╣реБрдд рдмрд╛рд░ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ UPDATE рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЪрдпрдирд╛рддреНрдордХ рдЖрдБрдХрдбрд╝реЗ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реЛрддрд╛ рд╣реИред

рд╕рд╛рде рд╣реА, рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП NORECOMPUTE рдзреНрд╡рдЬ рд╕реЗрдЯ рд╣реЛрдиреЗ рдкрд░ рдореИрдиреНрдпреБрдЕрд▓ рдЕрджреНрдпрддрди рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЖрдБрдХрдбрд╝реЛрдВ рдХреЗ рд╕реНрд╡рдд: рдЕрджреНрдпрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдиреНрдп рд╕рднреА, рдЧреБрдг рдЧреБрдгреЛрдВ рдореЗрдВ:

SELECT s.* FROM sys.stats s JOIN sys.objects o ON s.[object_id] = o.[object_id] WHERE o.is_ms_shipped = 0 

рдбрд╛рдпрдирд╛рдорд┐рдХ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдкреБрд░рд╛рдиреЗ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреЗрдВрдЧреЗ:

 DECLARE @DateNow DATETIME SELECT @DateNow = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) DECLARE @SQL NVARCHAR(MAX) SELECT @SQL = ( SELECT ' UPDATE STATISTICS [' + SCHEMA_NAME(o.[schema_id]) + '].[' + o.name + '] [' + s.name + '] WITH FULLSCAN' + CASE WHEN s.no_recompute = 1 THEN ', NORECOMPUTE' ELSE '' END + ';' FROM sys.stats s WITH(NOLOCK) JOIN sys.objects o WITH(NOLOCK) ON s.[object_id] = o.[object_id] WHERE o.[type] IN ('U', 'V') AND o.is_ms_shipped = 0 AND ISNULL(STATS_DATE(s.[object_id], s.stats_id), GETDATE()) <= @DateNow FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') PRINT @SQL EXEC sys.sp_executesql @SQL 

рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдкрд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдердиреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

 UPDATE STATISTICS [Production].[Shift] [PK_Shift_ShiftID] WITH FULLSCAN; UPDATE STATISTICS [Production].[Shift] [AK_Shift_Name] WITH FULLSCAN, NORECOMPUTE; 

рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЕрдкреНрд░рдЪрд▓рди рдХреЗ рд▓рд┐рдП рдорд╛рдирджрдВрдб рдЖрдкрдХрд╛ рдЕрдкрдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, 1 рджрд┐рдиред
рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдмрдбрд╝реА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╛рд░ рдЖрдБрдХрдбрд╝реЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрд╛рдлреА рдХрдореА рдЖ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрдбрд╝реА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдЖрдБрдХрдбрд╝реЗ рдЕрджреНрдпрддрди рдХрд░рдирд╛ рдХрдо рд╕рд╛рдорд╛рдиреНрдп рд╣реИ:

 DECLARE @DateNow DATETIME SELECT @DateNow = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) DECLARE @SQL NVARCHAR(MAX) SELECT @SQL = ( SELECT ' UPDATE STATISTICS [' + SCHEMA_NAME(o.[schema_id]) + '].[' + o.name + '] [' + s.name + '] WITH FULLSCAN' + CASE WHEN s.no_recompute = 1 THEN ', NORECOMPUTE' ELSE '' END + ';' FROM ( SELECT [object_id] , name , stats_id , no_recompute , last_update = STATS_DATE([object_id], stats_id) FROM sys.stats WITH(NOLOCK) WHERE auto_created = 0 AND is_temporary = 0 -- 2012+ ) s JOIN sys.objects o WITH(NOLOCK) ON s.[object_id] = o.[object_id] JOIN ( SELECT p.[object_id] , p.index_id , total_pages = SUM(a.total_pages) FROM sys.partitions p WITH(NOLOCK) JOIN sys.allocation_units a WITH(NOLOCK) ON p.[partition_id] = a.container_id GROUP BY p.[object_id] , p.index_id ) p ON o.[object_id] = p.[object_id] AND p.index_id = s.stats_id WHERE o.[type] IN ('U', 'V') AND o.is_ms_shipped = 0 AND ( last_update IS NULL AND p.total_pages > 0 -- never updated and contains rows OR last_update <= DATEADD(dd, CASE WHEN p.total_pages > 4096 -- > 4 MB THEN -2 -- updated 3 days ago ELSE 0 END, @DateNow) ) FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') PRINT @SQL EXEC sys.sp_executesql @SQL 

рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдмреИрдХрдЕрдк рд╕реНрд╡рдЪрд╛рд▓рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
SQL рд╕рд░реНрд╡рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рдЦрд░рдЦрд╛рд╡ рдпреЛрдЬрдирд╛рдПрдБ: рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рдЕрджреНрдпрддрди

Source: https://habr.com/ru/post/In209816/


All Articles