MARS (Multiple Active Result Sets)의 단점을 아는 사람이 있습니까? 커서가 MARS보다 더 유용한 경우처럼 MARS 사용을 피해야하는 이유를 아는 사람이 있습니까?
답변
(이 (1) 팀 블로그 에서) 적어도 두 가지 알려진 (잠재적 인) 단점이 있습니다 .
-
분명히 이것은 MARS 지원 설계에 대해 실행되도록 설계되지 않은 레거시 시스템에 잠재적 인 문제를 일으킬 수 있습니다. “MARS가 아닌 세계에서 실행되도록 최적화 된 기존 코드는 MARS로 수정하지 않고 실행하면 약간의 성능 저하를 보일 수 있습니다.”
-
“MARS를 사용하면 여러 개의 다중 문 배치를 서버로 보낼 수 있습니다. 서버는 이러한 일괄 처리 실행을 인터리브합니다. 즉, 일괄 처리가 SET 또는 USE 문을 통해 서버 상태를 변경하거나 TSQL 트랜잭션 관리 문 (BEGIN TRAN, COMMIT, ROLLBACK)을 사용하면 사용자와 서버가 혼동 될 수 있습니다. 당신의 실제 의도가 무엇인지에 대해.”
아직 MARS 지원 디자인을 시험해 보지는 않았지만 현재 프로젝트에서 거의 시도해 볼 것입니다. 경쟁하는 (때로는 종속 된) 쿼리 작업 (예 : 활성 레코드 집합이 실행중인 동일한 데이터베이스에서 구성 데이터를 지연로드하는 것과 같은)에 약간의 문제가 있습니다.
MSDN 사이트 (2) 에 대한 자세한 정보는 여기에 있습니다.
[(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 ]
답변
- 한 번에 하나의 연결을 수행하는 것보다 약간 더 많은 서버 리소스가 필요합니다.
- SQL Server 2005 이상을 실행해야합니다. 따라서 레거시 (ack!) 환경에서 문제가 될 수 있습니다.
답변
무엇에 따라? 실제 단점은 없습니다.
트랜잭션 저장 점을 지원하지 않습니다. 하지만 저는 이것이 단점이라고 생각하지 않습니다.