연결 풀이 오류 : 18056, 심각도 : 20, 상태 : 46으로 재설정되고 있습니다. 및 성능 카운터가 표시되지 않음


21

Windows 2008 R2 Enterprise Server에서 SQL 인증 (연결 풀 수 줄이기) 및 .NET 4.0 연결 문자열을 사용하여 SQL Server Enterprise Edition 2012 SP1에 연결하고 있습니다.

Microsoft SQL Server 2012 (SP1)-11.0.3000.0 (X64)
2012 년 10 월 19 일 13:38:57
저작권 (c)
Windows NT 6.1 (빌드 7601 : 서비스 팩 1)의 Microsoft Corporation Enterprise Edition (64 비트)

우리는 약 50 대의 서버를 웹 사이트의 다른 부분으로 8 개의 다른 그룹으로 나눕니다.

당사 웹 사이트는이 SQL Server를 사용하여 방문 추적 데이터를 기록합니다. 지난 며칠 동안 연결 풀 재설정에 대한 다음 메시지가 표시되었습니다.

클라이언트가 연결 풀링을 위해 재설정 된 SPID 1327의 세션을 재사용 할 수 없습니다. 실패 ID는 46입니다.이 오류는 이전 작업 실패로 인해 발생했을 수 있습니다. 이 오류 메시지 바로 전에 오류 로그에서 실패한 작업이 있는지 확인하십시오.

오류 로그 읽기 :

오류 : 18056, 심각도 : 20, 상태 : 46.
클라이언트가 연결 풀링을 위해 재설정 된 SPID 959 세션을 재사용 할 수 없습니다. 실패 ID는 46입니다.이 오류는 이전 작업 실패로 인해 발생했을 수 있습니다. 이 오류 메시지 직전에 오류 로그에서 실패한 작업을 확인하십시오.
사용자 'xxxx'의 로그인에 실패했습니다. 이유 : 연결에서 로그인을 재확인하는 동안 로그인 오브젝트에 구성된 'xxxxxxxx'데이터베이스를 열지 못했습니다. [고객 : 10.xx.xx.xxx]

일부 파고 후, 나는 CSS 블로그에서이 문서를 발견 하기 이용 방법 : - 오류 18056을 클라이언트는 SPID와의 세션을 재사용 할 수 없습니다 ##,하고 연결 풀링에 대한 재설정이 있던 아론 베르이 하나 : 문제 해결 오류 18456 . 오류 번호는 다르지만 오류 ID는 동일하지만 여러 메시지는 동일합니다.

실패 ID 46은 로그인에 권한이 없음을 나타냅니다. 로그인은 기본적으로 마스터 데이터베이스이며 db 이름은 연결 문자열에 지정되어 있습니다.

연결 문자열 풀 등의 수를 확인하고 Perfmon의 모든 카운터를 확인했습니다 .Net Data Provider for SqlServer. defaultdomain9675인스턴스 에 대한 옵션 만 제공 했으므로 Datacentre 네트워크의 시스템 생성 ID 이름이라고 가정했습니다. 불행히도 모든 카운터는 0을 읽습니다. 다른 주요 서버 중 하나에서 연결 풀이 약 10 개를 가리키고 있는데, 이는로드가 좋은 정상적인 서버에서 볼 것으로 예상되는 것입니다.

내 질문은 3 배입니다

  1. 누구나 Windows 2008 R2 서버가 보이지 않는 이유를 제안 할 수 있습니까 .Net Data Provider for SqlServer?

  2. 내가 권한이없는 로그인이 빨간색 청어라고 분명히 믿었을 때 누군가 이것을 경험 했습니까?

  3. 다른 웹 서버 그룹에 동일한 연결 문자열 구문이 있지만 공백이 약간 다른 경우 서버가 다른 연결 풀을 사용하게됩니까?

최소 및 최대 메모리 설정은 각각 20GB 및 58GB입니다. 서버는 64GB의 RAM이있는 전용 데이터베이스 서버입니다. 상자에 적절한 페이지 lfe 기대치가있는 것처럼 메모리가 문제라고 생각하지 않습니다. 자동 닫기가 활성화되지 않았습니다. 서버는 항상 가동됩니다. 사용량이 많은 24x7 웹 사이트입니다.


3
서버 (.NET 응용 프로그램 / Windows 2008 R2 / SQL Server 2008 R2 / SQL 로그인)에서도이 문제가 간헐적으로 발생합니다. 왜 이런 일이 발생했는지 추적 할 수 없었습니다 ... 기본적으로 우리는이 시점에서 시도를 포기했습니다. 4.0으로 업그레이드하기 전에 .NET 3.5에서도이 문제가있었습니다. 누군가가 이것을 해결했다면 듣고 싶습니다!
Jon Seigel

1
@jonSeigel 안녕 존, 문제의 서버가 실제로 확장 이벤트에 대한 다음 문서를 사용하여 실제로 ocnnection pooling을 사용하고 있는지 확인했습니다. sqlserverpedia.com/blog/sql-server-bloggers/… 현재 Xevents를 조정하여 연결 풀의 수를 계산하는 데 필요한 정보를 찾으려고 노력하고 있습니다.
DamagedGoods

문제의 서버가 미러링을 사용하고 있습니까? 데이터베이스가 보조 시스템으로 장애 조치 될 때 기본 시스템에서이 오류 메시지를 확인했습니다.
Max Vernon

답변:


5

1-확실히 말할 수는 없지만, 나 자신을 파헤칠 서버를 찾아야합니다.

2-예, 나는 우리가 SQL 2012를 아직 사용하지 않지만 내 환경에서 이것을 정기적으로 봅니다. State 46이 특정 Database = xxx를 갖는 것과 관련이 있지만 http://blogs.msdn.com/b/psssql/archive/2013/02/13/breaking-down-18065.aspx 를 확인하고 싶을 수도 있습니다 . 연결 문자열, 해당 데이터베이스가 여전히 존재합니까?

내 네트워크 설정 방법 5 분 동안 유휴 상태가 된 후 네트워크가 TCP 세션을 자동으로 닫은 것으로 의심됩니다 .DB 또는 클라이언트가 세션을 닫지 않아 연결 풀이 여전히 연결이 열려 있다고 생각하고 사용하려고합니다. 더 이상 실제로 열려 있지 않다는 것을 발견하기 위해서입니다. 웹 서버와 db 사이의 네트워크 구성 방법에 대해서는 언급하지 않았으며 사례가 비슷할 수도 있습니다.

또 다른 가능성은 TCP Chimney Offload 설정에 대한 (이전, 실제로 해결되었는지 확실하지 않은 경우 http://support.microsoft.com/kb/942861 참조 ) 문제 일 수 있습니다.

3-풀링에는 정확한 문자열 일치가 필요하므로 공백과 다른 순서의 매개 변수로 인해 다른 풀이 발생합니다. (내가 틀렸다면 알려주십시오.)


4

커뮤니티 위키 답변은 원래 질문 작성자의 의견으로 남았습니다.

제 경우에는 누군가가 문제를 해결하기 위해 자세한 정보로 전환 한 런 어웨이 로깅 테이블로 판명되었지만 전원을 끄는 것을 잊었습니다. 결국 초당 최대 1000 개의 레코드가 기록되었습니다.

다른 작업이 테이블에서 오래된 레코드를 삭제하려고했습니다. 연결 풀 자원이 부족한 모든 삽입을 차단하고 삭제하려고 할 때 잠그는 것처럼 매듭에 빠졌습니다.

작업을 찾 자마자 해당 서버에서 자신의 권한을 남용한 사람을 머리에서 때리고 작업을 중지하면 연결 풀에 대한 모든 오류 메시지가 중지되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.