2017-12-15 19 views
0

우리는 데이터베이스를 새 데이터 센터로 이동하는 중입니다. 마이 그 레이션 계획은 모든 클라이언트가 연결할 때 사용하는 DNS 레코드를 업데이트하는 것입니다. 해당 연결을 사용하여 쿼리를 서버 이름 C# SqlConnection 캐싱 DNS

  • 같은 DNS 항목을 실행하여,

    1. 새로운 SQL 연결을 엽니 다 :

      가 나는 루프에서 다음을 수행하는 과정을 시작하여이를 테스트 한

    2. 을 닫고 SQL 연결이 실행 중에

    을 처분, 나는 새 서버를 가리 키도록 DNS 항목을 업데이트합니다.

    프로세스를 중지했다가 다시 시작하지 않으면 쿼리가 이전 서버에 대해 계속 실행됩니다.

    HttpClient를 사용하여 웹 요청을 보낼 때 동일한 시도를했는데 2 분마다 DNS가 새로 고쳐 지지만 SqlConnection 개체는 전체 프로세스가 다시 시작될 때까지 원래의 해결 방법으로 중단됩니다. 연결이 풀링되고 풀에서 연결을 가져올 때 DNS 항목의 유효성을 다시 검사하지 않기 때문입니다.

    이상적으로 나는 응용 프로그램 풀을 재활용하고 마이그레이션의 일부로 서비스를 다시 시작하지 않아도되도록하고 싶었습니다. 다른 누구도이 행동을 경험 했습니까? 그렇다면 SqlConnection이 서버 이름으로 사용하는 DNS 항목을 다시 평가하도록하는 방법을 찾았습니까?

  • +0

    데이터베이스 서버를 전환하기 전에 응용 프로그램을 재배포 할 수 있습니까? 나는. 코드 또는 구성 변경 사항을 수용 할 수 있습니까? – CodeCaster

    +0

    약 40 개의 개별 소프트웨어가이 데이터베이스 서버를 어떤 방식 으로든 사용하므로 선호하지는 않지만 가능성의 영역을 넘어서는 것은 아닙니다. – dotnetdave82

    +0

    옵션으로 - 때때로 DNS를 쿼리하는 타이머가있을 수 있으며 변경이 감지되면 모든 연결 풀을 지 웁니다. – Evk

    답변

    2

    연결 풀링을 사용하면 연결이 풀에서 제거되고 새 세션이 만들어 질 때까지 연결과 기본 세션이 다시 사용됩니다. 현재 응용 프로그램 도메인의 풀을 지우려면 SqlConnection.ClearAllPools을 호출하여 연결 풀을 강제로 지울 수 있습니다. Pooling=False 연결 문자열 키워드를 사용하여 연결 풀링을 완전히 해제 할 수도 있지만 성능에 상당한 영향을 줄 수 있음을 알고 있어야합니다.