Oprava: Částečné výsledky dotazu columnstore seskupený index v SQL Server 2014

DŮLEŽITÉ: Tento článek je přeložen pomocí softwaru na strojový překlad Microsoft. Nepřesný či chybný překlad lze opravit prostřednictvím technologie Community Translation Framework (CTF). Microsoft nabízí strojově přeložené, komunitou dodatečně upravované články, a články přeložené lidmi s cílem zajistit přístup ke všem článkům v naší znalostní bázi ve více jazycích. Strojově přeložené a dodatečně upravované články mohou obsahovat chyby ve slovníku, syntaxi a gramatice. Společnost Microsoft není odpovědná za jakékoliv nepřesnosti, chyby nebo škody způsobené nesprávným překladem obsahu nebo jeho použitím našimi zákazníky. Více o CTF naleznete na http://support.microsoft.com/gp/machine-translation-corrections/cs.

Projděte si také anglickou verzi článku: 3067257
Tento článek popisuje problém, který nastane při dotazu columnstore seskupený index v 2014 Microsoft SQL Server. Tento článek obsahuje řešení Chcete-li tento problém.
Souhrn
Při použití dotazu, který vyhledá columnstore seskupený index v 2014 Microsoft SQL Server, může za výjimečných podmínek obdržíte částečné výsledky.

K tomuto problému dochází při spuštění následující operace.
Krok 1
Příkaz Transact-SQL [INSERT nebo HROMADNÉ vložení] vloží data do tabulky, která má columnstore index clusteru. Během této operace se použijí následující podmínky:
  • Práh rowgroup dosáhne příkazu Transact-SQL zavře rowgroup R1, který má segment S1.
  • Segment S1 odkazuje na místní slovník D1.
  • Příkaz Vložit řádky do nové rowgroup R2 bude pokračovat.
  • Po ukončení rowgroup R1 místní slovník D1 také nemá uzavřít. Pokud slovník D1 má stále k dispozici prostor, můžete nechat otevřené a jej znovu použijte pro nové rowgroup R2.
Krok 2
Pokud došlo k neobvyklému ukončení příkazu Transact-SQL nebo zrušeno před jeho zavřením nové rowgroup R2 platí následující podmínky:
  • Columnstore metadata změn v subtransactions, které nezávisle na vnější transakce potvrzena.
  • V tomto bodě odkazuje na rowgroup, který přetrvává R1 v systémové tabulce "ve výstavbě" nebo NEVIDITELNÉ státu, a segment S1 slovník D1.
  • Neexistuje řádek vytvořen v systémové tabulce D1 slovníku. Je to proto, že nikdy příležitost k ukončení stávajícího řádku jazyka Transact-SQL. Proto zůstává v existující řádek.
Krok 3
V typické situaci, pokud se spustí úlohy n-tice Přesunovatel pozadí po ukončení příkazu Transact-SQL úloha na pozadí odebere neviditelné rowgroup R1 a segment S1. Pokud nový příkaz Transact-SQL je spuštěn a vytvoří rowgroup R3, který má nový segment S3, který vyžaduje nový slovník místní, nelze znovu použít vnitřní ID slovník D1. Je to proto, že uchovává informace o stavu v paměti columnstore slovníku ID, které se používají. Proto segmentu S3 bude odkazovat na nový slovník D2.

Poznámka: Podmínka v tomto kroku je běžné podmínky. Proto žádné poškození.
Krok 4
Pokud SQL Server dojde ke ztrátě stavu v paměti slovník D1 před úkol Přesunovatel n-tice se projeví (provádí, jak je popsáno v kroku 3), dojde k problému popsaného v tomto článku.

Poznámky
  • K této události dochází z některého z následujících důvodů:
    • SQL Server dojde k přetížení paměti a v paměti obsah slovníku vyloučení D1 z paměti.
    • Po restartování instance serveru SQL Server.
    • Databáze, která obsahuje index columnstore clusteru přejde do režimu offline a poté přejde do režimu online.
  • Po jedné z těchto událostí dojít a SQL Server znovu načte do paměti struktur, neexistuje žádný záznam, slovník D1 a jeho vnitřní ID existoval. Je to proto, že slovník D1 nebyla zachována v systémové tabulky v případě, že bylo ukončeno příkazu Transact-SQL nebo conceled.
  • Pokud v tomto okamžiku spuštění úlohy n-tice Přesunovatel pozadí žádné chyby nastat, pokud platí podmínky, které jsou popsány v kroku 3.
  • Pokud nový rowgroup R3 je vytvořen před spuštěním úlohy pozadí Přesunovatel řazené kolekce členů (podle předchozích odrážek zboží), SQL Server přiřadí stejný vnitřní ID nového slovníku D1 a odkazuje na D1 slovník pro segment S3 v rowgroup R3.
  • Po spuštění úlohy n-tice Přesunovatel pozadí po předchozí akci neklesne, neviditelné rowgroup R1 a segmentů S1 a nový slovník D1. Je to způsobeno Přesunovatel n-tice považuje tento nový slovník D1 a původní slovník D1 S1 odkazy jsou stejné.

    Poznámka: Pokud nastane tento stav, nelze zadat dotaz obsah rowgroup R3.
Řešení
Tento problém byl poprvé opraven v následující kumulativní aktualizace pro SQL Server:


Oprava tohoto problému je také součástí následující aktualizace vydání (GDR) obecné rozdělení:

Aktualizace zabezpečení pro SQL Server 2014 QFE
Tato aktualizace zahrnuje kumulativní aktualizace 8 této důležité opravy a požadované aktualizace zabezpečení MS15-058.

Aktualizace zabezpečení pro SQL Server 2014 GDR
Tato aktualizace obsahuje důležité oprava a kumulativní opravy zabezpečení prostřednictvím MS15-058.

Aktualizaci pro SQL Server 2014 Service Pack 1 GDR
Tato aktualizace obsahuje pouze této důležité opravy.

O kumulativní aktualizace pro SQL Server

Každé nové kumulativní aktualizace pro SQL Server obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí kumulativní aktualizace. Viz nejnovější kumulativní aktualizace pro SQL Server:
Další informace

Chybové zprávy

V současnosti ohrožený databáze při spuštění DBCC CHECKDB, po instalaci této opravy můžete zobrazit následující chybová zpráva:
Msg 5289, úroveň 16 stav 1, řádek 1
Columnstore seskupený index "Ski" v tabulce ' c ' má jeden nebo více datových hodnot, které neodpovídají hodnotám dat ve slovníku. Data obnovte ze zálohy.

V současnosti ohrožený databáze při spuštění dotazu, který po instalaci této opravy příslušné tabulky zobrazí následující chybová zpráva:
Msg 5288, úroveň 16 stav 1, řádek 1
Columnstore index má jeden nebo více datových hodnot, které neodpovídají hodnotám dat ve slovníku. Další informace získáte spuštěním DBCC CHECKDB.

Pokud obdržíte tyto chyby, nepoškozeným data můžete uložit pomocí hromadného exportu dat sloupce/rowgroups beze změn a poté opětovné načítání dat po přetažení nebo vytvořit columnstore seskupený index. Je vhodné povolit příznak trasování 10207 5288 chybu potlačit a vrátit ke starému chování přeskočení poškozené rowgroups.

Poznámka: Chybové zprávy 5288 a 5289 jsou generovány pro tento rowgroup R3, který má segment S3. Příznak trasování 10207 slouží k extrakci segmentů rowgroup R3, které nejsou ovlivněny chybí slovník D1.

Dotaz pro příslušné databáze.

Chcete-li zjistit, zda databáze, která obsahuje indexy columnstore již tento problém týká, spusťte následující dotaz:
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 

Poznámky
  • Je třeba spustit tento dotaz proti každé databázi, která obsahuje columnstore indexy na serveru, který je spuštěn SQL Server. Nastavit prázdný výsledek označuje, že databáze není ovlivněna.
  • Provedení tohoto dotazu během období pokud neprobíhá žádná činnost, která bude vytvářet nové rowgroups nebo změnit stav existující rowgroups. Například následující činnosti, můžete změnit stav rowgroups: vytvoření indexu, reorganizovat index, hromadné vložení, n-tice Přesunovatel komprese delta obchody.

    Před spuštěním dotazu můžete zakázat úloha pozadí n-tice přesunování pomocí příznaku trasování 634. Tento příkaz umožňuje zakázat úloha na pozadí: DBCC TRACEON (634, -1). Po dokončení spuštění dotazu nezapomeňte znovu povolit úloha na pozadí pomocí příkazu: DBCC TRACEOFF (634, -1).

    Ujistěte se také neexistují žádné HROMADNÉ vložení/BCP/výběr-do příkazy vkládání dat do tabulek, které pomocí columnstore indexu je spuštěn dotaz.

    Je vhodné zabránit dotaz vrací false pozitivní, postupujte následujícím způsobem.
Prohlášení
Společnost Microsoft potvrdila, že se jedná o problém v produktech společnosti Microsoft, které jsou uvedeny v části "Platí pro".

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 3067257 - Poslední kontrola: 07/22/2015 17:37:00 - Revize: 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 KbMtcs
Váš názor