Ускорение загрузки обновлений для сервера 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 - Быстро
0 - Медленно (по умолчанию)
******/
SELECT [BitsDownloadPriorityForeground]
FROM [SUSDB].[dbo].[tbConfigurationC]

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

Для того, чтобы включить ускоренную загрузку обновлений, выполните следующий скрипт:

/****** Ускорение скачивания обновлений при помощи WSUS  ******/
USE SUSDB
SELECT [BitsDownloadPriorityForeground]
FROM [SUSDB].[dbo].[tbConfigurationC]
UPDATE dbo.tbConfigurationC
SET BitsDownloadPriorityForeground=1
SELECT [BitsDownloadPriorityForeground]
FROM [SUSDB].[dbo].[tbConfigurationC]

После выполнения данной команды WSUS с радостью будет скачивать апдейты со всей возможной скоростью. Но если необходимость в быстрой закачке обновлений пропадает, отключить ее можно следующим скриптом:

/****** Установка низкой скорости загрузки (поумолчанию)  ******/
 
USE SUSDB
UPDATE dbo.tbConfigurationC
SET BitsDownloadPriorityForeground=1

 

Таким образом можно управлять скоростью загрузки обновлений. Но это еще только начала Microsoft SQL Server кроме всего прочего имеет свой собственный планировщик! А это означает, что процесс увеличения скорости скачивания или ее уменьшения можно регулировать по расписанию. Для этого достаточно создать 2 задания, первое будет включать ускоренную загрузку (например вечером или ночью или в выходные), а второе возвращать значение по умолчанию, тем самым замедляя скорость загрузки в рабочее время. Особенно это удобно, когда скачивается большое количество обновлений на разные продукты.

В завершение, для ленивых и для тех кто не любит GUI привожу текст заданий для планировщика, дабы автоматизировать описаны процесс.

Внимание. В параметре

 @server_name = N’MY_SERVER’

В место MY_SERVER  укажите имя Вашего сервера

Скрипт для создания задачи на включение полной скорости скачивания (Запускается ежедневно в 20.00):

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):

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

 

     

iOnLine - сайт о мире IT  | Мобильная версия


Полная версия сайта