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.

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 ]


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!).

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ę.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.