{"id":1789,"date":"2022-08-05T14:36:08","date_gmt":"2022-08-05T06:36:08","guid":{"rendered":"http:\/\/blog.infinity.idv.tw\/?p=1789"},"modified":"2022-08-05T14:36:26","modified_gmt":"2022-08-05T06:36:26","slug":"wsus%e8%b3%87%e6%96%99%e5%ba%ab%e7%b4%a2%e5%bc%95%e9%87%8d%e5%bb%ba-%e6%94%b9%e5%96%84%e6%95%88%e8%83%bd%e9%9a%a8%e8%91%97%e6%99%82%e9%96%93%e8%80%8c%e9%99%8d%e4%bd%8e%e8%88%87%e6%94%b9%e5%96%84","status":"publish","type":"post","link":"http:\/\/blog.infinity.idv.tw\/?p=1789","title":{"rendered":"WSUS\u8cc7\u6599\u5eab\u7d22\u5f15\u91cd\u5efa-\u6539\u5584\u6548\u80fd\u96a8\u8457\u6642\u9593\u800c\u964d\u4f4e\u8207\u6539\u5584\u51fa\u73fe\u91cd\u8a2d\u4f3a\u670d\u5668\u7bc0\u9ede\u7684\u72c0\u6cc1"},"content":{"rendered":"<p><font size=\"4\">WSUS Server \u5b89\u88ddSQL Server Management Studio Express     <br \/>\u53ef\u4e0a\u5fae\u8edf\u5b98\u7db2\u6293\u53d6      <br \/>SSMS-Setup-CHT_2014.exe<\/font><\/p>\n<p> <font size=\"4\">       <\/p>\n<p>\u958b\u555fSQL Server Management Studio Express \u9023\u7dda\u4f4d\u7f6e\u8f38\u5165(WSUS\u4f7f\u7528WID\u8cc7\u6599\u5eab\u5b89\u88dd\u6a21\u5f0f)      <br \/><a href=\"file:\/\/\\\\.\\pipe\\MICROSOFT##WID\\tsql\\query \">\\\\.\\pipe\\MICROSOFT##WID\\tsql\\query        <br \/><\/a><\/p>\n<p>     <\/font>  <\/p>\n<p><font size=\"4\"><font size=\"4\"><font size=\"4\">\u5efa\u7acb\u81ea\u8a02\u7d22\u5f15 \u65b0\u589e\u67e5\u8a62<\/font><\/font><\/font><\/p>\n<p><font size=\"4\"><font size=\"4\"><font size=\"4\">&#8212; Create custom index in tbLocalizedPropertyForRevision         <br \/> USE [SUSDB]<\/font><\/font><font size=\"4\"> <\/font><\/font><\/p>\n<p><font size=\"4\">CREATE NONCLUSTERED INDEX [nclLocalizedPropertyID] ON [dbo].[tbLocalizedPropertyForRevision]     <br \/> (      <br \/>&#160;&#160;&#160;&#160;&#160; [LocalizedPropertyID] ASC      <br \/> )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]<\/font><\/p>\n<p> <font size=\"4\"><\/font>  <\/p>\n<p><font size=\"4\">&#8212; Create custom index in tbRevisionSupersedesUpdate     <br \/> CREATE NONCLUSTERED INDEX [nclSupercededUpdateID] ON [dbo].[tbRevisionSupersedesUpdate]      <br \/> (      <br \/>&#160;&#160;&#160;&#160;&#160; [SupersededUpdateID] ASC      <br \/> )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]<\/font><\/p>\n<p><font size=\"4\"><font size=\"4\"><font size=\"4\">         <br \/><\/font><\/font><\/font><\/p>\n<p><font size=\"4\"><\/font><\/p>\n<p> <font size=\"4\"><\/font>  <\/p>\n<p><font size=\"4\"><\/font><\/p>\n<p><font size=\"4\">\u65b0\u589e\u67e5\u8a62\u57f7\u884c\u7d22\u5f15\u91cd\u5efa T-SQL     <br \/> USE SUSDB;       <br \/> GO       <br \/> SET NOCOUNT ON;       <br \/>&#160; <br \/>&#8212; Rebuild or reorganize indexes based on their fragmentation levels       <br \/> DECLARE @work_to_do TABLE (       <br \/>&#160;&#160;&#160; objectid int       <br \/>&#160;&#160;&#160; , indexid int       <br \/>&#160;&#160;&#160; , pagedensity float       <br \/>&#160;&#160;&#160; , fragmentation float       <br \/>&#160;&#160;&#160; , numrows int       <br \/> )       <br \/>&#160; <br \/> DECLARE @objectid int;       <br \/> DECLARE @indexid int;       <br \/> DECLARE @schemaname nvarchar(130);&#160; <br \/> DECLARE @objectname nvarchar(130);&#160; <br \/> DECLARE @indexname nvarchar(130);&#160; <br \/> DECLARE @numrows int       <br \/> DECLARE @density float;       <br \/> DECLARE @fragmentation float;       <br \/> DECLARE @command nvarchar(4000);&#160; <br \/> DECLARE @fillfactorset bit       <br \/> DECLARE @numpages int       <br \/>&#160; <br \/>&#8212; Select indexes that need to be defragmented based on the following       <br \/> &#8212; * Page density is low       <br \/> &#8212; * External fragmentation is high in relation to index size       <br \/> PRINT &#8216;Estimating fragmentation: Begin. &#8216; + convert(nvarchar, getdate(), 121)&#160; <br \/> INSERT @work_to_do       <br \/> SELECT       <br \/>&#160;&#160;&#160; f.object_id       <br \/>&#160;&#160;&#160; , index_id       <br \/>&#160;&#160;&#160; , avg_page_space_used_in_percent       <br \/>&#160;&#160;&#160; , avg_fragmentation_in_percent       <br \/>&#160;&#160;&#160; , record_count       <br \/> FROM&#160; <br \/>&#160;&#160;&#160; sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, &#8216;SAMPLED&#8217;) AS f       <br \/> WHERE       <br \/>&#160;&#160;&#160; (f.avg_page_space_used_in_percent &lt; 85.0 and f.avg_page_space_used_in_percent\/100.0 * page_count &lt; page_count &#8211; 1)       <br \/>&#160;&#160;&#160; or (f.page_count &gt; 50 and f.avg_fragmentation_in_percent &gt; 15.0)       <br \/>&#160;&#160;&#160; or (f.page_count &gt; 10 and f.avg_fragmentation_in_percent &gt; 80.0)       <br \/>&#160; <br \/> PRINT &#8216;Number of indexes to rebuild: &#8216; + cast(@@ROWCOUNT as nvarchar(20))       <br \/>&#160; <br \/> PRINT &#8216;Estimating fragmentation: End. &#8216; + convert(nvarchar, getdate(), 121)       <br \/>&#160; <br \/> SELECT @numpages = sum(ps.used_page_count)       <br \/> FROM       <br \/>&#160;&#160;&#160;&#160; @work_to_do AS fi       <br \/>&#160;&#160;&#160; INNER JOIN sys.indexes AS i ON fi.objectid = i.object_id and fi.indexid = i.index_id       <br \/>&#160;&#160;&#160; INNER JOIN sys.dm_db_partition_stats AS ps on i.object_id = ps.object_id and i.index_id = ps.index_id       <br \/>&#160; <br \/> &#8212; Declare the cursor for the list of indexes to be processed.       <br \/> DECLARE curIndexes CURSOR FOR SELECT * FROM @work_to_do       <br \/>&#160; <br \/> &#8212; Open the cursor.       <br \/> OPEN curIndexes       <br \/>&#160; <br \/> &#8212; Loop through the indexes       <br \/> WHILE (1=1)       <br \/> BEGIN       <br \/>&#160;&#160;&#160; FETCH NEXT FROM curIndexes       <br \/>&#160;&#160;&#160; INTO @objectid, @indexid, @density, @fragmentation, @numrows;       <br \/>&#160;&#160;&#160; IF @@FETCH_STATUS &lt; 0 BREAK;       <br \/>&#160; <br \/>&#160;&#160;&#160; SELECT&#160; <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; @objectname = QUOTENAME(o.name)       <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; , @schemaname = QUOTENAME(s.name)       <br \/>&#160;&#160;&#160; FROM&#160; <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; sys.objects AS o       <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; INNER JOIN sys.schemas as s ON s.schema_id = o.schema_id       <br \/>&#160;&#160;&#160;&#160; WHERE&#160; <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; o.object_id = @objectid;       <br \/>&#160; <br \/>&#160;&#160;&#160; SELECT&#160; <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; @indexname = QUOTENAME(name)       <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; , @fillfactorset = CASE fill_factor WHEN 0 THEN 0 ELSE 1 END       <br \/>&#160;&#160;&#160; FROM&#160; <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; sys.indexes       <br \/>&#160;&#160;&#160; WHERE       <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; object_id = @objectid AND index_id = @indexid;       <br \/>&#160; <br \/>&#160;&#160;&#160; IF ((@density BETWEEN 75.0 AND 85.0) AND @fillfactorset = 1) OR (@fragmentation &lt; 30.0)       <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; SET @command = N&#8217;ALTER INDEX &#8216; + @indexname + N&#8217; ON &#8216; + @schemaname + N&#8217;.&#8217; + @objectname + N&#8217; REORGANIZE&#8217;;       <br \/>&#160;&#160;&#160; ELSE IF @numrows &gt;= 5000 AND @fillfactorset = 0       <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; SET @command = N&#8217;ALTER INDEX &#8216; + @indexname + N&#8217; ON &#8216; + @schemaname + N&#8217;.&#8217; + @objectname + N&#8217; REBUILD WITH (FILLFACTOR = 90)&#8217;;       <br \/>&#160;&#160;&#160; ELSE       <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; SET @command = N&#8217;ALTER INDEX &#8216; + @indexname + N&#8217; ON &#8216; + @schemaname + N&#8217;.&#8217; + @objectname + N&#8217; REBUILD&#8217;;       <br \/>&#160;&#160;&#160; PRINT convert(nvarchar, getdate(), 121) + N&#8217; Executing: &#8216; + @command;       <br \/>&#160;&#160;&#160; EXEC (@command);       <br \/>&#160;&#160;&#160; PRINT convert(nvarchar, getdate(), 121) + N&#8217; Done.&#8217;;       <br \/> END       <br \/>&#160; <br \/> &#8212; Close and deallocate the cursor.       <br \/> CLOSE curIndexes;       <br \/> DEALLOCATE curIndexes;       <br \/>&#160; <br \/>&#160; <br \/> IF EXISTS (SELECT * FROM @work_to_do)       <br \/> BEGIN       <br \/>&#160;&#160;&#160; PRINT &#8216;Estimated number of pages in fragmented indexes: &#8216; + cast(@numpages as nvarchar(20))       <br \/>&#160;&#160;&#160; SELECT @numpages = @numpages &#8211; sum(ps.used_page_count)       <br \/>&#160;&#160;&#160; FROM       <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; @work_to_do AS fi       <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; INNER JOIN sys.indexes AS i ON fi.objectid = i.object_id and fi.indexid = i.index_id       <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; INNER JOIN sys.dm_db_partition_stats AS ps on i.object_id = ps.object_id and i.index_id = ps.index_id       <br \/>&#160; <br \/>&#160;&#160;&#160; PRINT &#8216;Estimated number of pages freed: &#8216; + cast(@numpages as nvarchar(20))       <br \/> END       <br \/> GO       <br \/>&#160; <br \/>&#160; <br \/> &#8211;Update all statistics       <br \/> PRINT &#8216;Updating all statistics.&#8217; + convert(nvarchar, getdate(), 121)&#160; <br \/> EXEC sp_updatestats       <br \/> PRINT &#8216;Done updating statistics.&#8217; + convert(nvarchar, getdate(), 121)&#160; <br \/> GO<\/font><\/p>\n<p> <font size=\"4\"><\/font>  <\/p>\n<p><font size=\"4\">&#160;<\/font><\/p>\n","protected":false},"excerpt":{"rendered":"<p>WSUS Server \u5b89\u88ddSQL Server Management Studio Express     \u53ef\u4e0a\u5fae\u8edf\u5b98\u7db2\u6293\u53d6      SSMS-Setup-CHT_2014.exe<\/p>\n<\/p>\n<p>\u958b\u555fSQL Server Management Studio Express \u9023\u7dda\u4f4d\u7f6e\u8f38\u5165(WSUS\u4f7f\u7528WID\u8cc7\u6599\u5eab\u5b89\u88dd\u6a21\u5f0f)      \\\\.\\pipe\\MICROSOFT##WID\\tsql\\query        <\/p>\n<\/p>\n<p>\u5efa\u7acb\u81ea\u8a02\u7d22\u5f15 \u65b0\u589e\u67e5\u8a62<\/p>\n<p>&#8212; Create custom [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":[],"categories":[32],"tags":[698],"_links":{"self":[{"href":"http:\/\/blog.infinity.idv.tw\/index.php?rest_route=\/wp\/v2\/posts\/1789"}],"collection":[{"href":"http:\/\/blog.infinity.idv.tw\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.infinity.idv.tw\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.infinity.idv.tw\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.infinity.idv.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1789"}],"version-history":[{"count":2,"href":"http:\/\/blog.infinity.idv.tw\/index.php?rest_route=\/wp\/v2\/posts\/1789\/revisions"}],"predecessor-version":[{"id":1791,"href":"http:\/\/blog.infinity.idv.tw\/index.php?rest_route=\/wp\/v2\/posts\/1789\/revisions\/1791"}],"wp:attachment":[{"href":"http:\/\/blog.infinity.idv.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1789"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.infinity.idv.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1789"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.infinity.idv.tw\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1789"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}