Logg på med Microsoft
Logg på, eller opprett en konto.
Hei,
Velg en annen konto.
Du har flere kontoer
Velg kontoen du vil logge på med.

Denne artikkelen omhandler et problem som oppstår under en spørring av columnstore gruppert indeks i Microsoft SQL Server-2014. Denne artikkelen gir en løsning på problemet.

Sammendrag

Når du bruker en spørring som søker gjennom en columnstore gruppert indeks i Microsoft SQL Server-2014, kan du, i sjeldne tilfeller kan få delvis spørringsresultatene.

Dette problemet oppstår når følgende operasjon kjøres.

Trinn 1

Transact-SQL-setningen [INSERT eller BULK-INS] setter inn data i en tabell som er gruppert indeks for columnstore. Under denne operasjonen gjelder følgende betingelser:

  • Når Transact-SQL-setning når rowgroup-terskelen, lukkes den rowgroup R1 med segment S1.

  • Segment S1 peker til lokale ordlisten D1.

  • Oppgaven fortsetter å sette inn rader til nye rowgroup R2.

  • Når rowgroup R1 er lukket, har ikke den lokale ordlisten D1 også lukkes. Hvis ordlisten D1 er fremdeles tilgjengelig plass, kan du la den være åpen og bruke den på nytt for den nye rowgroup R2.

Trinn 2

Hvis Transact-SQL-setningen er unormal eller avbrutt før den lukkes den nye rowgroup R2, gjelder følgende betingelser:

  • Columnstore metadataendringer skjer i undertransaksjoner lagre uavhengig av ytre transaksjonen.

  • På dette tidspunktet refererer rowgroup R1 vedvarer i systemtabellen i en "under utarbeidelse" eller USYNLIG tilstand og segment S1 til ordlisten D1.

  • Det finnes ingen rad som er opprettet i systemtabellen for ordlisten D1. Dette er fordi Transact-SQL-setningen som aldri har en mulighet til å lukke den eksisterende raden. Derfor vedvarer de eksisterende rad.

Trinn 3

I en typisk situasjon hvis tuppelen mover bakgrunn aktiviteten starter når det slutter Transact-SQL-setningen, bakgrunnsoppgaven fjerner usynlige rowgroup R1 og segment S1. Hvis en ny Transact-SQL-setningen er i gang nå og oppretter rowgroup R3 som har et nytt segment S3 som krever en ny lokal ordliste, kan du bruke interne IDen til ordlisten D1. Dette er fordi holder rede på tilstanden i minnet til columnstore ordlisten IDene som brukes. Derfor vil segmentet S3 referere til ny ordliste D2.

Obs! Betingelsen i dette trinnet er en vanlig tilstand. Derfor oppstår ingen feil.

Trinn 4

Hvis SQL Server mister status i minnet for ordlisten D1 før aktiviteten tuppelen mover trer i kraft (og utfører som beskrevet i trinn 3), oppstår problemet som er beskrevet i denne artikkelen.

Notater

  • Denne hendelsen oppstår på grunn av følgende årsaker:

    • SQL Server-opplevelser minne overbelastning, og innholdet i minnet for ordliste D1 er kastet ut fra minnet.

    • Forekomsten av SQL Server er startet på nytt.

    • Databasen som inneholder indeksen klyngede columnstore kobles fra, og deretter blir tilgjengelig igjen.

  • Etter noen av disse hendelsene oppstår og SQL Server laster i minnet-strukturer, det finnes ingen poster som en ordliste D1 og den interne IDen eksisterte. Dette er fordi ordlisten D1 ikke ble beholdt i systemtabellene når Transact-SQL-setningen ble avsluttet eller conceled.

  • Hvis tuppelen mover bakgrunn aktiviteten starter nå, ikke oppstår noen feil fordi gjelder vilkårene som er beskrevet i trinn 3.

  • Hvis det opprettes en ny rowgroup R3 før tuppelen mover bakgrunn aktiviteten starter (per forrige punkt element), SQL Server tilordner interne IDen til en ny ordliste D1 og den refererer til ordlisten D1 for segmentet S3 i rowgroup R3.

  • Når tuppelen mover bakgrunn aktiviteten starter etter forrige handling, faller den usynlige rowgroup R1 og dens segmenter S1 sammen med ny ordliste D1. Dette skjer fordi en tuppel flyttepeker vurderer den nye ordlisten D1 og den opprinnelige ordlisten D1 S1-referanser er de samme.

    Obs! Når denne tilstanden inntreffer, kan du spørre innholdet i rowgroup R3.

Oppløsning

Problemet ble først løst i følgende kumulative oppdateringer for SQL Server:

Samleoppdatering 1 for SQL Server 2014 SP1

Kumulativ oppdatering 8 for SQLServer 2014
Hurtigreparasjonen for dette problemet er også inkludert i følgende generelle distribution release (GDR) oppdateringer:

Sikkerhetsoppdatering for SQL Server-2014 QFE  
Denne oppdateringen inneholder kumulative oppdatere 8, hurtigreparasjonen som er viktig og de nødvendige sikkerhetsoppdateringene for MS15-058.

Sikkerhetsoppdatering for SQL Server-2014 GDR  
Denne oppdateringen inneholder viktige hurtigreparasjonen og kumulative sikkerhetsfeilrettingene gjennom MS15-058.

Ikke-sikkerhetsrelatert oppdatering for SQL Server 2014 Service Pack 1 GDR  
Denne oppdateringen inneholder bare hurtigreparasjonen viktig.

Hver nye kumulative oppdateringen for SQL Server inneholder alle hurtigreparasjonene og alle sikkerhetsreparasjoner som fulgte med den forrige kumulative oppdateringen. Du kan se de nyeste kumulative oppdateringene for SQL Server:


Hvis du vil ha mer informasjon

FeilmeldingerHvis du kjøre DBCC CHECKDB etter at du har brukt denne hurtigreparasjonen i en database som er berørt får du følgende feilmelding:

Msg 5289, nivå 16 tilstand 1, linje 1
Columnstore gruppert indeks cci på tabellen 't' har én eller flere dataverdier som ikke samsvarer med dataverdier i en ordliste. Gjenopprette data fra en sikkerhetskopi.


Når du kjører en spørring som søker gjennom de påvirkede tabellene når du har installert denne hurtigreparasjonen i en database som er berørt får du følgende feilmelding:

Msg 5288, nivå 16 tilstand 1, linje 1
Columnstore-indeks har én eller flere dataverdier som ikke samsvarer med dataverdier i en ordliste. Kjør DBCC CHECKDB for mer informasjon.


Hvis du får disse feilene, kan du lagre uskadet dataene ved bulk eksportere dataene til upåvirket kolonner/rowgroups og laste dataene på nytt etter at du slipper eller opprette grupperte columnstore indeksen. Du bør aktivere sporingsflagg 10207 undertrykke 5288 feilen og gå tilbake til den gamle virkemåten av hopper over skadet rowgroups.

Obs! Feilmeldinger 5288 og 5289 genereres for denne rowgroup R3 som har segment S3. Sporingsflagg 10207 brukes til å trekke ut segmenter i rowgroup R3 som ikke påvirkes av manglende ordlisten D1.

Spørring for berørte databaserHvis du vil finne ut om databasen som inneholder columnstore indekser allerede er berørt av dette problemet, kan du kjøre følgende spørring:

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


Notater

  • Du må kjøre denne spørringen mot hver database som inneholder columnstore indekser på serveren som kjører SQL Server. Et tomt resultatsett angir at databasen ikke er berørt.

  • Utføre denne spørringen i en periode når det ikke er noen aktivitet som oppretter nye rowgroups eller endre status for eksisterende rowgroups. Følgende aktiviteter kan for eksempel endre statusen for rowgroups: bygging av indeks, indeks Omorganiser, samlet sett inn, tuppelen mover komprimere delta butikker.

    Før du kjører spørringen, kan du deaktivere bakgrunnsoppgave for tuppelen mover ved hjelp av sporingsflagg 634. Bruk denne kommandoen til å deaktivere bakgrunnsoppgaven: DBCC TRACEON (634, -1). Når spørringen er ferdig kjører, må du huske å aktivere bakgrunnsoppgaven ved hjelp av kommandoen: DBCC TRACEOFF (634, -1).

    Sørg også for at det er ingen samlet sett inn/BCP/SELECT-inn kommandoer setter inn data i tabeller som bruker columnstore-indeks mens spørringen kjøres.

    Det anbefales å bruke denne fremgangsmåten til å hindre at spørringen returnerer false positiv.

Status

Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen "Gjelder for".

Trenger du mer hjelp?

Vil du ha flere alternativer?

Utforsk abonnementsfordeler, bla gjennom opplæringskurs, finn ut hvordan du sikrer enheten og mer.

Fellesskap hjelper deg med å stille og svare på spørsmål, gi tilbakemelding og høre fra eksperter med stor kunnskap.

Var denne informasjonen nyttig?

Hvor fornøyd er du med språkkvaliteten?
Hva påvirket opplevelsen din?
Når du trykker på Send inn, blir tilbakemeldingen brukt til å forbedre Microsoft-produkter og -tjenester. IT-administratoren kan samle inn disse dataene. Personvernerklæring.

Takk for tilbakemeldingen!

×