문제

에 작동 우리는 두 개의 서버,하나는 응용 프로그램을 실행하고 많은 사람들이 사용하고 있는 SQL Server2000 니다.나는 무료 쿼리 오랜 시간이지만 할 수 없습니다 아무것도 추가 등과 같은 절차를 저장하거나 추가 테이블이 있습니다.

이것은 우리에게는 두 번째 SQL 서버에 연결하는 첫 번째와 나를 구축 라이브러리의 저장 프로시저를 쿼리하는 데이터의 양쪽에서 사용하여 연결된 서버입니다.일부의 이러한 쿼리를 복용보다 더 무엇이 있습니다.

할 수 있는 누군가를 좋은 일에 대한 기사를 사용하여 연결된 서버?나는에서 특히 관심이 무엇을 찾는 데이터가 전송되었고 둘 사이의 일반적으로 대부분의 sql 문을 수행할 수 있습을 원격으로 하지만 나는 느낌이있을 수 있습을 전송 전 테이블,그것은 일반적으로 그냥 참여하는 작은 테이블에 최종습니다.

또한 무엇이 연결된 서버 옵션을 사용하면 됩니까 현재:

  • 정렬을 진정한 호환
  • 진정한 데이터 액세스
  • Rpc True
  • Rpc 사실
  • 원격 사용 데이터 정렬 False
  • 데이터 정렬 이름(Blank)
  • 연결 Timeout0
  • 쿼리 시간 제한 0

편집:

고 생각했을 것입 업데이트 이후 나는 사용 openqueries 동적 매개 변수한 성능을 향상하기 위해,팁 주셔서 감사합니다.그러나 이렇게 만들 수 있는 쿼리 더 많은 지저분한 끝으로 다루는 문자열입니다.마지막으로 이번 여름에는 SQL Server2008 구현 라이브 데이터 미러링.솔직히 오픈 쿼리에 접근했다는 속도의 현지에 대한 쿼리를 내 작업이 그러나 미러링은 확실하게 만든 sql 쉽게 처리합니다.

도움이 되었습니까?

해결책

내가 조언을 동적 openqueries 에 커서 대신 루프를 연결합니다.이것이 유일한 방법은 나에 복제할 수 있 MS 액세스'연결 가입하의 성능(적어도 하나의 원격 테이블)

정기적인 연계 결합 ms sql 에서는 너무 비효율적으로 당기는 모든 것에 특별히 엄청난 테이블..

-난 것이 무엇인지 알고 싶은 그렇게 나쁜 대 openqueries 내부에 커서 루프?제대로 하는 경우에 없을 잠그는 문제입니다.

다른 팁

피인을 연결된 서버의 테이블이 있습니다.

를 사용하여 네 개의 부분으로 구성된 이름에 대한 귀하의 참여 사용할 수 있지만 더 비싸다.귀하의 참여 포함할 수 있습 기준을 사용할 수 있는 데이터를 제한 설정에서 연결된 서버를 사용하여 인덱스 열이 있습니다.

예제:

SELECT loc.field1, lnk.field1
FROM MyTable loc
INNER JOIN RemoteServer.Database.Schema.SomeTable lnk
  ON loc.id = lnk.id
  AND lnk.RecordDate = GETDATE()
WHERE loc.SalesDate = GETDATE()

이 쿼리는 또한 적용 기준에 가입하는 데 사용할 수 있는 연결된 서버하기 전에 가입이 계산됩니다.

권장하는 방법은 사용 OPENQUERY.

을 피하여 가입하의 사용으로 OPENQUERY 로컬 서버를 전송하여 쿼리를 실행을 원격으로 대신에 보내는 설정의 Id 입니다.

링크를 사용하여 검색하는 설정 데이터 계산을 수행합니다.어느 임시 테이블을 사용(임시 쿼리를 위한)또는 삽입에서 행 영구적인 테이블에서 야간 작업입니다.

처음에 트랜잭션이 실패할 수 있습니다 따라 원하는 경우 코디네이터 트랜잭션에서 좋아하는 서버입니다.치를 위해 노력하고 있습니다.더 소모한 리소스입니다.

또한 것을 고려하는 생산 서버 응용 프로그램을 실행하는 동안,당신이 지정하지 않은,그것을 생각은 안전하다고 가정 사용하고 무거운 거래 및 하고 삽입 업데이트됩니다.당신은 멀리 자원에서 응용 프로그램.

당신의 목적의 사용에 대한 데이터 보고 목적입니다.서버 설정할 수 있는 간단한 로그신의 풀 그것을 더 효율적입니다.

당신은 또한 피 쿼리를 취소될 때문에 데이터가 움직임에 연결된 서버입니다.항상 염두의 설정이 적절한 격리 수준에 대한 쿼리와 테이블과 같은 힌트를 NOLOCK.

십시오!지 않는 장소 OPENQUERY(또는 모든 연결된 서버)루프 안에!

을 사용할 때 연결된 서버를 결합이,그것은 중요하다고 있는 서버에 즉시 연결하는("local")하나의 대부분과 데이터,어디에 연결된 서버만 제공하는 작은 부분의 데이터를,그렇지 않으면,예,그것을 끌어 많은 데이터을 수행하는 데 필요 합니다.

대안을 포함 복사를 하위 집합을 통한 데이터를 임시 테이블과 많은 작업을 수행하 슬림 결과는 어떤 사전 처리하는 연결된 서버가 수행할 수 있고 다음을 수행합 가입에"local"측.

당신이 찾을 수 있습니다 당신은 쉽게 할 수 있는 성능 향상을 반전해서는 방법 당신이 그것을 서버에 연결하 제어할 수 없(그들이 필요하게 연결된 서버)그리고 서버에 연결하는 링크를 통해.당신이해야 할 주요 데이터로 작업할 수 있을 만들 sprocs-를 밀어 데이터 서버에 사용 sprocs 다.

어떤 경우에,나는 단순히 연결된 서버를 수행하는 밤의 생성이 요약되는 푸시 로컬 서버,그리고 그런 다음 로컬 서버가 수행되는 작업입니다.

로얄증

우리가 사용하는 여러 가지 연결된 서버에서 우리의 가게와의 이야 이러한 피타.

첫째,있었다면 성능에 심각한 문제와 유사한 것을 당신에 대해 설명합니다.충격을 받았을 봤을 때는 네트워크 I/O 통계입니다.모든 노력에도 불구하고,우리는 실패한 힌트 SQL 서버로 합리적인 동작입니다.

또 다른 문제는 저장되었던 이러한 연결된 서버는 이름의 하드디있는 방법으로,재정니다.그래서 개발자가 쉽지 않다는 테스트에 자신의 개발 샌드박스는 모든 기능을 감동으로 연결된 서버.이것이 큰 장애물을 만들기 위한 보편적으로 사용 가능한 장치-테스트습니다.

결국 우리는 버림 연결된 서버를 완전히 옮겼 데이터 동기화를 웹 서비스를 제공합니다.

쿼리와 관련된 반인에 연결된 서버하지 않는 경향이 매우 효율적입니다.당신이 더 있을 수도 있습 사용 OPENQUERY 를 채우는 데이터로 임시 테이블에 다음 작업입니다.

내가 쓴 원격지에 연결된 서버 응용 프로그램에서 SQL2000 의 몇 년 전에 걸쳐왔 동일한 성능 문제에 대해 설명합니다.결국 다시 쓰기 내 저장 프로시저를 여러 번을 얻기 위해서 최상의 성능을 발휘합니다.

내가 사용되는 임시 테이블습니다.내가 찾는 덜 비싼를 검색하는 많은 양의 원격으로 데이터를 임시 테이블,그 다음 가입하세하다,조작,등등.가입 로컬에서 원격으로 테이블은 매우 느리로 당신은 desribe.

표시 실행 계획 및 디스플레 추정 실행을 계획하는 경향이 도움이지만 내가 이해하지 못했지만 많은 내가 무엇을 찾고 있었습니다.

내가 알지 못하는 경우에도 효율적인 방법으로 이러한 쿼리를 원격 서버는 것처럼 보인다 때문에 SQL 서버 기능을 사용할 수 없으므로 정상적인 최적화에 갈 때에 연결된 서버입니다.그것도 같은 느낌을 전송하는 전체를 테이블에 있기 때문에 사실은 무슨 일이 일어나고있다.

는지 궁금하면 복제 시나리오 당신을 위해 일할 수 있습니다.함으로써 데이터의 로컬 서버를 쓸 수 있어야 정상하는 쿼리를 수행됩니다.

나의 알 수 없는 어떤 좋은 기점으로 당신.로 내가 쓰는 더 복잡한 SQL 서버 응용 프로그램,생각하기 시작했죠 내가 필요의 더 나은 이해를 어떻게 SQL Server 했습니다.하는 결국 우리가 구입 MS Press 내부 Microsoft SQL Server2005 시리즈 편집 Kalen 딜레이니 여기에서 작동합니다.볼륨 1:저장소 엔진은 확실히 시작하는 장소이지만 나는 받는다.이후 지난 몇 프로젝트에 참여하지 않는 SQL Server,내부의 그것을 얻었 lax.

가능성이 있는 설정할 수 있는 별도의 데이터베이스는 서버에서 사용하는 것보다 연결된 서버?

그것의 아주 관대한 문제이 있을 수 있는 많은 솔루션입니다.그러나 우리가 목격한 이렇게 많은 사용자고 말하는 그들은 모든 것입니다.

무엇이 내 문제를 해결합니다..

내가 업그레이드 sql server2000 년에서 sp2SP4 및 이미 있는 경우 sp4 에서 sql server2000 한 후 실행 Instcat.sql.따라 내 경험을 드릴 수 있습니다 당신이이 일에 대한 확실한 경우,당신이 피곤하는 모든 다른 해결 방법이 있습니다.

감사합니다, Mithalesh mithalesh.gupta@gmail.com

Dynamic SQL 함수를 사용할 수 있습을 얻을 주위 하드 코딩 이름 질문입니다.예를 들어,내가 하려고 구현하는 기능 ufn_linkedDatabase(@목적 이며(255))입력으로'소비자 물가 지수.소비자 물가 지수'(목적은 소비자 물가 지수,이하 목적은 기본값) '[서버명.도메인입니다.LCL,2000].[소비자 물가 지수]'에서 생산 환경(여기서 우리가 사용하는 대체 포트 번호에 대한 SQL Server,내가 알지 못하는 이유,에 포함된 server name).다음 SQL 명령을에서 조립@템플릿 varchar(max)식@{소비자 물가 지수.소비자 물가 지수}나타내는 연결된 서버 및 데이터베이스,그리고 다음 @workstring 에 잡아=REPLACE(@템플릿,N'@{소비자 물가 지수.소비자 물가 지수}',...).는 방법 기능을 실제로 데이터베이스 이름은 별도의 절차를 조회 테이블은 좋은 것입니다.

문제를 하 OPENQUERY(),이는 아마도 더 나은 적어도 없는 한 연결된 서버 옵션"정렬 호환되는"설정"true"그래서 그 이상의 작업을 수행할 수 있에 연결된 서버-중요 심지어 고속 네트워크에서,그리고 우리의 서버 룸 내부 네트워크를 존경 할 빠르게 할 OPENQUERY()나는 아마도 처리해야 하는'소비자 물가 지수.소비자 물가 지수.서버'와'소비자 물가 지수.소비자 물가 지수.데이터베이스'와'소비자 물가 지수.소비자 물가 지수.서버입니다.데이터베이스'세요.그리고,내가 끝까지 정확하게 작성 중 하나는 응용 프로그램을 사용하여 이 디자인되는 경우에,그것은 이상-설계되었습니다.여전히는다는 것을 의미하는 함수 자체에 있지 않는 어떤 종류의 멋진 일이다.

던지는 빠른 네트워크는 하드웨어에 문제가 될 수 있다 싸게 대답입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top