В теории мониторинг производительности SQL Server довольно прост:
- Изучите главные типы ожиданий (wait types) на сервере.
- Найдите запросы, вызывающие эти типы ожиданий.
- Исправьте эти запросы или улучшите реакцию сервера на них (индексы, настройки и т.д.).
Но на практике шаг 2 ужасен, потому что:
- Приложения отправляют на сервер баз данных непараметризованные строки.
- Пользователи Entity Framework строят запросы с
FromSqlRawилиstring.Format(). - Пользователи Entity Framework пишут запросы с
.Contains, который создаёт непараметризованный списокIN, даже когда ищут всего одно значение (в EF9 стало лучше). - Люди пишут неаккуратный динамический SQL, который просто вставляет значения прямо в строку запроса.
- Разработчики SaaS-решений помещают каждого клиента в собственную базу данных, и планы не переиспользуются между базами данных.
