Prihláste sa s kontom Microsoft
Prihláste sa alebo si vytvorte konto.
Dobrý deň,
Vyberte iné konto.
Máte viacero kont
Vyberte konto, s ktorým sa chcete prihlásiť.

V tomto článku sa popisuje problém, ktorý sa vyskytuje počas dotazu skupinového indexu Columnstore v Microsoft SQL Server 2014. Tento článok obsahuje riešenie tohto problému.

Súhrn

Keď použijete dotaz, ktorý skenuje skupinový columnstore index v Microsoft SQL Server 2014, za výnimočných podmienok sa môže zobraziť čiastočné výsledky dotazu. Tento problém sa vyskytuje, keď sa spustí nasledujúca operácia.

Krok 1

Príkaz Transact-SQL [vloženie alebo HROMADné vloženie] vloží údaje do tabuľky, ktorá obsahuje skupinový columnstore index. Počas tejto operácie sa používajú tieto podmienky:

  • Keď príkaz Transact-SQL dosiahne hranicu rowgroup, zavrie rowgroup R1 s segmentom S1.

  • Segment S1 odkazuje na lokálny slovník D1.

  • Príkaz pokračuje v vkladaní riadkov do novej rowgroup R2.

  • Keď je rowgroup R1 zatvorený, lokálny slovník D1 sa tiež nemusí zatvárať. Ak má slovník D1 stále dostupný priestor, môžete ho nechať otvoriť a znova použiť pre novú rowgroup R2.

Krok 2

Ak sa príkaz Transact-SQL ukončí abnormálne alebo zrušené pred zatvorením nového rowgroup R2, uplatnia sa tieto podmienky:

  • Zmeny v columnstore metaúdajoch sa vyskytujú v podtransakciách, ktoré sa zaväzujú nezávisle od vonkajšej transakcie.

  • V tomto bode rowgroup R1 pretrváva v systémovej tabuľke v časti stavebníctvo alebo v neviditeľnom stave a Segment S1 odkazuje na slovník D1.

  • V systémovej tabuľke pre slovník D1 nie je vytvorený žiadny riadok. Je to preto, lebo príkaz Transact-SQL nikdy neposkytuje príležitosť na zatvorenie existujúceho riadka. Preto existujúci riadok pretrváva.

Krok 3

Ak sa po skončení príkazu Transact-SQL v typickej situácii spustí úloha na pozadí mover, úloha pozadia odstráni neviditeľné rowgroup R1 a Segment S1. Ak sa teraz spustí nový príkaz Transact-SQL a vytvorí sa rowgroup R3 s novým segmentom S3, ktorý vyžaduje nový miestny slovník, nie je možné opätovne použiť internú identifikáciu slovníka D1. Je to spôsobené tým, že stav v pamäti funkcie columnstore zaznamenáva identifikátory slovníkov, ktoré sa používajú. Z tohto dôvodu bude segment S3 odkazovať na nový slovník D2.Poznámka: Podmienka v tomto kroku je bežnou podmienkou. Preto sa nevyskytuje žiadne poškodenie.

Krok 4

Ak SQL Server stratí v pamäti stav slovníka D1 pred nadobudnutím účinnosti úloha Mover (a vykoná sa podľa postupu popísaného v kroku 3), vyskytne sa problém popísaný v tomto článku.Poznámky

  • Táto udalosť sa vyskytuje z niektorého z týchto dôvodov:

    • SQL Server používa preťaženie pamäte a obsah v pamäti slovníka D1 sa z pamäte vylúči.

    • Inštancia programu SQL Server sa reštartuje.

    • Databáza, ktorá obsahuje skupinový columnstore index, prejde do režimu offline a potom sa vráti do režimu online.

  • Keď sa vyskytne niektorá z týchto udalostí a SQL Server načíta štruktúry v pamäti, neexistuje žiadny záznam, ktorý existoval slovník D1 a jeho vnútorné ID. Dôvodom je skutočnosť, že slovník D1 sa v systémových tabuľkách nezachoval, keď bol príkaz Transact-SQL ukončený alebo conceled.

  • Ak sa v tomto bode spustí úloha na pozadí mover, nevyskytnú sa žiadne chyby, pretože sa použijú podmienky popísané v kroku 3.

  • Ak sa vytvorí nová rowgroup R3 pred spustením úlohy na pozadí mover (na základe predchádzajúcej položky odrážky), SQL Server priradí k novému slovníku D1 rovnaké interné ID a odkazuje na slovník D1 pre segment S3 v rowgroup R3.

  • Keď sa po predchádzajúcej akcii spustí úloha na pozadí mover na základe, klesne neviditeľné rowgroup R1 a jeho segmenty S1 spolu s novým slovníkom D1. Tento problém sa vyskytuje, pretože premiestnený zdroj informácií sa domnieva, že nový slovník D1 a pôvodný slovník D1, ktoré sú odkazy na S1, sú rovnaké.Poznámka: Keď sa vyskytne táto podmienka, nemôžete Dotazovať obsah rowgroup R3.

Riešenie

Tento problém bol najskôr vyriešený v nasledujúcich kumulatívnych aktualizáciách pre SQL Server:

Kumulatívna aktualizácia 1 pre SQL server 2014 SP1 Kumulatívna aktualizácia 8 pre SQL Server 2014Oprava tohto problému je zahrnutá aj v nasledujúcich aktualizáciách NDR (General Distribution release):

Aktualizácia zabezpečenia pre SQL Server 2014 QFE  Táto aktualizácia obsahuje Kumulatívna aktualizácia 8, túto dôležitú opravu a požadované aktualizácie zabezpečenia MS15 058.Aktualizácia zabezpečenia pre SQL Server 2014 GDR  Táto aktualizácia obsahuje tieto dôležité opravy a kumulatívne opravy zabezpečenia prostredníctvom MS15-058.Aktualizácia nebezpečnosti pre SQL Server 2014 Service Pack 1 NDR  Táto aktualizácia obsahuje len túto dôležitú opravu.

Každá nová Kumulatívna aktualizácia pre SQL Server obsahuje všetky rýchlych opráv a všetky opravy zabezpečenia, ktoré boli súčasťou predchádzajúcej kumulatívnej aktualizácie. Pozrite si najnovšie kumulatívne aktualizácie pre SQL Server:

Ďalšie informácie

Chybové hláseniaV aktuálne postihnutej databáze, ak spustíte DBCC CHECKDB po použití tejto opravy, zobrazí sa toto chybové hlásenie:

MSG 5289, úroveň 16, štát 1, čiara 1 skupinový columnstore index "CCI" na table "t" obsahuje jednu alebo viac hodnôt údajov, ktoré sa nezhodujú s hodnotami údajov v slovníku. Obnovenie údajov zo zálohy.

V aktuálne dotknutej databáze pri spustení dotazu, ktorý skenuje príslušné tabuľky po použití tejto opravy, sa zobrazí nasledujúce chybové hlásenie:

MSG 5288, úroveň 16, štát 1, columnstore index s riadkom 1 obsahuje jednu alebo viac hodnôt údajov, ktoré sa nezhodujú s hodnotami údajov v slovníku. Ak potrebujete ďalšie informácie, spustite príkaz DBCC CHECKDB.

Ak sa vám zobrazia tieto chyby, môžete uložiť nepoškodené údaje hromadným exportovaním údajov o nedotknutých stĺpcoch/rowgroups a potom opätovne načítať údaje po vložení alebo vytvorení skupinového columnstore indexu. Ak chcete potlačiť chybu 5288 a vrátiť sa k starému správaniu vynechávania poškodených rowgroups, mali by ste zapnúť príznak sledovania 10207. Poznámka: Pre tento rowgroup R3 s segmentom S3 sa vygeneruje chybové hlásenie 5288 a 5289. Príznak sledovania 10207 sa používa na extrakciu segmentov rowgroup R3, ktoré nie sú ovplyvnené chýbajúcim slovníkom D1.

Dotaz pre príslušné databázyAk chcete zistiť, či databáza obsahujúca columnstore indexy už tento problém ovplyvňuje, spustite nasledujúci 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:

  • Tento dotaz musíte spustiť s každou databázou, ktorá obsahuje columnstore indexy na serveri, na ktorom je spustený server SQL Server. Prázdna množina výsledkov označuje, že databáza nie je ovplyvnená.

  • Spustiť tento dotaz počas obdobia, v ktorom nie je k dispozícii žiadna aktivita, ktorá bude vytvárať nové rowgroups alebo zmeniť stav existujúceho rowgroups. Nasledujúce aktivity môžu napríklad upraviť stav rowgroups: indexovanie, Reorganizácia indexov, Hromadná vložka, presunutie Mover, kompresia Delta obchodov. Skôr než spustíte dotaz, môžete vypnúť úlohu Mover na pozadí s použitím príznaku sledovania 634. Tento príkaz použite na vypnutie úlohy na pozadí: DBCC TRACEON (634;-1). Po dokončení spúšťania dotazu nezabudnite opätovne povoliť úlohu pozadia pomocou príkazu: DBCC TRACEOFF (634;-1). Skontrolujte tiež, či nie sú k dispozícii žiadne HROMADné vloženie/BCP/SELECT-do príkazov na vkladanie údajov do tabuliek, ktoré používajú columnstore index, kým je tento dotaz spustený. Odporúča sa použiť tieto kroky na zabránenie tomu, aby dotaz vrátil falošné pozitívy.

Stav

Spoločnosť Microsoft potvrdzuje, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v tomto článku v časti Informácie v tomto článku sa týkajú nasledujúcich produktov.

Potrebujete ďalšiu pomoc?

Chcete ďalšie možnosti?

Môžete preskúmať výhody predplatného, prehľadávať školiace kurzy, naučiť sa zabezpečiť svoje zariadenie a ešte oveľa viac.

Komunity pomôžu s kladením otázok a odpovedaním na ne, s poskytovaním pripomienok a so získavaním informácií od odborníkov s bohatými znalosťami.

Boli tieto informácie užitočné?

Aká je podľa vás jazyková kvalita textu?
Čo sa vám páčilo, prípadne čo nie?
Stlačením tlačidla Odoslať sa vaše pripomienky použijú na zlepšenie produktov a služieb spoločnosti Microsoft. Váš správca IT bude môcť tieto údaje zhromažďovať. Vyhlásenie o ochrane osobných údajov.

Ďakujeme za vaše pripomienky!

×