Что делают эти sys.sp_ * хранимые процедуры? - PullRequest
2 голосов
/ 17 февраля 2010

Я выявляю странную проблему с производительностью в моей установке SQL-сервера. В моей системе выполнение конкретной хранимой процедуры занимает 2 минуты; в системе коллеги это занимает менее 1 секунды. У нас есть похожие базы данных / данные и конфигурации, но, очевидно, что-то совсем другое.

Я запустил данный SP через Profiler в обеих системах и заметил нечто странное. В моей системе я вижу 9 записей со следующими свойствами:

  • Длительность намного выше по сравнению с другими строками. У меня есть значения до 37 698 и до 1734. В «быстрой» системе максимальная продолжительность (для всего вызова SP) составляет 259.
  • Они выполняются для двух баз данных, связанных с той, которая содержит SP, на котором я работаю. (Этот SP делает вызовы через связанные серверы на эти две базы данных).
  • Это исполнения одного из следующих системных SP:
    • sp_tables_info_90_rowset
    • sp_check_constbytable_rowset
    • sp_columns_90_rowset
    • sp_table_statistics2_rowset
    • sp_indexes_90_rowset

Я не могу найти Googleable документацию о том, что это такое, почему они будут такими медленными или почему они будут работать в одной системе, но не в другой. Кто-нибудь знает, о чем они все?

Ответы [ 6 ]

2 голосов
/ 18 февраля 2010

Попробуйте вручную обновить статистику для этой таблицы.

UPDATE STATISTICS [TableName]

Затем дважды проверьте, что параметр базы данных AutoUpdateStatistics имеет значение ИСТИНА. Однако даже в этом случае я видел случаи, когда добавление больших объемов данных в таблицу не всегда приводило к своевременному обновлению статистики, а запросы могли быть медленными.

2 голосов
/ 17 февраля 2010

Я не знаю ответа на ваш вопрос.Но чтобы попытаться решить проблему, с которой вы столкнулись (что, как я полагаю, вас действительно интересует), первое, что я хотел бы сделать, - это выполнить переиндексирование таблиц, к которым вы обращаетесь.Это часто устраняет любую медлительность, когда условия соответствуют описанным вами (та же структура базы данных, разные данные / база данных, один и тот же запрос).

1 голос
/ 10 мая 2012

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

0 голосов
/ 25 февраля 2013

Эти sp означают, что ваш запрос попадает на связанные серверы с помощью синонимов. Этого следует избегать всякий раз, когда это возможно.

0 голосов
/ 18 февраля 2010

Последняя перестройка индекса?Последнее обновление статистики?

В противном случае эти хранимые процедуры также используются клиентом SQL Server ... нет?И, вероятно, не вызовет эти ошибки

0 голосов
/ 17 февраля 2010

Я не знаком с этими конкретными процедурами, но вы можете попробовать запустить:

SELECT object_definition(object_id('Procedure Name'))

Чтобы лучше понять, что происходит под капотом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...