Ускорение загрузки обновлений для сервера WSUS
И так. Для многих остается секретом одна проблема: WSUS очень медленно загружает обновления с серверов обновлений Microsoft. Особенно это становится критично, когда разворачивается новый сервер, нужно скачать 200-300 гигабайт обновлений, хороший канал имеется, но задача растягивается на 1-2 недели. Казалось бы, почему так?
Все очень просто. Сервер WSUS анадизирует интернет-канал по каким-то своим, одному Билу известным, алгоритмам и дабы не мешать пользователям и серверам сети работать в интернете, минимально утилизирует канал. Это хорошо в крупных организациях которые требуют хорошего интернет-канала в режиме 24х7 и лишняя утилизация канала там ни к чему. Но что делать в тех случаях, когда в не рабочее время или в выходные дни канал никому не нужен, а WSUS упорно продолжает скачивать обновления со скоростью беспарольки? Все просто.
Начиная с Windows Server 2012 R2 появилась возможность использовать не только базу данных которая идет в поставке с WSUS но и встроенную или внешнюю базу данных SQL Express, а так же базы данных Microsoft SQL Server. И это развязывает нам руки. Дело в том что все настройки WSUS хранит в своей базе данных. Использование не закрытой проприетарной базы, а вполне себе понятной SQL позволяет нам кое что поправить.
В базе имеется параметр BitsDownloadPriorityForeground в зависимости от значения которого меняется скорость загрузки обновлений:
1 – Обновления загружаются быстро
0 – Обновления загружаются медленно (по умолчанию)
Таким образом, меняя данный параметр можно менять скорость скачивания обновлений.
И так, для того чтобы узнать какой параметр установлен в базе, необходимо подключиться к ней удобными Вам средствами. Я предпочитаю Management Studio (Бесплатный инструмент от Microsoft, работает как с SQL Server так и SQL Express). По умолчанию, WSUS создает и использует базу с именем SUSDB.
После того как вы успешно подключились выполните следующий скрипт:
1 2 3 4 5 6 7 8 | /****** Определение скорости загрузки обновлений Если результат равен: 1 - Быстро 0 - Медленно (по умолчанию) ******/ SELECT [BitsDownloadPriorityForeground] FROM [SUSDB].[dbo].[tbConfigurationC] |
Результат выполнения покажет Вам, включена или нет у вас ускоренная загрузка обновлений.
Для того, чтобы включить ускоренную загрузку обновлений, выполните следующий скрипт:
1 2 3 4 5 6 7 8 | /****** Ускорение скачивания обновлений при помощи WSUS ******/ USE SUSDB SELECT [BitsDownloadPriorityForeground] FROM [SUSDB].[dbo].[tbConfigurationC] UPDATE dbo.tbConfigurationC SET BitsDownloadPriorityForeground=1 SELECT [BitsDownloadPriorityForeground] FROM [SUSDB].[dbo].[tbConfigurationC] |
После выполнения данной команды WSUS с радостью будет скачивать апдейты со всей возможной скоростью. Но если необходимость в быстрой закачке обновлений пропадает, отключить ее можно следующим скриптом:
1 2 3 4 5 | /****** Установка низкой скорости загрузки (поумолчанию) ******/ USE SUSDB UPDATE dbo.tbConfigurationC SET BitsDownloadPriorityForeground=1 |
Таким образом можно управлять скоростью загрузки обновлений. Но это еще только начала Microsoft SQL Server кроме всего прочего имеет свой собственный планировщик! А это означает, что процесс увеличения скорости скачивания или ее уменьшения можно регулировать по расписанию. Для этого достаточно создать 2 задания, первое будет включать ускоренную загрузку (например вечером или ночью или в выходные), а второе возвращать значение по умолчанию, тем самым замедляя скорость загрузки в рабочее время. Особенно это удобно, когда скачивается большое количество обновлений на разные продукты.
В завершение, для ленивых и для тех кто не любит GUI привожу текст заданий для планировщика, дабы автоматизировать описаны процесс.
Внимание. В параметре
@server_name = N’MY_SERVER’
В место MY_SERVER укажите имя Вашего сервера
Скрипт для создания задачи на включение полной скорости скачивания (Запускается ежедневно в 20.00):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | USE [msdb] GO DECLARE @jobId BINARY(16) EXEC msdb.dbo.sp_add_job @job_name=N'SET FAST SPEED WSUS UPDATE DOWNLOAD', @enabled=1, @notify_level_eventlog=0, @notify_level_email=2, @notify_level_netsend=2, @notify_level_page=2, @delete_level=0, @category_name=N'[Uncategorized (Local)]', @owner_login_name=N'SA', @job_id = @jobId OUTPUT select @jobId GO EXEC msdb.dbo.sp_add_jobserver @job_name=N'SET FAST SPEED WSUS UPDATE DOWNLOAD', @server_name = N'MY_SERVER' GO USE [msdb] GO EXEC msdb.dbo.sp_add_jobstep @job_name=N'SET FAST SPEED WSUS UPDATE DOWNLOAD', @step_name=N'SET FAST SPEED WSUS UPDATE DOWNLOAD', @step_id=1, @cmdexec_success_code=0, @on_success_action=1, @on_fail_action=2, @retry_attempts=0, @retry_interval=0, @os_run_priority=0, @subsystem=N'TSQL', @command=N'USE SUSDB UPDATE dbo.tbConfigurationC SET BitsDownloadPriorityForeground=1', @database_name=N'SUSDB', @flags=0 GO USE [msdb] GO EXEC msdb.dbo.sp_update_job @job_name=N'SET FAST SPEED WSUS UPDATE DOWNLOAD', @enabled=1, @start_step_id=1, @notify_level_eventlog=0, @notify_level_email=2, @notify_level_netsend=2, @notify_level_page=2, @delete_level=0, @description=N'', @category_name=N'[Uncategorized (Local)]', @owner_login_name=N'SA', @notify_email_operator_name=N'', @notify_netsend_operator_name=N'', @notify_page_operator_name=N'' GO USE [msdb] GO DECLARE @schedule_id int EXEC msdb.dbo.sp_add_jobschedule @job_name=N'SET FAST SPEED WSUS UPDATE DOWNLOAD', @name=N'SET_FAST_SPEED_WSUS_UPDATE_DOWNLOAD', @enabled=1, @freq_type=4, @freq_interval=1, @freq_subday_type=1, @freq_subday_interval=0, @freq_relative_interval=0, @freq_recurrence_factor=1, @active_start_date=20161029, @active_end_date=99991231, @active_start_time=200000, @active_end_time=235959, @schedule_id = @schedule_id OUTPUT select @schedule_id GO |
Скрипт для создания задачи на Отключение полной скорости скачивания (Запускается ежедневно в 07.00):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | USE [msdb] GO DECLARE @jobId BINARY(16) EXEC msdb.dbo.sp_add_job @job_name=N'SET LOW SPEED WSUS UPDATE DOWNLOAD', @enabled=1, @notify_level_eventlog=0, @notify_level_email=2, @notify_level_netsend=2, @notify_level_page=2, @delete_level=0, @category_name=N'[Uncategorized (Local)]', @owner_login_name=N'SA', @job_id = @jobId OUTPUT select @jobId GO EXEC msdb.dbo.sp_add_jobserver @job_name=N'SET LOW SPEED WSUS UPDATE DOWNLOAD', @server_name = N'MY_SERVER' GO USE [msdb] GO EXEC msdb.dbo.sp_add_jobstep @job_name=N'SET LOW SPEED WSUS UPDATE DOWNLOAD', @step_name=N'SET LOW SPEED', @step_id=1, @cmdexec_success_code=0, @on_success_action=1, @on_fail_action=2, @retry_attempts=0, @retry_interval=0, @os_run_priority=0, @subsystem=N'TSQL', @command=N'USE SUSDB UPDATE dbo.tbConfigurationC SET BitsDownloadPriorityForeground=0', @database_name=N'SUSDB', @flags=0 GO USE [msdb] GO EXEC msdb.dbo.sp_update_job @job_name=N'SET LOW SPEED WSUS UPDATE DOWNLOAD', @enabled=1, @start_step_id=1, @notify_level_eventlog=0, @notify_level_email=2, @notify_level_netsend=2, @notify_level_page=2, @delete_level=0, @description=N'', @category_name=N'[Uncategorized (Local)]', @owner_login_name=N'SA', @notify_email_operator_name=N'', @notify_netsend_operator_name=N'', @notify_page_operator_name=N'' GO USE [msdb] GO DECLARE @schedule_id int EXEC msdb.dbo.sp_add_jobschedule @job_name=N'SET LOW SPEED WSUS UPDATE DOWNLOAD', @name=N'SET_LOW_SPEED', @enabled=1, @freq_type=4, @freq_interval=1, @freq_subday_type=1, @freq_subday_interval=0, @freq_relative_interval=0, @freq_recurrence_factor=1, @active_start_date=20161029, @active_end_date=99991231, @active_start_time=70000, @active_end_time=235959, @schedule_id = @schedule_id OUTPUT select @schedule_id GO |