Wady MARS (wiele aktywnych zestawów wyników)?

85

Czy ktoś wie o jakichkolwiek wadach MARS (Multiple Active Result Sets)? Czy ktoś zna jakiś powód, dla którego należy unikać używania MARS, na przykład w przypadkach, w których kursory są bardziej przydatne niż MARS.

Samiksha
źródło

Odpowiedzi:

61

Najwyraźniej istnieją co najmniej dwie znane (potencjalne) wady (z tego (1) bloga zespołu ):

  1. Oczywiście może to powodować potencjalne problemy w przypadku wszelkich starszych systemów, które nie zostały zaprojektowane do pracy z projektem obsługującym MARS - „istniejący kod zoptymalizowany pod kątem działania w świecie innym niż MARS może wykazywać niewielki spadek wydajności, gdy jest uruchamiany bez modyfikacji z MARS”

  2. „Dzięki MARS możesz wysyłać na serwer wiele pakietów zawierających wiele instrukcji. Serwer będzie przeplatał wykonywanie takich partii, co oznacza, że ​​jeśli partie zmienią stan serwera za pomocą na przykład instrukcji SET lub USE lub użyją instrukcji zarządzania transakcjami TSQL (BEGIN TRAN, COMMIT, ROLLBACK), zarówno Ty, jak i serwer możecie się pomylić o tym, jakie są Twoje rzeczywiste zamiary ”.

Jeszcze nie wypróbowałem projektu obsługującego MARS, ale jestem bardzo blisko zrobienia tego w moim obecnym projekcie. Mamy niewielki problem z konkurującymi (a czasem zależnymi) operacjami zapytań (np. Leniwe ładowanie danych konfiguracyjnych z tej samej bazy danych, którą wykonuje aktywny zestaw rekordów).

Więcej informacji można znaleźć w witrynie MSDN (2) tutaj

[(1) https://web.archive.org/web/20190911155929/https://blogs.msdn.microsoft.com/sqlnativeclient/2006/09/27/using-mars-with-sql-native-client/ ]
[(2) http://msdn.microsoft.com/en-us/library/ms131686.aspx ]

RobS
źródło
3
Przed zastosowaniem świetnego rozwiązania @RobS przeczytałem najpierw ten artykuł, aby upewnić się, że nie możesz rozwiązać tego problemu za pomocą następującego rozwiązania: devproconnections.com/development/ ... LUB dodanie .ToList () na końcu wywołania DB, co rozwiązał mój problem. Przy okazji, dzięki RobS za wspaniałą radę, MARS przyda się w przyszłości. :)
Termato
6
  • Zajmuje nieco więcej zasobów serwera niż wykonywanie jednego połączenia na raz.
  • Musisz mieć uruchomiony SQL Server 2005 lub nowszy. Może to być problem w starszych środowiskach (Ack!).
Dave Markle
źródło
możesz dobrze używać SqlTransaction.
Mladen Prajdic,
18
Ile kosztuje „nieco więcej zasobów serwera”? Czy możesz oszacować to pod względem pamięci lub procesora? Interesuje mnie to głównie dlatego, że pracuję w środowisku Azure, w którym zasoby są proporcjonalne do kosztu serwera.
Mathias Lykkegaard Lorenzen
1
@MathiasLykkegaardLorenzen Czy kiedykolwiek znalazłeś odpowiedź na swoje pytanie?
Sinjai
4

w zależności od czego? nie ma prawdziwych wad.

nie obsługują punktów zapisu transakcji. ale nie uważam tego za wadę.

Mladen Prajdic
źródło