Как определить запрос, который использует sp_cursorfetch - PullRequest
1 голос
/ 04 марта 2011

Профилировщик показывает, что мой сервер перегружен множеством вызовов sp_cursorfetch, но я хочу знать, какие запросы вызывают весь этот трафик.

Ответы [ 3 ]

3 голосов
/ 20 апреля 2011

Профилировщик в этом случае не будет работать.

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

выберите CPU, TextData FROM cpu гдеLoginName = 'db_name_here' упорядочить по CPU desc

// Обязательно замените db_name_here

Результат, который я получил, показал такие вещи:

CPU----TextData-----------------------------

0------exec sp_cursorfetch 180150000, 16, 7415, 1

* Примечание: The "- "выше, просто отформатировать его, чтобы он действительно читался на этом сайте.

========

Единственные ответы, которые я нашел на этом:

  • Операторы выбора являются единственной причиной этих выборок курсора, и изучение ваших индексов наиболее часто используемых таблиц является хорошим первым шагом к решению проблемы

  • Возможно, вывозможность фильтровать трассировку по SPID вызова cursorfetch, чтобы увидеть, что он делает до и после запуска sp_cursorfetch.

  • Получить только подмножество общего набора записей, которым вы в данный момент являетесь.Скажем, вы взяли 100 строк сейчас.Возьмите только 10, потому что 10 - это максимум, который пользователь может видеть в любой момент времени.

1 голос
/ 26 апреля 2011

В ответ на комментарий:

Thanks for your suggestions, all of which are helpful. Unfortunately the queries in question are from a third party application, of which I do not have direct access to view or modify the queries. If I find a query that is a particuar problem, I can submit a support request to have it reviewed. I just need to know what the query is, first. – Shandy Apr 21 at 8:17

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

  1. Операторы выбора являются единственной причиной этих выборок курсора, и изучение ваших индексов наиболее часто используемых таблиц является хорошим первым шагом к решению проблемы

    • Это делается на сервере базы данных.Вам нужно просто запустить профиль настройки в базе данных и запустить помощник по настройке SQL с использованием созданного профиля.Это поможет улучшить индексы
  2. Возможно, вы сможете отфильтровать трассировку по SPID вызова cursorfetch, чтобы увидеть, что он делает до и после запуска sp_cursorfetch.

    • Это то, что вы делаете и с помощью профилировщика SQL
  3. Извлекайте только подмножество всего набора RecordSet, которым вы в данный момент являетесь.Скажем, вы взяли 100 строк сейчас.Получите только 10, потому что 10 - это максимум, который пользователь может видеть в любой момент времени.

    • Это делается на уровне приложения

ЧтоВерсия сервера SQL вы работаете?Решением для этого стало обновление до SQL Server 2008 в моем случае.Я бы попробовал это, чтобы увидеть, куда это идет.

Поскольку у вас нет доступа к приложению, скорее всего, проблема в использовании курсора.Если вы посмотрите на http://sqlpractices.wordpress.com/2008/01/11/performance-tuning-sql-server-cursors/, то увидите, что большинство альтернатив включают редактирование запущенных запросов приложений.

В чем реальная проблема?Почему вы профилируете базу данных?

0 голосов
/ 04 марта 2011

Для этого вам может понадобиться profiler .

Я не уверен, что вы пытаетесь достичь, если вы делаете план выполнения пакетного процесса может быть полезным.

Надеюсь, это поможет:)

...