Prijavite se pomoću Microsofta
Prijavi se ili izradi račun.
Zdravo,
Odaberite drugi račun.
Imate više računa
Odaberite račun putem kojeg se želite prijaviti.

U ovom se članku raspravlja o problemu koji se pojavljuje tijekom upita u indeksu grupiranog kolumnstore u programu Microsoft SQL Server 2014. U ovom se članku opisuje rješenje tog problema.

Sažetak

Kada koristite upit koji pretražuje indeks grupiranog kolumnstore u programu Microsoft SQL Server 2014, u rijetkim uvjetima možete primati djelomične rezultate upita. Taj se problem pojavljuje prilikom pokretanja sljedeće operacije.

Prvi korak

Naredba Transact-SQL [Umetanje ili masovno Umetanje] umeće podatke u tablicu koja sadrži indeks grupiranog kolumnstore. Tijekom ove operacije primjenjuju se sljedeći uvjeti:

  • Kada naredba Transact-SQL dosegne prag grupe rowgroup, zatvara rowgroup R1 koja ima segment S1.

  • Segment S1 upućuje na lokalni rječnik D1.

  • Naredba i dalje umeće retke u novu rowgroup R2.

  • Kada je rogrupa R1 zatvorena, lokalni rječnik D1 ne mora biti zatvoren. Ako Dictionary D1 i dalje ima dostupan razmak, možete ga ostaviti otvorenim i ponovno ga koristiti za novi rowgroup R2.

Korak 2

Ako je naredba Transact-SQL završena nenormalno ili otkazana prije nego što zatvara novu rowgroup R2, primjenjuju se sljedeći uvjeti:

  • U međutransakcijama koje se izvršavaju neovisno o vanjskoj transakciji odvijaju se promjene metapodataka.

  • U ovom trenutku, rowgroup R1 nastavlja se u tablici sustava u odjeljku "u odjeljku izgradnja" ili nevidljivo stanje te segmentima S1 referenci u rječniku D1.

  • U tablici sustava za rječnik D1 nije stvoren redak. To je zato što naredba Transact-SQL nema priliku za zatvaranje postojećeg retka. Stoga se postojeći redak nastavlja.

Treći korak

U tipičnoj situaciji, ako se zadatak u pozadini programa n-torke pokreće nakon završetka izvatka programa Transact-SQL, zadatak pozadine uklanja nevidljivu rowgroup R1 i segment S1. Ako je sada pokrenuta nova naredba Transact-SQL i stvara rowgroup R3 koja sadrži novi segment S3 za koji je potreban novi lokalni rječnik, ne možete ponovno koristiti interni ID rječnika D1. To je zato što stanje u memoriji kolumnstore sadrži evidenciju ID-ova rječnika koji se koriste. Dakle, segment S3 će se referencirati novi rječnik D2.Napomena Uvjet u ovom koraku jest uobičajen uvjet. Dakle, ne događa se korupcija.

Četvrti korak

Ako SQL poslužitelj izgubi stanje u obliku memorije u rječniku D1 prije nego što zadatak s tortom za n-torke stupi na pamet (i nastupi kao što je opisano u trećem koraku), pojavljuje se problem opisan u ovom članku.Napomene

  • Ovaj se događaj pojavljuje iz bilo kojeg od sljedećih razloga:

    • Memorija sa sustavom SQL Server doživljava preopterećenje memorije, a sadržaj u memoriji rječnika D1 se uklanjaju iz memorije.

    • Ponovno se pokreće instanca sustava SQL Server.

    • Baza podataka koja sadrži indeks klasterirani kolumnstore umrežen je, a zatim se vraća na Internet.

  • Kada se pojave neki od ovih događaja, a SQL Server ponovno učitava strukture u memoriji, nema zapisa da je postojao rječnik D1 i njegov interni ID. To je zato što Dictionary D1 nije zadržan u tablicama sustava kada je naredba Transact-SQL završena ili koncelirana.

  • Ako se u ovom trenutku pokrene zadatak pozadine za n-torke, nema pogrešaka jer se primjenjuju uvjeti opisani u trećem koraku.

  • Ako se stvori nova grupa rowgroup R3 prije početka radne pozadine za n-torke (po prethodnoj stavci grafičke oznake), SQL poslužitelj dodjeljuje isti interni ID novom rječniku D1 i referencira rječnik D1 za segment S3 u grupi rowgroup R3.

  • Kada se zadatak s pozadinom n-torke započinje nakon prethodne akcije, on kapi nevidljive rowgroup R1 i njegove segmente S1 zajedno s novim rječnikom D1. To se događa zato što pokretač n-torke smatra da su novi rječnik D1 i izvorni rječnik D1 i da su reference S1 iste.Napomena Kada se taj uvjet pojavi, ne možete ispitati sadržaj servisa rowgroup R3.

Rješenje

Problem je prvi put riješen u sljedećim kumulativnim ažuriranjima za SQL Server:

Kumulativno ažuriranje 1 za SQL server 2014 SP1 Kumulativno ažuriranje 8 za SQL Server 2014Rješavanje tog problema obuhvaća i sljedeća ažuriranja općeg izdanja distribucije (GDR):

Sigurnosno ažuriranje za SQL Server 2014 QFE  Ovo ažuriranje obuhvaća Kumulativno ažuriranje 8, ovo važno rješenje i obavezna sigurnosna ažuriranja za MS15-,.Sigurnosno ažuriranje za SQL Server 2014 GDR  Ovo ažuriranje obuhvaća ovaj važan popravak i kumulativne sigurnosne ispravke putem MS15-je.Nesigurnosno ažuriranje za SQL Server 2014 Service Pack 1 GDR  Ovo ažuriranje sadrži samo ovo važno rješenje.

Svako novo Kumulativno ažuriranje za SQL Server sadrži sve hitne popravke i sve sigurnosne ispravke uključene u prethodno Kumulativno ažuriranje. Pogledajte najnovija kumulativna ažuriranja za SQL Server:

Dodatne informacije

Poruke o pogreškamaAko u trenutno zahvaćenom bazom podataka pokrenete DBCC CHECKDB nakon primjene tog popravka, primit ćete sljedeću poruku o pogrešci:

MSG 5289, nivo 16, State 1, redak 1 klasterirani kolumnstore indeks "CCI" na tablici ' t ' ima jednu ili više podataka koje ne podudaraju s vrijednostima podataka u rječniku. Vraćanje podataka iz sigurnosne kopije.

Kada pokrenete upit koji skenira zahvaćene tablice nakon primjene tog popravka, u trenutno pogođenom bazom podataka prikazat će vam se sljedeća poruka o pogrešci:

MSG 5288, razina 16, status 1, indeks linije 1 Kolumnstore sadrži jednu ili više podatkovnih vrijednosti koje ne odgovaraju vrijednostima podataka u rječniku. Dodatne informacije potražite u odjeljku DBCC CHECKDB.

Ako vam se pojave te pogreške, neoštećeni podaci možete spremiti tako da skupno izvezite podatke nezahvaćenih stupaca/grupnih redaka, a zatim ponovno učitate podatke nakon što odbacite ili stvorite indeks grupiranog kolumnstore. Trebali biste omogućiti Trace Flag 10207 da biste zatajili pogrešku 5288 i vratili se na staro ponašanje preskakanja korumpiranih grupiranih redaka. NapomenaPoruke o pogreškama 5288 i 5289 generiraju se za ovu grupnu grupu R3 koja sadrži segment S3. Trace Flag 10207 koristi se za izdvajanje segmenata grupe rowgroup R3 na koje ne utječe rječnik D1 koji nedostaje.

Upit za pogođene baze podatakaDa biste utvrdili je li baza podataka koja sadrži indeks columnstore već utjecala na taj problem, pokrenite sljedeći upit:

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 

Napomene

  • Morate pokrenuti ovaj upit za svaku bazu podataka koja sadrži indekntrgovine na poslužitelju na kojem je pokrenut SQL Server. Prazni skup rezultata upućuje na to da baza podataka ne utječe na nju.

  • Izvršite ovaj upit tijekom razdoblja kada ne postoji aktivnost koja će stvarati nove grupe redaka ili promijeniti stanje postojećih grupa redaka. Sljedeće aktivnosti, primjerice, mogu izmijeniti stanje grupnih grupa: međuindeks, indeks, reorganiziraj, skupno Umetanje, kombinirani broj u trgovini pomoću servisa n-torke. Prije izvršavanja upita možete onemogućiti zadatak servisa n-torke u pozadini pomoću oznake Trace 634. Pomoću ove naredbe onemogućite zadatak u pozadini: DBCC TRACEON (634,-1). Kada upit dovrši izvršavanje, ne zaboravite ponovno omogućiti zadatak u pozadini pomoću naredbe: DBCC TRACEOFF (634,-1). Provjerite i da nema skupno Umetanje/BCP/odaberite naredbe za umetanje podataka u tablice koje koriste indeks kolumnstore dok je ovaj upit pokrenut. Preporučuje se da koristite ove korake da biste spriječili da upit vraća FALSE-pozitivne.

Status

Microsoft je potvrdio da se radi o problemu u Microsoftovim proizvodima navedenim u odjeljku "odnosi se na".

Potrebna vam je dodatna pomoć?

Želite dodatne mogućnosti?

Istražite pogodnosti pretplate, pregledajte tečajeve za obuku, saznajte kako zaštititi uređaj i još mnogo toga.

Zajednice vam pomažu da postavljate pitanja i odgovarate na njih, pošaljete povratne informacije i čujete se sa stručnjacima s bogatim znanjem.

Jesu li vam ove informacije bile korisne?

Koliko ste zadovoljni jezičnom kvalitetom?
Što je utjecalo na vaše iskustvo?
Ako pritisnete Pošalji, vaše će se povratne informacije iskoristiti za poboljšanje Microsoftovih proizvoda i usluga. Vaš će IT administrator moći prikupiti te podatke. Izjava o zaštiti privatnosti.

Hvala vam na povratnim informacijama!

×