Logga in med Microsoft
Logga in eller skapa ett konto.
Hej,
Välj ett annat konto.
Du har flera konton
Välj det konto som du vill logga in med.

I den här artikeln beskrivs ett problem som uppstår under en fråga om ett grupperat columnstore-index i Microsoft SQL Server 2014. Den här artikeln innehåller en lösning på problemet.

Sammanfattning

När du använder en fråga som skannar ett grupperat columnstore-index i Microsoft SQL Server 2014 kan det hända att du får ofullständiga frågeresultat under ovanliga förhållanden. Det här problemet uppstår när följande åtgärd körs.

Steg 1

Ett Transact-SQL-uttryck [INSERT eller BULK-INSERT] infogar data i en tabell med grupperat columnstore-index. Under den här åtgärden gäller följande:

  • När Transact-SQL-satsen når rowgroup tröskel stänger det rowgroup R1 som har segment S1.

  • Segmentet S1 pekar på lokal ord lista D1.

  • Instruktionen fortsätter att infoga rader i ny rowgroup R2.

  • När rowgroup R1 är stängd behöver inte den lokala ord listan D1 vara stängd. Om det fortfarande finns tillräckligt med utrymme på ord listan kan du låta det vara öppet och återanvända det för nya rowgroup R2.

Steg 2

Om Transact-SQL-instruktionen avslutas onormalt eller avbröts innan den nya rowgroup R2 stängs gäller följande villkor:

  • Ändringar av columnstore-metadata sker i under transaktioner som utförs oberoende av den yttre transaktionen.

  • I den här punkten finns rowgroup R1 kvar i system tabellen i en "under utveckling" eller OSYNLIGt tillstånd, och segment S1 refererar till ord lista D1.

  • Det finns ingen rad skapad i system tabellen för ord lista D1. Det beror på att Transact-SQL-satsen aldrig har möjlighet att stänga den befintliga raden. Därför kvarstår den befintliga raden.

Steg 3

Om tuppeln flyttar bakgrunds aktiviteten i en typisk situation när Transact-SQL-instruktionen är slut tas den osynliga rowgroup R1 bort och segmentet S1. Om ett nytt Transact-SQL-uttryck startas nu och skapar rowgroup R3 som har ett nytt segment S3 som kräver en ny lokal ord lista kan du inte återanvända det interna ID: t för ord listan D1. Detta beror på att det bevarade i minnet för columnstore håller koll på de lexikon-ID: n som används. Därför refererar segment S3 till en ny ord lista D2.Obs! Villkoret i det här steget är ett vanligt villkor. Därför uppstår ingen skada.

Steg 4

Om SQL Server förlorar tillståndet i minnet för ord lista D1 innan tupel-jobbet börjar gälla (och utförs enligt beskrivningen i steg 3) inträffar problemet som beskrivs i den här artikeln.Kommentarer

  • Den här händelsen inträffar av någon av följande orsaker:

    • SQL Server upplever minnes överlagring och minnes innehållet i ord listan D1 avlägsnas från minnet.

    • SQL Server-instansen startas om.

    • Databasen som innehåller det grupperade columnstore-indexet kopplas ned och blir sedan tillgänglig online.

  • När något av de här händelserna inträffar och SQL Server har laddat upp strukturerna i minnet är det ingen post för ord lista D1 och dess interna ID. Detta beror på att ordbok D1 inte bevarades i system tabellerna när Transact-SQL-instruktionen avslutades eller conceled.

  • Om den bakgrunds aktivitet som flyttas när du startar visas inga fel meddelanden eftersom villkoren som beskrivs i steg 3 gäller.

  • Om en ny rowgroup R3 skapas innan tuppeln för bakgrunds aktiviteten startar (per föregående punkt objekt) tilldelar SQL Server samma interna ID till den nya ord listan D1 och den refererar till ord lista D1 för segment S3 i rowgroup R3.

  • När tuppeln flytta bakgrunds aktiviteten startar efter föregående åtgärd avbryter den osynliga rowgroup R1 och dess segment S1 tillsammans med ny ord lista D1. Det här inträffar eftersom tupel flyttas mot den nya ord listan D1 och den ursprungliga ord listan D1 som S1-referenser är desamma.Obs! När det här problemet uppstår kan du inte läsa innehållet i rowgroup R3.

Lösning

Problemet åtgärdades först i följande kumulativa uppdateringar för SQL Server:

Kumulativ uppdatering 1 för SQL server 2014 SP1 kumulativ uppdatering 8 för SQL Server 2014Korrigeringen för det här problemet ingår också i följande GDR-uppdateringar (General Distribution Release):

Säkerhets uppdatering för SQL Server 2014 QFE  Den här uppdateringen innehåller kumulativ uppdatering 8, denna viktiga korrigering och nödvändiga MS15-058 säkerhets uppdateringar.Säkerhets uppdatering för SQL Server 2014 GDR  Den här uppdateringen innehåller den här viktiga korrigeringen och kumulativa säkerhets korrigeringarna genom MS15-058.Säkerhets uppdatering för SQL Server 2014 Service Pack 1 GDR  Den här uppdateringen innehåller bara den här viktiga korrigeringen.

Varje ny kumulativ uppdatering för SQL Server innehåller alla snabb korrigeringar och alla säkerhets korrigeringar som ingick i den föregående kumulativa uppdateringen. Se de senaste kumulativa uppdateringarna för SQL Server:

Mer information

Fel meddelandenOm du kör DBCC CHECKDB när du har installerat den här korrigerings filen visas följande fel meddelande:

Meddelande 5289, nivå 16, läge 1, det grupperade columnstore-indexet för "CCI" för tabell "t" innehåller ett eller flera data värden som inte matchar data värden i en ord lista. Återställ data från en säkerhets kopia.

När du kör en fråga som söker igenom de berörda tabellerna när du har installerat den här korrigerings filen visas följande fel meddelande:

Meddelande 5288, nivå 16, tillstånd 1, rad 1 columnstore-index har ett eller flera data värden som inte matchar data värden i en ord lista. Kör DBCC CHECKDB för mer information.

Om du får de här felen kan du spara skadade data genom Mass export av data från opåverkade kolumner/rowgroups och sedan ladda om dem när du har släppt eller skapat det grupperade columnstore-indexet. Du bör aktivera spårnings flagga 10207 för att förhindra 5288-felet och återgå till det gamla beteendet för att hoppa över skadade rowgroups. Obs! Fel meddelanden 5288 och 5289 skapas för denna rowgroup R3 som har segment S3. Spårnings flagga 10207 används för att extrahera de delar av rowgroup R3 som inte påverkas av den saknade ord listan.

Fråga för berörda databaserOm du vill ta reda på om den databas som innehåller columnstore-index redan påverkas av problemet kör du följande fråga:

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 

Kommentarer

  • Du måste köra den här frågan mot varje databas som innehåller columnstore-index på den server som kör SQL Server. En tom resultat uppsättning indikerar att databasen inte påverkas.

  • Kör den här frågan under en period när det inte finns någon aktivitet som kommer att skapa en ny rowgroups eller ändra tillståndet för befintliga rowgroups. Följande aktiviteter kan till exempel ändra tillståndet för rowgroups: index-skapa, indexera ordna om, bulk-INSERT, tupel-flytta över delta-affärer. Innan du kör frågan kan du inaktivera aktiviteten ändra bakgrunds tupel genom att använda spårnings flaggan 634. Använd det här kommandot för att inaktivera bakgrunds aktiviteten: DBCC TRACEON (634,-1). Kom ihåg att återaktivera bakgrunds uppgiften när frågan är klar genom att använda kommandot: DBCC TRACEOFF (634,-1). Se även till att det inte finns någon Mass INFOGNING/BCP/SELECT-INTO-kommandon som infogar data i tabellerna som använder columnstore-index medan den här frågan körs. Vi rekommenderar att du använder de här stegen för att förhindra att frågan returnerar falska positiva tal.

Status

Microsoft har bekräftat att det här är ett problem i Microsoft-produkterna som nämns i "gäller".

Behöver du mer hjälp?

Vill du ha fler alternativ?

Utforska prenumerationsförmåner, bläddra bland utbildningskurser, lär dig hur du skyddar din enhet med mera.

Communities hjälper dig att ställa och svara på frågor, ge feedback och få råd från experter med rika kunskaper.

Hade du nytta av den här informationen?

Hur nöjd är du med språkkvaliteten?
Vad påverkade din upplevelse?
Genom att trycka på skicka, kommer din feedback att användas för att förbättra Microsofts produkter och tjänster. IT-administratören kan samla in denna data. Sekretesspolicy.

Tack för din feedback!

×