sql-server - 확인 - 트랜잭션 로그 관리




데이터 조작시 SQL Server 속도 향상-트랜잭션 로깅 기능 끄기 (4)

필자는 분석 작업을 수행하는 많은 데이터에 대해 SQL Server 2005를 데이터 저장소로 사용합니다. 이것은 업데이트 나 실시간 데이터를 캡처하지 않기 때문에 트랜잭션 데이터베이스가 아닙니다. 내 고객으로부터 몇 기가의 데이터를 가져 와서 SQL Server에로드하고 일련의 조작을 수행합니다. 그런 다음이 데이터를 가져 와서 대부분의 분석을 수행하는 R로 가져옵니다. 그런 다음 작은 데이터를 SQL Server의 테이블로 밀어 넣고 조인 또는 두 개를 수행합니다.

SQL Server의 로그가 커지면서 시간이 많이 들었습니다.이 로그를 생성하려면 어느 정도의 오버 헤드가 필요합니다. 로깅이 거의 없거나 전혀 실행되지 않도록 SQL Server를 구성하려면 어떻게합니까? 일이 부패하면 나는 처음부터 기쁜 마음으로 시작합니다. 모든 아이디어를 어떻게 빨리 만들 수 있습니까?

BTW, 통나무를 축소하는 방법을 알려줄 필요가 없습니다. 벌써 그렇게하고 있습니다. 그러나 나는 처음부터 로그를 만들 필요가 없었 으면 좋겠다. 나는 R을 사용하기에는 너무 큰 DB를 사용하기 때문에 DB를 사용하고있다.

SQL Server보다 간단한 DB를 사용해야합니까? 나 한테 망치로 개미를 죽이고 있다고 말해도 돼. 그러나보다 적절한 크기의 망치를 추천하십시오. :)


로깅을 최소화하려면 간단한 복구 모델을 사용하고 작업을 일괄 처리하십시오.


링크를 보려면 데이터베이스 복구 모델을 변경하여 SQL 서버의 로그 소비를 최소화 할 수 있습니다. 동시성과 트랜잭션을 다루지 않으므로 Microsoft Access를 고려 했습니까?


대형 데이터 세트로 작업 할 때 로깅을 피하는 한 가지 방법은 SELECT / INTO를 사용하는 것입니다. 새 테이블이 생성되지만 아무 것도 기록되지 않습니다.

이 일을 할 때주의해야 할 몇 가지 사항이 있습니다.

  • 계산 된 열은 일반 데이터 열이됩니다.
  • 인덱싱 및 ID 열도 설정해야합니다.

제대로 완료되면 공간뿐 아니라 처리 시간도 절약 할 수 있습니다.

대안은 내가 지금하고있는 것과 같은 것이다.

UPDATE [MyTable] 
SET    [Message] = REPLACE([Message], N'Content_Type', N'Content-Type')

잘 작동하지만 하나의 거대한 트랜잭션 세트를 만드는 전체 테이블을 업데이트합니다. 대신 다음을 수행 할 수 있습니다.

DECLARE @IDs TABLE ([id] int)
DECLARE @Batch TABLE ([id] int)

INSERT INTO @IDs ([ID]) SELECT [ID] FROM [MyTable]

WHILE EXISTS (SELECT TOP 1 [ID] FROM @IDs)
BEGIN
  INSERT INTO @Batch ([ID]) SELECT TOP 1000 [Id] FROM @IDS

  UPDATE [MyTable] 
  SET    [Message] = REPLACE([Message], N'Content_Type', N'Content-Type') 
  WHERE  [Id] IN (SELECT [Id] FROM @Batch)

  DELETE @IDs WHERE [Id] IN (SELECT [Id] FROM @Batch)
  DELETE @Batch
END

이렇게하면 트랜잭션 크기를 줄이려면 테이블을 한 번에 1,000 개의 행으로 업데이트합니다.


트랜잭션 로깅 기능을 해제하여 SQL Server를 훨씬 빠르게 만들지는 않겠지 만 이미 제안 된 다른 기능처럼 단순 또는 대량 로깅 복구 모드로 이동하여 로그 크기를 줄일 수 있습니다.

필자가 필자가 생각한 특별한 상황을 제외하고는 절대로 완전 복구 모드로 전환해서는 안된다.

이 주된 이유는 백업이 없거나 모든 데이터가 백업에없는 우연히 실행 된 UPDATE, DELETE 또는 TRUNCATE의 경우 전체 복구의 트랜잭션 로그가 복구의 유일한 희망 일 수 있다는 것입니다.

이 주제에는 트랜잭션 로그 읽기가 복구의 최후의 희망이었던 몇 가지 스레드가 있습니다.

SQL Server 2005에서 UPDATE 쿼리를 롤백하는 방법은 무엇입니까?

SQL Server 2005에서 삭제 작업을 실행 취소하는 방법?

다시 말하지만, 귀하의 특정 경우에 이것은 아마도 문제가 아니지만 내 추측은 다른 사람들에게 유용 할 수 있다는 것입니다.





sql-server-2005