Remediere: Parțială are ca rezultat o interogare de un index grupat columnstore în SQL Server 2014

IMPORTANT: Acest articol este tradus cu ajutorul software-ului Microsoft de traducere automată și poate fi corectat prin intermediul tehnologiei Community Translation Framework (CTF). Microsoft oferă articole traduse automat, post-editate de comunitate și articole traduse de oameni, pentru a permite accesul la toate articolele din Baza noastră de cunoștințe în mai multe limbi. Articolele traduse automat și post-editate pot conține greșeli de vocabular, sintaxă și/sau gramatică. Microsoft nu este responsabil de inexactitățile, erorile sau daunele cauzate de traducerea greșită a conținutului sau de utilizarea acestuia de către clienți. Găsiți mai multe informații despre traducerea în colaborare la http://support.microsoft.com/gp/machine-translation-corrections/ro.

Faceți clic aici pentru a vizualiza versiunea în limba engleză a acestui articol: 3067257
Acest articol prezintă o problemă care apare în timpul unei interogări de un index grupat columnstore în Microsoft SQL Server 2014. Acest articol furnizează o rezolvare pentru această problemă.
Rezumat
Când utilizați o interogare care scanează un index grupat columnstore în Microsoft SQL Server 2014, este posibil să în condiții de rare, primiți rezultate interogări parțială.

Această problemă apare când se execută operația următoare.
Pasul 1
O instrucțiune Transact-SQL [INTRODUCEȚI sau BULK INSERT] introduce date într-un tabel care are cu clustere columnstore index. În timpul acestei operațiuni, se aplică următoarele condiții:
  • Când instrucțiunea Transact-SQL atinge pragul rowgroup, acesta se închide rowgroup R1 care are segment S1.
  • Segment S1 indică spre local dicționar D1.
  • Instrucțiunea Urmărire să introduceți rândurile nou rowgroup R2.
  • Atunci când este închis rowgroup R1, dicționarul local D1, de asemenea, nu trebuie închise. Dacă dicționar D1 are tot spațiul disponibil, puteți lăsa deschise și reutilizați it pentru rowgroup noi R2.
Pasul 2
Dacă instrucțiunea Transact-SQL este s-a încheiat anormal sau anulat înainte de a se închide rowgroup nou R2, se aplică următoarele condiții:
  • Modificările de metadate Columnstore apar în subtransactions care se realizează independent de tranzacții exterior.
  • În acest moment, rowgroup R1 persistă în tabelul de sistem la o "în construcție" sau invizibile starea și segment S1 face referire la dicționar D1.
  • Nu există nici un rând creat în tabelul de sistem pentru dicționar D1. Aceasta se întâmplă deoarece instrucțiunea Transact-SQL nu are posibilitatea de a închide rândul existente. De aceea, persistă rândul existente.
Pasul 3
Într-o situaţie tipică, dacă mai mulți membri mover activitate de fundal pornește după ce se termină instrucțiunea Transact-SQL, activitate de firmă de fundal elimină rowgroup invizibil R1 şi segment S1. Dacă o instrucțiune Transact-SQL nou este pornit acum și creează rowgroup R3 care are un segment S3 care necesită o nouă dicționar local, nu puteţi reutiliza ID-ul intern al dicționar D1. Aceasta se întâmplă deoarece starea din memorie a columnstore ține evidența dicționar ID-uri care sunt utilizate. De aceea, segment S3 vor face referire la dicționar nou D2.

Notă Starea în acest pas este o condiție obișnuite. Prin urmare, nu deteriorarea se produce.
Pasul 4
Dacă SQL Server pierde statul din memorie de dicționar D1 înainte de mai mulți membri mover activitate de firmă se aplică (și efectuează conform descrierii de la Pasul 3), se produce problema descrisă în acest articol.

Note
  • Acest eveniment se produce pentru oricare dintre următoarele motive:
    • SQL Server se confruntă cu memorie suprasarcină și conținutul din memorie dicționar D1 sunt eliminat din memorie.
    • Instanță de SQL Server este repornit.
    • Baza acoperire de date care conține indexul clustere columnstore merge offline și apoi vine înapoi online.
  • După una dintre aceste evenimente apar și SQL Server reîncărca structura din memorie, nu există nici Înregistrare A care un dicționar D1 și său intern ID exista. Aceasta se întâmplă deoarece dicționar D1 nu s-a reținut în tabelele de sistem când s-a încheiat instrucțiunea Transact-SQL sau conceled.
  • Dacă mai mulți membri mover activitate de fundal pornește în acest moment, nu există erori apar deoarece se aplică condițiile descrise în Pasul 3.
  • Dacă o nouă rowgroup R3 este creat înainte de pornirea mai mulți membri mover activitate de fundal (per elementul anterior cu marcatori), SQL Server atribuie același ID intern Noul dicționar D1 și face referire dicționar D1 segmentul S3 în rowgroup R3.
  • Pornirea mai mulți membri mover activitate de fundal după acţiunea anterioară, ea scade invizibil rowgroup R1 și sale segmente S1 cu noul dicționar D1. Aceasta se întâmplă deoarece motor de mai mulți membri consideră că Noul dicționar D1 și Dicționarul originală D1 că S1 referințe sunt aceleași.

    Notă Când apare această situație, nu pot interoga conținutul rowgroup R3.
Rezoluţie
Problema a fost rezolvată mai întâi în următoarele actualizări cumulative pentru SQL Server:


Remedierea pentru această problemă este, de asemenea, incluse în următoarele actualizări distribuire generală (GDR) versiune:

Actualizare de securitate pentru SQL Server 2014 QFE
Această actualizare include 8 de actualizare cumulativă, această remediere importante și actualizările de securitate MS15 058 necesare.

Actualizare de securitate pentru SQL Server 2014 GDR
Această actualizare include această remediere importante și remedierile de securitate cumulativă prin MS15 058.

Actualizare nonsecurity pentru SQL Server 2014 pachet Service Pack 1 GDR
Această actualizare include numai această remediere importante.

Despre actualizările cumulative pentru SQL Server

Fiecare nouă actualizare cumulativă pentru SQL Server conține toate remedierile rapide și toate remedierile de securitate care au fost incluse în actualizarea cumulativă anterioară. Vedeți cele mai recente actualizări cumulative pentru SQL Server:
Informaţii suplimentare

Mesaje de eroare

Într-o bază acoperire de date afectate în prezent, dacă executați DBCC CHECKDB după ce Aplicați această remediere, primiţi următorul mesaj de eroare:
MSG 5289, Level 16, State 1, Line 1
Clustere columnstore index 'cci"din tabelul t ' are unul sau mai multe valori date care se potrivesc cu valorile date într-un dicționar. Restaurați datele dintr-o copiere de rezervă.

Într-o bază acoperire de date afectate în prezent, atunci când executați o interogare care scanează tabelele afectate după ce Aplicați această remediere, primiţi următorul mesaj de eroare:
MSG 5288, Level 16, State 1, Line 1
Columnstore index are unul sau mai multe valori date care se potrivesc cu valorile date într-un dicționar. Executați DBCC CHECKDB pentru mai multe informații.

Dacă primiți aceste erori, aveți posibilitatea să salvați datele nedeteriorat de masivă exportul datelor de coloane/rowgroups neafectat și apoi reîncărca datele după ce drop sau creați indexul cluster columnstore. Trebuie să activați semnalizatorul de urmărire 10207 pentru a suprima 5288 eroarea și a reveni la comportamentul vechi skipping rowgroups deteriorate.

Notă Se generează mesaje de eroare 5288 și 5289 pentru această rowgroup R3 care are segment S3. Semnalizatorul de urmărire 10207 este folosit pentru a extrage segmente de rowgroup R3, care nu sunt afectate de dicționar lipsă D1.

Interogare pentru bazele acoperire de date afectate

Pentru a determina dacă baza acoperire de date care conține columnstore indexurile deja este afectat de această problemă, executați interogarea următoarele:
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 

Note
  • Trebuie să executați această interogare pentru fiecare bază acoperire de date care conține columnstore indexurile pe serverul care execută SQL Server. Un set de rezultate gol indică faptul că baza acoperire de date nu este afectat.
  • Executați această interogare într-o perioadă atunci când nu există nici o activitate care va crea noi rowgroups sau modifică starea rowgroups existente. De exemplu, următoarele activități poate modifica starea rowgroups: index de compilare, index reorganiza, Inserare masivă, mai mulți membri mover comprimarea magazine delta.

    Înainte de a executa interogarea, aveți posibilitatea să dezactivați fundal mai mulți membri mover activitate de firmă utilizând semnalizatorul de urmărire 634. Utilizați această comandă pentru a dezactiva activitate de fundal: DBCC TRACEON (634, -1). După ce interogarea termină execuția, nu uitați să reactivați activitate de fundal utilizând comanda: DBCC TRACEOFF (634, -1).

    De asemenea, asiguraţi-vă că există nicio BULK INSERT BCP/SELECT-în comenzi introducerea datelor în tabelele care utilizează columnstore index în marcă de timp ce se execută această interogare.

    Se recomandă să utilizați acești pași pentru a împiedica returning fals pozitive interogarea.
Stare
Microsoft a confirmat că aceasta este o problemă în produsele Microsoft enumerate în secţiunea "Se aplică la".

Avertisment: acest articol a fost tradus automat

Свойства

Номер статьи: 3067257 — последний просмотр: 07/26/2015 07:55: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 KbMtro
Отзывы и предложения