Du er frakoblet, venter på at Internett skal koble til igjen

Korriger: Delvise resultater i en spørring av columnstore gruppert indeks i SQL Server-2014

VIKTIG: Denne artikkelen ble oversatt med maskinoversettelsesprogramvare fra Microsoft og muligens redigert av Microsoft Community via CTF-teknologi i stedet for av en oversetter. Microsoft tilbyr både menneskelig oversatte og maskinoversatte/Community-redigerte artikler, slik at du får tilgang til alle artiklene i vår Knowledge Base på ditt eget språk. En maskinoversatt eller Community-redigert artikkel er imidlertid ikke alltid perfekt. Den kan inneholde feil i vokabular, syntaks eller grammatikk, mye likt en fremmedspråklig som forsøker å snakke språket ditt. Microsoft har ikke ansvar for unøyaktige opplysninger, feil eller skade forårsaket av feilaktig oversettelse av innholdet eller kundenes bruk av informasjonen. Microsoft oppdaterer jevnlig maskinoversettelsesprogramvaren og -verktøyene for å forbedre redigering av maskinoversatte tekster.

Den engelske versjonen av denne artikkelen er den følgende: 3067257
Denne artikkelen omhandler et problem som oppstår under en spørring av columnstore gruppert indeks i Microsoft SQL Server-2014. Denne artikkelen inneholder en løsning Dette problemet.
Sammendrag
Når du bruker en spørring som søker gjennom en columnstore sektorgruppert 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 [Sett inn 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 terskelen rowgroup, lukker 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 fremdeles er 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. Du kan ikke bruke den interne IDen til ordlisten D1 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. 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 i ordlisten 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 det 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.
Løsning
Problemet ble først løst i følgende kumulative oppdateringer for SQL Server:


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 inkluderer hurtigreparasjonen viktig og kumulative sikkerhetsfeilrettingene gjennom MS15-058.

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

Om kumulative oppdateringer for SQL Server

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:
Mer informasjon

Feilmeldinger

Hvis du kjører DBCC CHECKDB når du har installert 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 skanner 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 data 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 med S3-segmentet. Sporingsflagg 10207 brukes til å trekke ut segmenter i rowgroup R3 som ikke påvirkes av manglende ordlisten D1.

Spørring for berørte databaser

Hvis 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, Sett inn masseutsendelse, 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".

Advarsel: Denne artikkelen er autooversatt

Egenskaper

Artikkel-ID: 3067257 – Forrige gjennomgang: 07/23/2015 02:42:00 – Revisjon: 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 KbMtno
Tilbakemelding