인덱스 재구성 또는 재구매가 걱정되는 DBA는 데이터 손실을 유발할 수 있습니까?


14

인덱스 조각화가> 95 % 인 일부 데이터베이스가 있습니다. 최선을 다해 인덱스가 재구성 된 적이 없다고 말할 수 있습니다. 몇년에 걸쳐.

(공평하게,이 테이블은 자동 업데이트 된 통계를 사용하는 것으로 보입니다. 또한 공평하게도, 매일 백업 및 매시간 trx 로그 백업에 대해 부지런합니다.)

내가 물었을 때 DBA는 인덱스를 재구성하거나 재구성하기를 꺼려했다. 내가 왜 물었을 때, 그는 실제로 그것을 설명 할 수 없었습니다. 결국 그는 잠재적 인 데이터 손실에 대해 우려하고 있다고 말했다. 예를 들어 데이터베이스 중 하나는 Great Plains Dynamics 회계 응용 프로그램에서 사용되며 그에 대해 매우 염려하는 것처럼 보입니다.

나는 DBA가 아니지만 내가 읽은 내용에서 그의 불안은 ... 이해하기 어려운 것 같습니다.

다음에 무엇을해야할지 모르겠습니다. 어떻게 진행해야합니까?


데이터베이스가 연중 무휴로 공격을받지 않고 오프라인 상태가되면 세상은 끝날 것입니다. 그런 행동에 대한 변명의 여지가 없습니다. 나는 매주 12,000 개가 넘는 데이터베이스에 대한 재구성과 통계를 다시 생각하지 않고 스크립팅합니다. 16 년 동안 불량 컨트롤러로 인해 하나만 손상되었습니다.
Brain2000

답변:


22

데이터베이스 인덱스를 다시 작성하면 데이터가 손실되지 않아야합니다. 그러나 재 구축중인 인덱스는 일반적으로 재 구축이 완료 될 때까지 사용할 수 없으므로 성능이 크게 저하 될 수 있습니다. 따라서 영향을받는 시스템이 유휴 상태 인 시간 외 시간에 수행해야합니다.

편집증은 DBA에서 좋은 일입니다-데이터 손실이 걱정되면 백업을 적절히 테스트하고 (별도의 시스템에 복원하고 데이터가 모두 있는지 확인하십시오) 인덱스를 다시 작성하기 전에 여전히 전체 백업을 수행하는 것이 우려되는 경우 적절한 예방 조치가 필요합니다.


11
편집증에 +1은 좋은 DBA 특성입니다
Joel Coel

나는 건강한 편집증을 완전히 이해하고 고맙게 생각합니다. 두 번 측정하고 한 번 자릅니다. 내가 독창적 인 곳은 이것이 주의보다는 이해의 부족에 관한 것 같습니다 . 그리고 "주의 깊게 시도하는 방법을 결정합시다"보다는 "그렇지 않을 것"입니다. 데이터 사본으로 테스트 EC2 인스턴스를 스풀링하고, 인덱스를 재구성하고, 시간을 정하고, 결과 테이블 행을 델타하여 데이터가 손상되지 않았 음을 확인할 수 있습니다. 그런 종류의 계획은 무 활동과는 반대로 조심할 것입니까?
Greg Hendershott

1
인덱스 재구성은 항상 온라인 (조각 모음 중에 모든 인덱스를 사용할 수 있음)이며 인덱스에 WITH (ONLINE=ON)BLOB 열이 포함되지 않는 한 인덱스 재구성도 온라인으로 만들 수 있습니다 .
Remus Rusanu

@Greg 네, 사고가 나도 지옥을 혼란 "하자 단지 그가 그렇게 그들은 아마도 성능을 아프게하고 세분화 된 인덱스를 만지지"- 가끔 REINDEX인덱스 내용이 변경 테이블의 "예방 정비"등은 많은 예쁜 내 경험에서 일반적인 (인덱스가 대부분 정적 인 경우는 적은 물건입니다)
voretaq7

@Remus good tip-이렇게하면 성능에 미치는 영향이 줄어 듭니다 (여전히 디스크 I / O가 높아져 일부 속도가 느려질 수 있지만 최소한 인덱스를 사용하는 항목은 순차적 스캔보다는 여전히 사용할 수 있습니다) )
voretaq7

6

인덱스를 다시 작성하거나 조각 모음을 수행하면 데이터가 손실 될 위험이 없습니다.


이미 어느 정도의 데이터 손상이 있거나 하드웨어에 문제가없는 한이 아니라면. 그러나 두 경우 모두 인덱스 조각화는 걱정할 필요가 없습니다!
db2

그러나 이는 인덱스 재 구축으로 인한 손상이 아니라 다른 문제로 인한 손상이 아닙니다.
mrdenny

4

인덱스를 재구성하는 데는 시간이 덜 걸리고 SQL Server의 노력이 줄어들어 주야 유형의 인스턴스에서 수행 할 수 있습니다. 당신이 말하는 것이 사실이라면, 이전에는 없었던 색인을 재구성하더라도 서버에 더 큰 영향을 줄 수 있습니다. 인덱스를 다시 작성하면 삭제 및 재 구축되므로 SQL Server에서 상당한 노력이 필요합니다. 주중에 재 구축하는 것은 서버가 인덱스로 바쁘고이를 사용하는 사람들에게 서비스를 제공 할 위험이 없습니다.

voretaq7에 동의합니다. 인덱스 작업에 대해 걱정이되는 경우 먼저 개발 또는 테스트 서버에서 사용해보고 어떻게 반응하는지 확인하십시오.


또 다른 접근 방식은 명시 적으로 DROP INDEX다시 작성하는 CREATE INDEX것입니다. SQL Server에 대해서는 잘 모르겠지만 PostgreSQL은 때로는 인덱스를 다시 작성하려고 시도하는 것보다 인덱스를 날려 버리는 것이 좋습니다 REINDEX.
voretaq7

SQL Server에서 삭제 및 다시 생성이 필요하지 않다고 확신합니다.
저스틴 친애하는

@Justin 나는 당신이 옳다고 확신합니다 (사실 Sybase 시절부터 재색 인화 동작이 효과적으로 삭제 / 만들기 때문에 Postgres와 같은 색인 잠금 이상이 없음을
기억합니다

인덱스를 재구성하는 데 시간이 덜 걸릴 수 있습니다. 어느 쪽이 더 오래 걸리는지는 인덱스의 조각화 양에 달려 있습니다.
mrdenny
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.