데이터베이스 간 쿼리는 SQL Server에서 비용이 많이 듭니까?


15

데이터베이스 간 쿼리는 SQL Server에서 비용이 많이 듭니까? 모든 데이터베이스가 동일한 인스턴스에 있습니다.


3
나는 그들이 그런 증거를 찾지 못했습니다. 내가 생각할 수도있는 (하지만 테스트되지 않은) 유일한 예외는 (a) 최적화가 명시적일 수없는 관계로부터 혜택을 얻을 수 없다는 것입니다 (예 : 외래 키 정의로부터 혜택을받을 수 있으며, 교차 할 수 없음) -database) 또는 (b) 연결된 서버에 대한 통계 문제가 있지만 데이터베이스 전체에서 쿼리를 실행하는 사용자가 통계를 볼 수없는 경우가 있다고 생각합니다. (b)가 실제인지 아닌지 모릅니다. 테스트하지 않았으므로 서버 전체에서 심각한 문제가 될 수 있습니다.
Aaron Bertrand

2
나는 이것에 @AaronBertrand와 함께있어, 나는 큰 히트가 있다고 결정적으로 아무것도 보지 못했다. 내가 방정식에 무언가를 추가 할 것이라고 생각할 수있는 유일한 방법 은 아마도 어떤 형태의 인증 작업 일 가능성이 있지만 그것이 중요할지는 의심합니다. 그건 그냥 큰소리로 생각하는 것입니다. 잘 모르겠습니다. 여기서 가장 좋은 방법은 데이터베이스 간 크로스 데이터베이스를 사용하여 자동화 된 테스트 / 벤치 마크를 설정 한 다음 데이터베이스 간 동일한 쿼리를 사용하여 수천 번 테스트를 실행하는 것입니다. 평균, 최대 값 등을 구하고이를 바탕으로 결정하십시오.
Thomas Stringer

1
@thomas 실제 쿼리 계획을 보면 차이를 명확하게 볼 수 있습니까?
Max Vernon

@Jonathan : "고가"의 정의는 대안과 관련이 있습니다. 그래서 당신은 무엇을하려고하고 무엇을 결정하고 있습니까? 더 많은 정보가 없으면 액면가 에서이 질문에 맞는 답변을 얻을 수는 있지만 상황에 따라 절대적으로 잘못됩니다. 모든이 비용을하지만 비용이 저렴하거나 비싼 중 하나가 당신이 그것을 비교하는 내용에 따라 수 있습니다. 쿼리 비용 (예 : 시간, 경합 등)은 유지 관리 비용, 하드웨어 비용 등과 비교하여 측정해야합니다.
Solomon Rutzky

같은 테이블의 쿼리와 비교하여 비용을 알고 싶습니다.
Jonathan Allen

답변:


6

죄송합니다. 질문에 대해 충분한 평판을 얻지 못했지만 클라이언트 응용 프로그램이 데이터베이스 간 조인을 사용하는 쿼리에 대한 트랜잭션을 제기하면 트랜잭션이 분산되고 DTC 트랜잭션의 오버 헤드가 발생합니다. .

이 경우 DTC 오버 헤드는 성능에 부정적인 영향을 줄 수 있습니다. Microsoft가 DTC 트랜잭션을 다음과 같이 설명하지만 일반적으로 그 차이는 무시할 수 있습니다.

분산 트랜잭션은 일반적으로 상당한 시스템 리소스를 소비합니다

거래 촉진

... 서버가 필요한 리소스를 제공 할 수없는 경우 성능이 저하 될 수 있습니다.

명확히하기 위해 위의 기사는 원격 시스템이 도입 될 때 홍보되는 로컬 트랜잭션을 설명하지만 데이터베이스 간 쿼리를 사용할 때 동일한 서버에서 트랜잭션이 발생하는 것으로 나타났습니다.

Thomas Stringer가 자신의 의견에서 지적한 것처럼 SID 기반이 될 것이기 때문에 인증에 여분의 오버 헤드가있을 것이라고 생각합니다. 다른 데이터베이스에 액세스하기 위해 별도의 자격 증명을 사용하지 않으면 최소한의 오버 헤드가 있습니다.

데이터베이스 설정에 차이가있어 조인에서 추가 오버 헤드가 발생하여 이전 제안보다 큰 영향을 줄 수있는 경우 (예 : 데이터베이스 데이터 정렬) 데이터베이스 데이터 정렬은 성능 차이 만이 아니라 기능적인 차이로 나타날 수 있습니다.

Aaron은 데이터베이스 간 쿼리에 관계를 사용하는 동안 데이터베이스 간 쿼리에 관계를 사용할 수 없다는 이점이없는 옵티 마이저 성능에 대한 가장 강력한 논거가 있다고 생각합니다.



1
거래 프로모션 기사는 CLR 거래를위한 것입니다.
stacylaray

-2

SQL Server 2014에서 메모리 최적화 테이블은 데이터베이스 간 트랜잭션을 지원하지 않습니다. 동일한 트랜잭션 또는 메모리 최적화 테이블에도 액세스하는 동일한 쿼리에서 다른 데이터베이스에 액세스 할 수 없습니다. 한 데이터베이스의 테이블에서 다른 데이터베이스의 메모리 최적화 테이블로 데이터를 쉽게 복사 할 수 없습니다. http://msdn.microsoft.com/en-us/library/dn584627(v=sql.120).aspx 데이터베이스 미러링 / AOAG에는 분산 및 데이터베이스 간 트랜잭션이 지원되지 않습니다. http://technet.microsoft.com/en-us/library/hh393530.aspx . 소유권 체인을 사용하려는 경우 보안 위험에주의 하십시오. http://msdn.microsoft.com/en-us/library/ms188676.aspx


"여러 인스턴스 또는 서버에 걸쳐있는 리소스"시나리오에만 적용됩니다. 이 경우 여러 데이터베이스가있는 단일 인스턴스에 대해 이야기합니다.
Jonathan Allen

1
내 나쁜 ... 나는 같은 인스턴스 내에 있다는 부분을 놓쳤다
stacylaray
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.