Мониторинг длины очереди диска и очередей транзакций СУБД для 1С
Симптомы перегрузки дисковой подсистемы 1С
Пользователи 1С жалуются на зависание проведения документов, долгую блокировку форм при подборе номенклатуры и ошибки «Конфликт блокировок при выполнении транзакции». В отчетах производительности APDEX фиксируются провалы ниже 0.7.
| Метрика | Нормальное значение | Критический порог |
|---|---|---|
| Avg Disk sec/Read (Задержка чтения) | < 10-12 мс | > 20-25 мс (дисковый затор) |
| Avg Disk sec/Write (Задержка записи) | < 5 мс (с RAID/BBU) | > 15 мс (риск потери темпа транзакций) |
| Current Disk Queue Length | < 2 на каждый шпиндель | > 5-10 на массив постоянной очереди |
Методология анализа задержек ввода-вывода и транзакций
- Анализ очередей и задержек через счетчики системного монитора (Perfmon):
PhysicalDisk(*)\Current Disk Queue Length: моментальный снимок очереди запросов к накопителю.PhysicalDisk(*)\Avg. Disk sec/Transfer: реальное суммарное время реакции физического диска на операцию ввода-вывода.
- Поиск ожиданий дискового ввода-вывода на стороне SQL Server: выполните запрос для обнаружения узких мест хранилища:
SELECT wait_type, waiting_tasks_count, wait_time_ms / 1000.0 AS wait_time_sec, 100.0 * wait_time_ms / SUM(wait_time_ms) OVER() AS percentage FROM sys.dm_os_wait_stats WHERE wait_type IN ('PAGEIOLATCH_SH', 'PAGEIOLATCH_EX', 'WRITELOG', 'ASYNC_NETWORK_IO') ORDER BY wait_time_ms DESC; - Проверка задержек на уровне отдельных файлов баз данных 1С:
SELECT DB_NAME(database_id) AS DatabaseName, file_id, io_stall_read_ms / num_of_reads AS AvgReadLatency_ms, io_stall_write_ms / num_of_writes AS AvgWriteLatency_ms FROM sys.dm_io_virtual_file_stats(NULL, NULL) WHERE num_of_reads > 0 AND num_of_writes > 0 ORDER BY AvgReadLatency_ms DESC;
Расшифровка ожиданий: Ожидание WRITELOG говорит о том, что транзакции 1С упираются в скорость записи на диск с логом транзакций (.ldf). Вынесите файлы журнала LDF на отдельный массив высокоскоростных накопителей (NVMe/RAID-10).
Частые вопросы (FAQ)
Почему метрика Current Disk Queue Length может врать на SSD и SAN?
Счетчик Current Disk Queue Length был разработан для шпиндельных HDD. Современные SSD и SAN массивы поддерживают тысячи параллельных очередей (NVMe deep queues), поэтому ориентироваться нужно строго на метрику Avg Disk sec/Read и Write.
Что означает высокое ожидание PAGEIOLATCH_SH в 1С?
SQL Server не находит нужные данные в оперативной памяти (Buffer Pool) и вынужден вычитывать страницы данных с физического диска. Требуется добавить RAM серверу или оптимизировать тяжелые запросы 1С.
Как изолировать базу tempdb для снятия дисковой очереди?
Базу tempdb необходимо размещать на самых быстрых дисках и разбивать на несколько файлов данных одинакового размера (по количеству ядер CPU, но не более 8).
Какая задержка записи в лог транзакций считается идеальной для 1С?
Для высоконагруженных систем 1С задержка записи лога (Avg Disk sec/Write для файла ldf) не должна превышать 1-3 миллисекунд.