Кожен, хто запускає завдання в планувальнику завдань Windows, рано чи пізно наштовхнеться на незрозумілі відмінності у часі виконання. Сценарій PHP, який виконується за 5 хвилин у командному рядку, раптово потребує 20 хвилин, якщо його запустити через планувальник завдань Windows. Той самий користувач, ті самі права, той самий код – у чотири рази більше часу виконання. Що там відбувалося?
У неробочий час Налагодження, Сеанси моніторингу процесів і незліченні порівняння конфігурацій, рішення було вражаюче простим: планування завдань Windows за замовчуванням встановлює нижчий пріоритет процесу. Значення за замовчуванням для завдань у Планувальнику завдань: 7 (Нижче норми), не 4-6 (Нормально), як і слід було очікувати. Ця, здавалося б, невелика різниця може призвести до значної втрати продуктивності в операціях із інтенсивним введенням-виведенням.
Детальний опис рівнів пріоритету Windows наведено нижче.:
| Значення | Пріоритет | Опис |
|---|---|---|
| 0 | У режимі реального часу | Найвищий пріоритет (обережно!) |
| 1 | Високий | Високий пріоритет |
| 2-3 | Вище норми | Про нормальний |
| 4-6 | Звичайний | Стандарт для інтерактивних процесів |
| 7 | Нижче норми | ЗА ЗАМОВЧАННЯМ у планувальнику завдань |
| 8-9 | Нижче норми | Ще нижче |
| 10 | Холостий хід | Найнижчий пріоритет |
Проблема з пріоритетом у плануванні завдань є багатогранною: коли ви експортуєте завдання та переглядаєте XML, ви часто знаходите ні Налаштування пріоритету. Після цього Windows непомітно використовуватиме значення за замовчуванням 7. Графічний інтерфейс відображає це значення під час експорту, але воно явно не зберігається в завданні. Нижчий пріоритет не лише призводить до меншого часу процесора, але й:
- Операції вводу-виводу диска з обмеженим доступом
- Нижчий пріоритет мережі
- Погане кешування файлової системи
- Затримки в доступі до бази даних
Навіть якщо ви використовуєте того самого користувача та ввімкнули опцію «Запускати з найвищими правами», завдання виконується в іншому середовищі станції/робочого столу Windows з іншими пріоритетами. Щоб визначити проблему, можна скористатися PowerShell, щоб отримати список усіх завдань з їхніми фактичними пріоритетами.:
38b7fa6c77dc344401485cd338ea4128
Майже всі мої завдання виконувалися з пріоритетом 7. Тепер ми спеціально коригуємо пріоритет кількох завдань одночасно:
38b7fa6c77dc344401485cd338ea4128
Після встановлення пріоритету 4 Мій сценарій PHP знову запустився (нормально) через очікувані 300 секунд. Якщо ви налаштували завдання з певним обліковим записом користувача, ви можете просто ввести це в рядку 10, як показано нижче:
38b7fa6c77dc344401485cd338ea4128