SET READ_ 기간COMMITED_SNAPHOT 테이크?
실행하는 데 시간이 얼마나 걸립니까?
ALTER DATABASE [MySite] SET READ_COMMITTED_SNAPSHOT ON
방금 실행했는데 10분이 걸렸습니다.
적용되었는지 어떻게 확인할 수 있습니까?
READ_의 상태를 확인할 수 있습니다.보기를 사용하여 COMMITED_SNAPHOT 설정.열의 값을 확인합니다.이미 묻고 답했습니다.
기간과 관련하여, Books Online에서는 데이터베이스에 대한 다른 연결이 있을 수 없다고 하지만 단일 사용자 모드는 필요하지 않습니다.따라서 다른 활성 연결에 의해 차단될 수 있습니다.(또는 )를 실행하여 해당 데이터베이스에 연결된 다른 항목을 확인합니다.
사용해 보십시오.
ALTER DATABASE generic SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE
좋아요 (저는 원래 질문자입니다) 그래서 제가 그 빌어먹을 것을 활성화하지도 않은 것으로 밝혀졌습니다.
다음은 스냅샷 모드를 활성화하고 활성화하기 위해 실행할 최종 코드입니다.
SELECT is_read_committed_snapshot_on, snapshot_isolation_state_desc,snapshot_isolation_state FROM sys.databases WHERE name='shipperdb'
ALTER DATABASE shipperdb SET allow_snapshot_isolation ON
ALTER DATABASE shipperdb SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE shipperdb SET read_committed_snapshot ON
ALTER DATABASE shipperdb SET MULTI_USER
SELECT is_read_committed_snapshot_on, snapshot_isolation_state_desc,snapshot_isolation_state FROM sys.databases WHERE name='shipperdb'
연결이 활성화된 경우에도 작동합니다(아마도 해당 연결이 제거되어도 괜찮습니다).
전후 상태를 볼 수 있으며 이 상태는 거의 즉시 실행되어야 합니다.
중요:
옵션 READ_위의 COMMITED_SNAPHOT는 분리에 해당합니다.Level.Read Committed in.그물
위의 ALLOW_SNAPSHOT_ISOLATION 옵션은 분리에 해당합니다.레벨. 스냅샷 인.그물
.NET 팁:
처럼 보인다Isolationlevel.ReadCommitted
데이터베이스에 의해 활성화되지 않은 경우에도 코드에서 허용됩니다.경고가 발생하지 않습니다.그러니 당신 자신의 부탁을 들어주시고 저처럼 3년 동안이라고 가정하기 전에 그것이 켜져 있는지 확인하세요!!!
C#을 사용하는 경우에는 다음을 원할 것입니다.ReadCommitted
격리레벨 앤 비Snapshot
이 트랜잭션에서 쓰기를 수행하지 않는 한.
READ COMMITTED SNAPSHOT
낙관적 읽기 및 비관적 쓰기를 수행합니다.그에 반해서,SNAPSHOT
낙관적 읽기 및 낙관적 쓰기를 수행합니다. (여기서부터)
bool snapshotEnabled = true;
using (var t = new TransactionScope(TransactionScopeOption.Required,
new TransactionOptions
{
IsolationLevel = IsolationLevel.ReadCommitted
}))
{
using (var shipDB = new ShipperDBDataContext())
{
}
}
또한 트랜잭션을 '프로모션할 수 없음'에 대한 오류가 발생할 수 있습니다.소개 시스템에서 '홍보'를 검색합니다.의 트랜잭션.NET Framework 2.0.
외부 데이터베이스(또는 두 번째 데이터베이스)에 연결하는 것과 같은 특별한 작업을 수행하지 않는 한 새 DataContext를 만드는 것과 같은 간단한 작업이 이 문제를 일으킬 수 있습니다.초기화 시 자체 데이터 컨텍스트를 '스펀업'하는 캐시가 있었는데, 이는 트랜잭션을 완전한 분산 트랜잭션으로 에스컬레이션하려고 했습니다.
솔루션은 간단했습니다.
using (var tran = new TransactionScope(TransactionScopeOption.Suppress))
{
using (var shipDB = new ShipperDBDataContext())
{
// initialize cache
}
}
@CodingHorror의 기사 참조
이 코드를 사용해 보십시오.
if(charindex('Microsoft SQL Server 2005',@@version) > 0)
begin
declare @sql varchar(8000)
select @sql = '
ALTER DATABASE ' + DB_NAME() + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;
ALTER DATABASE ' + DB_NAME() + ' SET READ_COMMITTED_SNAPSHOT ON;
ALTER DATABASE ' + DB_NAME() + ' SET MULTI_USER;'
Exec(@sql)
end
다음 명령을 시도했습니다.
ALTER DATABASE MyDB SET READ_COMMITTED_SNAPSHOT ON
GO
개발 상자에 대항했지만 10분 이상 걸려서 죽였습니다.
그리고는 다음과 같은 것을 발견했습니다.
https://willwarren.com/2015/10/12/sql-server-read-committed-snapshot/
코드 블록을 사용했습니다(실행하는 데 약 1분 26초 소요).
USE master
GO
/**
* Cut off live connections
* This will roll back any open transactions after 30 seconds and
* restricts access to the DB to logins with sysadmin, dbcreator or
* db_owner roles
*/
ALTER DATABASE MyDB SET RESTRICTED_USER WITH ROLLBACK AFTER 30 SECONDS
GO
-- Enable RCSI for MyDB
ALTER DATABASE MyDB SET READ_COMMITTED_SNAPSHOT ON
GO
-- Allow connections to be established once again
ALTER DATABASE MyDB SET MULTI_USER
GO
-- Check the status afterwards to make sure it worked
SELECT is_read_committed_snapshot_on
FROM sys.databases
WHERE [name] = 'MyDB '
현재 데이터베이스를 변경하기 전에 마스터 데이터베이스를 사용해 보십시오.
USE Master
GO
ALTER DATABASE [YourDatabase] SET READ_COMMITTED_SNAPSHOT ON
GO
DB를 단일 사용자로 변경하는 데 단 1초도 걸리지 않았습니다.
필요한 것은 다음과 같습니다. ALTER DATABASE xyz SET READ_롤백 즉시 사용하는 Committed_Snapshot on(커밋된 스냅샷
데이터베이스를 단일 사용자 모드로 전환할 필요가 없습니다.커밋되지 않은 트랜잭션은 롤백합니다.
다른 SQL 서비스를 종료하여 SQL 서버 서비스만 실행되도록 합니다.
내 것은 5분 동안 실행되었고 아무 일도 일어나지 않는 것이 분명했기 때문에 취소했습니다.새 서버라 다른 사용자가 연결되어 있지 않습니다.SQL Reporting Services를 종료한 다음 다시 실행했습니다.완료하는 데 1초도 걸리지 않았습니다.
"ROLLBACK Immediate"를 사용하면 300GB인 제 DB에서 약 20-30초가 걸렸습니다.
ALTER DATABASE DBNAME SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE
언급URL : https://stackoverflow.com/questions/232333/how-long-should-set-read-committed-snapshot-on-take
'programing' 카테고리의 다른 글
Try / Finally (Catch 없이) 예외를 거품으로 만들 것입니까? (0) | 2023.05.12 |
---|---|
'사용자 "postgres"에 대한 암호 인증에 실패 (0) | 2023.05.07 |
Kestrel이란 무엇입니까(vs IIS / Express) (0) | 2023.05.07 |
SQL Server에서 중복된 행을 삭제하는 방법은 무엇입니까? (0) | 2023.05.07 |
WPF 연결 속성 데이터 바인딩 (0) | 2023.05.07 |