현재 오프라인 상태입니다. 인터넷에 다시 연결하기를 기다리고 있습니다.

FIX: 일부 2014 SQL Server의에서 클러스터 된 columnstore 인덱스의 쿼리 결과

이 문서는 Microsoft 기계 번역 소프트웨어를 이용하여 번역되었으며 Microsoft Community에 의한 Community Translation Framework(CTF) 기술 혹은 사람이 번역한 내용에 의하여 사후 편집될 수 있습니다. Microsoft는 Knowledge Base에 있는 모든 문서에 다양한 언어로 접근할 수 있도록 하기 위하여 기계 번역, 사람에 의한 번역 및 커뮤니티가 편집한 내용을 모두 제공합니다. 번역된 문서는 어휘, 구문 및/혹은 문법에 오류가 있을 수 있습니다. Microsoft는 번역 오류로 인한 부정확성, 오류 및/또는 손해와 이를 고객이 사용하는 데에 대하여 책임을 지지 않습니다.

이 문서의 영문 버전 보기:3067257
2014 Microsoft SQL Server의에서 클러스터 된 columnstore 인덱스를 쿼리 하는 동안 발생 하는 문제에 설명 합니다. 이 문서에서는 해결 방법 이 문제입니다.
요약
2014 Microsoft SQL Server의에서 클러스터 된 columnstore 인덱스를 검색 하는 쿼리를 사용 하면, 드문 조건에서 나타날 수 부분 쿼리 결과입니다.

이 문제는 다음 작업을 실행할 때 발생 합니다.
1 단계
[삽입 또는 대량 삽입] Transact SQL 문을 columnstore 인덱스를 클러스터 된 테이블에 데이터를 삽입 합니다. 이 작업을이 수행 하는 동안 다음과 같은 조건이 적용 됩니다.
  • Transact SQL 문을 rowgroup 임계값에 도달 하면 R1 S1 세그먼트를 가진 rowgroup를 닫습니다.
  • 로컬 사전 d 1 세그먼트 S1 가리킵니다.
  • 문이 새 rowgroup r 2에 행을 삽입 하려면 계속.
  • Rowgroup r 1을 닫으면 로컬 사전 d 1도 없는 닫힙니다. D1 사전에 아직 사용 가능한 공간을 열어 두려면 수 있으며 새 rowgroup r 2에 대 한 재사용.
2 단계
Transact SQL 문을 비정상적으로 종료 되거나 새 rowgroup r 2를 종료 하기 전에 취소를 하면 다음 조건이 적용 됩니다.
  • 외부 트랜잭션이 개별적으로 커밋 트랜잭션과에서 Columnstore 메타 데이터 변경 사항이 발생 합니다.
  • 이 시점에서 rowgroup r 1는 "공사 중" 또는 보이지 않는 상태 및 세그먼트 S1 시스템 테이블에 유지 D1 사전을 참조 합니다.
  • 만든 사전 d 1에 대 한 시스템 테이블에 행이 있습니다. Transact SQL 문을 안 닫고 기존 행 하지 못한 때문입니다. 따라서 기존 행을 유지합니다.
3 단계
튜플 동기 백그라운드 작업을 시작 하는 경우 일반적인 상황에서 백그라운드 작업이 보이지 않는 rowgroup r 1과 s 1 세그먼트 제거 Transact SQL 문을 종료 합니다. 새 Transact SQL 문을 이제 시작 rowgroup R3 S3 새 로컬 사전이 필요로 하는 새로운 세그먼트를 만드는 경우 사전 d 1의 내부 ID를 다시 사용할 수 없습니다. 사전을 사용 하는 Id는 추적 하는 columnstore 메모리 상태 때문입니다. 따라서 세그먼트 S3 D2 새 사전을 참조 합니다.

참고: 이 단계에서 조건이 일반적인 조건입니다. 따라서 손상이 발생합니다.
4 단계
SQL Server 적용 됩니다 (및 3 단계에서에서 설명한 대로 수행) 튜플 동기 작업 전에 사전 d 1의 메모리 상태를 상실,이 문서에 설명 되어 있는 문제가 발생 합니다.

메모
  • 다음과 같은 이유로이 이벤트가 발생합니다.
    • SQL Server 메모리 오버 로드와 사전 D1 메모리에서 제거 된 메모리에 내용을 발생 합니다.
    • SQL Server 인스턴스를 다시 시작 합니다.
    • 클러스터 columnstore 인덱스를 포함 하는 데이터베이스 오프 라인으로 및 다음 다시 온라인 상태가.
  • 이러한 이벤트 중 하나가 발생 하 고 SQL Server 메모리 구조를 다시 로드, 레코드가 있는 D1 사전 및 내부 ID 존재 합니다. 이 사전 D1 conceled Transact SQL 문이 종료 될 때 시스템 테이블에 유지 되지 않았습니다.
  • 튜플 동기 백그라운드 작업이 시작 되 면 3 단계에서에서 설명 하는 조건 적용 없음 오류가 발생 합니다.
  • (이전 글머리 기호 항목) 당 튜플 동기 백그라운드 작업을 시작 하기 전에 새 rowgroup R3 만들어지면, SQL Server 새 사전을 D1, 같은 내부 ID 할당 한 사전 D1 S3 rowgroup R3의에서 세그먼트에 대 한 참조입니다.
  • 튜플 동기 백그라운드 작업 시작 전 작업 후 보이지 않는 rowgroup R1 및 해당 세그먼트 S1 새 사전 d 1와 함께 삭제 됩니다. 튜플 동기 고려는 새 사전을 D1 원래 사전을 D1 S1 참조가 서로 같은지 때문에 발생 합니다.

    참고: 이런 상황이 되 면 R3 rowgroup의 내용을 쿼리할 수는 없습니다.
해결 방법
문제가는 SQL Server 대 한 다음 누적 업데이트에서 처음 수정 되었습니다.


이 문제를 해결 다음 일반 배포 릴리스 (GDR) 업데이트에 포함 되어 있습니다.

SQL Server 2014 QFE에 대 한 보안 업데이트
이 업데이트는 중요 한이 수정 프로그램을 누적 업데이트 8, 058 MS15 필요한 보안 업데이트를 포함합니다.

SQL Server 2014 GDR 용 보안 업데이트
중요 한이 수정 프로그램이 포함 되어 및 MS15 058 누적 보안 수정 프로그램입니다.

SQL Server 2014 서비스 팩 1 GDR 용 보안 업데이트
중요 한이 수정만 포함 되어 있습니다.

SQL Server 대 한 누적 업데이트에 대 한

각 새 누적 업데이트 SQL Server 대 한 모든 핫픽스를 포함 하 고 이전 누적 업데이트에 포함 된 모든 보안 수정 프로그램. SQL Server 대 한 최신 누적 업데이트를 참조 하십시오.
추가 정보

오류 메시지

현재 영향을 받는 데이터베이스에서 DBCC CHECKDB를 실행 하면이 수정 프로그램을 적용 한 후 다음 오류 메시지가 나타납니다.
5289 메시지, 수준 16, 상태 1, 줄 1
클러스터 columnstore 인덱스 'cci' 테이블에 ' t '가 사전에 있는 데이터 값과 일치 하지 않는 하나 이상의 데이터 값입니다. 백업에서 데이터를 복원 합니다.

현재 영향을 받는 데이터베이스에서이 수정 프로그램을 적용 한 후 영향을 받는 테이블을 검색 하는 쿼리를 실행할 때 다음 오류 메시지가 나타납니다.
5288 메시지, 수준 16, 상태 1, 줄 1
Columnstore 인덱스는 데이터 사전 값이 일치 하지 않는 하나 이상의 데이터 값입니다. 자세한 내용을 보려면 DBCC CHECKDB를 실행 하십시오.

이 오류를 받은 경우 대량 열/rowgroups 영향을 받지 않는 데이터를 내보내고 다음 놓거나 클러스터 columnstore 인덱스를 만든 후 데이터를 다시 로드 하 여 손상 되지 않은 데이터를 저장할 수 있습니다. 5288 오류를 표시 하지 및 손상 된 건너뜀 rowgroups의 이전 동작으로 되돌리려면 10207 추적 플래그를 사용 해야 합니다.

참고: 이 rowgroup에 세그먼트가 S3 R3 5288 고 5289 오류 메시지가 생성 됩니다. 추적 플래그 10207 누락 된 사전 d 1의 영향을 받지 않는 rowgroup R3 세그먼트를 추출 하는 데 사용 됩니다.

영향을 받는 데이터베이스에 대 한 쿼리

Columnstore 인덱스를 포함 하는 데이터베이스가 이미이 문제로 영향을 여부를 확인 하려면 다음 쿼리를 실행 합니다.
select         object_name(i.object_id) as table_name,        i.name as index_name,        p.partition_number,        count(distinct s.segment_id) as damaged_rowgroups from        sys.indexes i        join sys.partitions p on p.object_id = i.object_id and p.index_id = i.index_id        join sys.column_store_row_groups g on g.object_id = i.object_id and g.index_id = i.index_id and g.partition_number = p.partition_number        join sys.column_store_segments s on s.partition_id = p.partition_id and s.segment_id = g.row_group_id where         i.type in (5, 6)        and s.secondary_dictionary_id <> -1         and g.state_description = 'COMPRESSED'        and s.secondary_dictionary_id not in        (               select dictionary_id from sys.column_store_dictionaries d               where d.hobt_id = p.hobt_id and d.column_id = s.column_id        ) group by         object_name(i.object_id),        i.name,        p.partition_number 

메모
  • Columnstore 인덱스가 SQL Server 실행 하는 서버에 포함 된 모든 데이터베이스에 대해이 쿼리를 실행 해야 합니다. 빈 결과 집합이 데이터베이스에는 영향을 받지 않습니다 것을 나타냅니다.
  • 기간 동안이 쿼리를 실행할 새 rowgroups를 만들거나 기존 rowgroups의 상태를 변경 하는 작업이 수행 되지 않은 경우. 예를 들어, 다음과 같은 활동 rowgroups의 상태를 수정할 수 있습니다: 인덱스 작성, 색인 재구성, 대량 삽입, 튜플 동기 저장소 델타 압축 합니다.

    쿼리를 실행 하기 전에 634 추적 플래그를 사용 하 여 백그라운드 튜플 동기 작업을 해제할 수 있습니다. 이 명령을 사용 하 여 백그라운드 작업을 사용 하지 않으려면: DBCC TRACEON (-1, 634). 쿼리 실행 완료 되 면 다시 명령을 사용 하 여 백그라운드 작업을 설정 해야 합니다: DBCC TRACEOFF (634,-1).

    또한 columnstore 인덱스를 사용 하 여이 쿼리를 실행 하는 동안 테이블에 데이터를 삽입 하지 대량 삽입/BCP/선택-에 명령 인지 확인 합니다.

    쿼리에 긍정 false를 반환 하지 않도록 하려면 다음이 단계를 사용 하는 것이 좋습니다.
현재 상태
Microsoft는 이 문제가 '적용 대상' 섹션에 나열된 Microsoft 제품의 문제임을 확인했습니다.

경고: 이 문서는 자동으로 번역되었습니다.

속성

문서 ID: 3067257 - 마지막 검토: 07/23/2015 02:40:00 - 수정: 3.0

Microsoft SQL Server 2014 Service Pack 1, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard

  • kbqfe kbsurveynew kbexpertiseadvanced kbfix kbmt KB3067257 KbMtko
피드백