programing

SQL Server 데이터베이스를 오프라인으로 전환할 때의 대기 시간이 너무 길음

javamemo 2023. 9. 12. 19:47
반응형

SQL Server 데이터베이스를 오프라인으로 전환할 때의 대기 시간이 너무 길음

dev 데이터베이스에서 오프라인 유지보수(라이브 백업에서 dev 데이터베이스 복원)를 수행하려고 하는데 SQL Server Management Studio를 통한 'Take Offline' 명령이 30분 이상 더 느리게 수행되고 있습니다.저는 어찌할 바를 모르고 있는데 온라인에서 속도 문제의 원인이나 해결 방법에 대한 언급을 찾을 수 없는 것 같습니다.

일부 사이트에서는 데이터베이스에 대한 열린 연결이 이러한 속도 저하를 일으킨다고 제안했지만 이 데이터베이스를 사용하는 유일한 응용 프로그램은 내 개발자 컴퓨터의 IIS 인스턴스이며 서비스가 중지되었습니다. 더 이상 열린 연결이 없습니다.

무엇이 이러한 속도 저하의 원인이 될 수 있으며, 속도를 높이기 위해 무엇을 할 수 있습니까?

몇 번의 추가 검색(gbn의 답변과 kmike의 답변에 대한 u07ch의 코멘트에서 영감을 받은 새로운 검색어)을 실시한 결과, 2초 만에 성공적으로 완료되었습니다.

ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE

(업데이트)

다음 오류와 함께 실패할 경우 이 블로그 게시물에서 영감을 얻은 대로 수정할 수 있습니다.

데이터베이스 'dbname'에 잠금을 설정할 수 없어 ALTER DATABASE가 실패했습니다. 나중에 다시 시도하십시오.

다음 명령을 실행하여 데이터베이스를 잠근 사용자를 확인할 수 있습니다.

EXEC sp_who2

그리고 무엇이든지 사용합니다.SPID다음 명령에서 찾을 수 있습니다.

KILL <SPID>

그럼 실행합니다.ALTER DATABASE다시 명령합니다.이제 될 겁니다.

어디선가 DB에 연결되어 있을 가능성이 높습니다(희귀한 예: 비동기 통계 업데이트).

연결을 찾으려면 sys.sysprocesses를 사용합니다.

USE master
SELECT * FROM sys.sysprocesses WHERE dbid = DB_ID('MyDB')

강제로 연결을 끊으려면 ROBLACK REMITED를 사용합니다.

USE master
ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE

이 DB에 연결된 열린 SQL Server Management Studio 창이 있습니까?

단일 사용자 모드로 설정한 다음 다시 시도합니다.

저의 경우, 일이 끝날 때까지 너무 기다린 끝에 인내심이 없고 단순히 관리 스튜디오를 폐쇄했습니다.종료하기 전에 db가 오프라인이라는 성공 메시지가 표시되었습니다.파일 이름을 변경할 수 있었습니다.

저장 프로시저 sp_who2 실행

이렇게 하면 차단 잠금 장치가 있는지 확인할 수 있습니다.그들이 고쳐야 할 것을 죽여야 합니다.

SSMS에서 SQL Server 아이콘인 Activity Monitor를 마우스 오른쪽 버튼으로 클릭합니다.프로세스를 엽니다.연결된 가공품을 찾습니다.프로세스를 마우스 오른쪽 버튼으로 클릭합니다.

제 경우에는 이 작업을 수행하기 전에 DB에서 몇 가지 표를 살펴 보았습니다.내 사용자 계정이 SSMS에서 이 DB에 대한 활성 연결을 유지하고 있었습니다. SSMS에서 서버 연결을 끊으면('데이터베이스 오프라인 사용' 대화 상자를 열어두고) 작업이 성공했습니다.

당신이 이런 종류의 것을 마주칠 때마다 당신은 항상 당신의 거래 기록을 생각해야 합니다.롤백 즉시 변경된 db 문은 이 경우를 나타냅니다.이것을 확인해보세요: http://msdn.microsoft.com/en-us/library/ms189085.aspx

검문소 등에서 뼈를 깎습니다.로그에 저장된 트랜잭션이 저장할 가치가 있는지 여부를 결정한 후 db를 실행할 모드를 선택해야 합니다.기다릴 필요도 없지만 데이터를 잃을 이유도 없습니다. 두 가지를 모두 가질 수도 있습니다.

요청이 이루어진 SSMS(SQL Service Manager) 인스턴스를 닫으면 문제가 해결되었습니다...

이 문제를 해결하기 위해 IIS에서 db에 연결된 웹사이트를 중지하고 즉시 '동결' 'db 오프라인으로 가져가기' 패널이 해제되었습니다.

또한 해당 데이터베이스에 연결되어 있는 쿼리 창을 모두 닫습니다;)

저는 아래의 모든 제안을 시도해 보았지만 아무 것도 되지 않았습니다.

  1. EXEC sp_who
  2. 처치 < SPID >

  3. 롤백 즉시 데이터베이스 세트 단일_USER 변경

    롤백 즉시 오프라인으로 데이터베이스 세트 변경

    결과: 위 두 명령이 모두 고착되었습니다.

4. 데이터베이스를 마우스 오른쪽 단추로 클릭 -> 속성 -> 옵션 데이터베이스 읽기 전용을 참으로 설정 SQL Server가 데이터베이스에 대한 모든 연결을 닫을 것이라는 경고 대화상자에서 '예'를 클릭합니다.

결과: 실행 중 창이 고착되었습니다.

마지막 수단으로 구성 관리자에서 SQL 서버 서비스를 재시작한 다음 롤백 즉시 오프라인에서 ALTER DB SET을 실행했습니다.그것은 매력처럼 작용했습니다.

SSMS에서 데이터베이스를 읽기 전용으로 설정한 다음 다시 설정합니다.연결이 닫히므로 잠금이 해제됩니다.

제 경우에는 데이터베이스에 개방된 연결을 가진 웹사이트가 있었습니다.이 방법은 충분히 쉬웠습니다.

  1. 데이터베이스 -> 속성 -> 옵션을 마우스 오른쪽 버튼으로 클릭합니다.
  2. 세트Database Read-Only참으로
  3. SQL Server가 데이터베이스에 대한 모든 연결을 닫을 것이라는 경고 대화상자에서 '예'를 클릭합니다.
  4. 옵션을 다시 열고 읽기 전용을 다시 끕니다.
  5. 이제 데이터베이스 이름을 바꾸거나 오프라인 상태로 전환해 보십시오.

저는 작업 활동 모니터에 들어가서 처리 중인 두 가지 작업을 중지해야 했습니다.그런 다음 즉시 오프라인 상태가 되었습니다.제 경우에는 그 두 가지 과정이 무엇인지 알고 있었고, 그것들을 막는 것도 괜찮았습니다.

제 경우에는 데이터베이스가 오래된 쉐어포인트 설치와 관련이 있었습니다.서버 관리자에서 관련 서비스를 중지하고 비활성화하면 40분 동안 실행되던 오프라인 조치를 "실행 해제"하고 즉시 완료됩니다.

현재 데이터베이스를 사용 중인 서비스가 있는지 확인해 볼 수 있습니다.

다음 번에 오프라인 사용 대화상자에서 '모든 활성 연결 삭제' 확인란을 선택해야 합니다.또한 연결이 없는 로컬 시스템에서 SQL_EXPRESS를 사용하고 있었지만 해당 확인란을 선택하지 않는 한 이 속도가 느려졌습니다.

SSMS는 특히 데이터베이스 서버 내에서 직접 실행하지 않고 원격으로 자신의 데스크톱에서 실행하는 경우 데이터베이스 분리가 오래 지연되는 원인이 될 수 있습니다.어떤 이유로 SSMS가 데이터베이스에 대한 기존 "연결"의 연결을 끊을 수 없을 수도 있습니다.

데이터베이스 서버 자체에서 직접 수행했을 때 프로세스가 거의 즉각적으로 이루어졌음을 알 수 있었습니다.그리고 실제로 데스크톱 SSMS 세션의 시도를 중단시켰고, 데이터베이스를 "인수"하고 분리했습니다.

여기서 다른 제안은 아무것도 통하지 않았습니다.

감사해요.

제 경우에는 Tomcat 서버를 정지시켰다가 곧바로 DB가 다운되었습니다.

언급URL : https://stackoverflow.com/questions/808232/extreme-wait-time-when-taking-a-sql-server-database-offline

반응형