У вас есть пара вопросов:
Существуют ли какие-либо инструменты для специального мониторинга / обнаружения проблем с отслеживанием параметров, в отличие от тех, которые сообщают о запросах, которые занимают много времени?
Чтобы поймать это, вам нужно отслеживать кэш процедур, чтобы узнать, когда план выполнения запроса меняется с хорошего на плохой. SQL Server 2008 сделал это намного проще, добавив поля query_hash и query_plan_hash в sys.dm_exec_query_stats. Вы можете сравнить текущий план запроса с прошлым для того же самого query_hash, а когда он изменится, сравнить количество логических чтений или количество рабочего времени от старого запроса до нового. Если это резко возрастет, у вас может быть проблема с анализом параметров.
С другой стороны, кто-то мог просто удалить индекс или изменить код в вызываемой UDF, или изменить MAXDOP, или любой из миллиона параметров, влияющих на поведение плана запроса.
То, что вам нужно, - это одна панель мониторинга, которая отображает самые ресурсоемкие запросы в совокупности (потому что у вас может быть эта проблема в запросе, который вызывается очень часто, но каждый раз потребляет небольшое количество ресурсов), а затем показывает изменения в его план выполнения с течением времени, плюс накладывает на изменения уровня системы и базы данных. Quest Foglight Performance Analysis делает это. (Раньше я работал на Quest, поэтому знаю продукт, но здесь я не шиллинг.) Обратите внимание, что Quest продает отдельный продукт, Foglight, который не имеет ничего общего с Performance Analysis. Я не знаю ни о каком другом продукте, который входит в этот уровень детализации.
Я мог видеть раздел в плане запроса, в котором число предполагаемых строк было 1, но фактическое количество строк составляло несколько сотен тысяч.
Это не обязательно сниффинг параметров - это может быть, например, плохая статистика или использование табличных переменных. Чтобы решить эту проблему, мне нравится бесплатный инструмент SQL Sentry Plan Advisor . На вкладке «Основные операции» выделены различия между оценочными и фактическими строками.
Теперь, это только для одного плана за раз, и вы должны сначала знать план. Вы хотите сделать это 24/7, верно? Конечно, вы делаете - но это требует больших вычислительных ресурсов. Кэш процедур может быть огромным (у меня есть клиенты с> 100 ГБ кэша процедур), и это все неиндексированный XML. Чтобы сравнить примерные и фактические строки, вам нужно уничтожить весь этот XML - и помнить, что кэш процедур может постоянно меняться под нагрузкой.
Что вам действительно нужно, так это продукт, который мог бы очень быстро выгрузить весь кэш процедур в базу данных, добавить в него XML-индексы, а затем сравнить оценки с фактическими строками. Я могу представить сценарий, который делает это, но я еще не видел его.