Кто-нибудь знает о недостатках MARS (Multiple Active Result Sets)? Кто-нибудь знает причину, по которой следует избегать использования MARS, например, случаи, когда курсоры более полезны, чем MARS.
Ответы:
Очевидно, есть по крайней мере два известных (потенциальных) недостатка (из этого (1) блога команды ):
Очевидно, что это может вызвать потенциальные проблемы для любых устаревших систем, которые не были разработаны для работы с конструкцией с поддержкой MARS - «существующий код, оптимизированный для работы в мире, не относящемся к MARS, может показывать небольшое снижение производительности при запуске без изменений с MARS»
«С помощью 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 ]
в зависимости от чего? реальных минусов нет.
они не поддерживают точки сохранения транзакций. но я не считаю это недостатком.