Недостатки MARS (множественные активные наборы результатов)?

85

Кто-нибудь знает о недостатках MARS (Multiple Active Result Sets)? Кто-нибудь знает причину, по которой следует избегать использования MARS, например, случаи, когда курсоры более полезны, чем MARS.

Самикша
источник

Ответы:

61

Очевидно, есть по крайней мере два известных (потенциальных) недостатка (из этого (1) блога команды ):

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

  2. «С помощью MARS вы можете отправлять на сервер несколько пакетов с несколькими операторами. Сервер будет чередовать выполнение таких пакетов, что означает, что если пакеты изменяют состояние сервера с помощью операторов SET или USE, например, или используют операторы управления транзакциями TSQL (BEGIN TRAN, COMMIT, ROLLBACK), и вы, и сервер можете запутаться. о том, каковы ваши истинные намерения ".

Мне еще предстоит опробовать дизайн с поддержкой MARS, но я очень близок к тому, чтобы сделать это в моем текущем проекте. У нас есть небольшая проблема с конкурирующими (а иногда и зависимыми) операциями запросов (например, с отложенной загрузкой данных конфигурации из той же базы данных, которую выполняет активный набор записей).

Дополнительная информация на сайте MSDN (2) здесь.

[(1) http://blogs.msdn.com/sqlnativeclient/archive/2006/09/27/774290.aspx ]
[(2)http://msdn.microsoft.com/en-us/library/ms131686.aspx ]

RobS
источник
3
Прежде чем применять отличное решение @RobS, я бы сначала прочитал эту статью, чтобы убедиться, что вы не можете решить эту проблему с помощью следующего решения: devproconnections.com/development/… ИЛИ добавив .ToList () в конец вашего вызова БД, что решил мою проблему. Кстати, спасибо RobS за отличный совет, MARS пригодится в будущем. :)
Termato
6
  • Это требует немного больше ресурсов сервера, чем одно соединение за раз.
  • У вас должен быть SQL Server 2005 или новее. Так что это может быть проблемой в устаревших (ах!) Средах.
Дэйв Маркл
источник
вы можете прекрасно использовать SqlTransaction.
Mladen Prajdic
18
Насколько "чуть больше ресурсов сервера"? Можете ли вы оценить его с точки зрения памяти или процессора? Меня это интересует главным образом потому, что я нахожусь в среде Azure, где ресурсы пропорциональны стоимости сервера.
Mathias Lykkegaard Lorenzen 06
1
@MathiasLykkegaardLorenzen Вы когда-нибудь находили ответ на свой вопрос?
Sinjai 05
4

в зависимости от чего? реальных минусов нет.

они не поддерживают точки сохранения транзакций. но я не считаю это недостатком.

Младен Прайдич
источник