KB3067257-Labojums: daļējs rezultāts sagrupēta columnstore indeksa vaicājumā programmā SQL Server 2014

Šajā rakstā ir aprakstīta problēma, kas rodas, veicot sagrupētu columnstore indeksa vaicājumu programmā Microsoft SQL Server 2014. Šajā rakstā ir sniegta šīs problēmas risinājums .

Kopsavilkums

Ja izmantojat vaicājumu, kas skenē sagrupētu columnstore indeksu programmā Microsoft SQL Server 2014, iespējams, retos gadījumos tiek saņemti daļēji vaicājuma rezultāti. Šī problēma rodas, ja tiek palaista tālāk norādītā operācija.

1. darbība

Transact-SQL priekšraksts [INSERT vai BULK-INSERT] ievieto datus tabulā, kurā ir sagrupēti columnstore indeksi. Veicot šo darbību, tiek piemēroti tālāk norādītie nosacījumi.

  • Kad Transact-SQL priekšraksts sasniedz rowgroup slieksni, tas aizver rowgroup R1, kurā ir segments S1.

  • Segments S1 norāda uz lokālo vārdnīcu D1.

  • Priekšraksts turpina ievietot rindas jaunajā rowgroup R2.

  • Ja rowgroup R1 ir aizvērts, lokālā vārdnīca D1 nav jāaizver. Ja vārdnīcā D1 joprojām ir pieejama vieta, varat to atstāt atvērtu un atkārtoti izmantot jaunajā rowgroup R2.

2. darbība

Ja Transact-SQL priekšraksts ir pārtraukts vai atcelts, pirms tas aizver jauno rowgroup R2, tiek piemēroti tālāk norādītie nosacījumi.

  • Columnstore metadatu izmaiņas rodas apakšdarbībās, kas tiek apstrādātas neatkarīgi no ārējā darījuma.

  • Šajā brīdī rowgroup R1 saglabājas sistēmas tabulā "zem būvniecības" vai neredzamā stāvoklī un segmentā S1 atsauce uz vārdnīcu D1.

  • Vārdnīcai D1 sistēmas tabulā nav izveidota rinda. Tas ir tāpēc, ka Transact-SQL priekšrakstam nekad nav iespējas slēgt esošo rindu. Tāpēc esošā rinda saglabājas.

3. darbība

Tipiskā situācijā, ja jūsu korteža mover fona uzdevums tiek sākts pēc Transact-SQL priekšraksta beigām, fona uzdevums noņem neredzamo rowgroup R1 un segmentu S1. Ja tagad ir sākta jauna Transact-SQL priekšraksts un izveidots rowgroup R3 ar jaunu segmentu S3, kas prasa jaunu lokālo vārdnīcu, varat atkārtoti izmantot vārdnīcas D1 iekšējo ID. Tas ir tāpēc, ka columnstore atmiņā tiek sekots izmantoto vārdnīcu ID. Tāpēc segmentā S3 ir atsauce uz jauno vārdnīcu D2.Piezīme. Nosacījums šajā darbībā ir vispārīgs nosacījums. Tāpēc nav bojāts neviens bojājums.

4. darbība

Ja SQL Server zaudēs tā, lai tiktu lietots pirms korteža mover uzdevuma efekts (un tas darbojas, kā aprakstīts 3. darbībā), rodas problēma, kas ir aprakstīta šajā rakstā.Piezīmes.

  • Šis notikums notiek šādu iemeslu dēļ:

    • SQL Server pieredzes atmiņas pārslodze un vārdnīcas D1 saturs atmiņā tiek izlikts no atmiņas.

    • Tiek restartēta SQL Server instance.

    • Datu bāze, kurā ir sagrupētie columnstore indeksi, pāriet bezsaistē un pēc tam atkal atgriezīsies tiešsaistē.

  • Pēc kāda no tālāk norādītajiem notikumiem un SQL Server atkārtoti ielādē atmiņā ievietotās struktūras, nav ieraksta, ka nav vārdnīcas D1 un tā iekšējā ID. Tas ir tāpēc, ka vārdnīca D1 netika saglabāta sistēmas tabulās, ja Transact-SQL priekšraksts tika pārtraukts vai conceled.

  • Ja korteža mover fona uzdevums tiek sākts šajā brīdī, kļūdas nav vērojamas, jo tiek lietoti 3. darbībā raksturotie nosacījumi.

  • Ja tiek izveidots jauns rowgroup R3, pirms tiek sākts korteža noņemšanas fona uzdevums (uz iepriekšējo aizzīmes vienumu), SQL Server piešķir to pašu iekšējo ID jaunajai vārdnīcai D1, un tajā ir atsauces uz vārdnīcu D1 for Segment S3 programmā rowgroup R3.

  • Ja pēc iepriekšējās darbības tiek sākts korteža mover fona uzdevums, tas nolaiž neredzamus rowgroup R1 un tā segmentus S1 kopā ar jauno vārdnīcu D1. Tas notiek tāpēc, ka korteža iniciators uzskata šo jauno vārdnīcu D1 un oriģinālo vārdnīcu D1, kas norāda S1 atsauces.Piezīme. Ja šis nosacījums parādās, jūs nevarat vaicāt rowgroup R3 saturu.

Risinājums

Problēma pirmo reizi tika novērsta šādos kumulatīvos SQL Server atjauninājumos:

Kumulatīvais atjauninājums 1 SQL server 2014 SP1 kumulatīvais atjauninājums 8 SQL Server 2014Šīs problēmas labojums ir iekļauts arī tālāk norādītajos vispārējās izplatīšanas laidiena (VDR) atjauninājumos:

SQL Server 2014 QFE drošības atjauninājums  Šajā atjauninājumā ir iekļauts kumulatīvais atjauninājums 8, šis svarīgais labojums un nepieciešamie MS15 058 drošības atjauninājumi.SQL Server 2014 VDR drošības atjauninājums  Šajā atjauninājumā ir iekļauti šie svarīgie labojumu un kumulatīvie drošības labojumi ar MS15 058 starpniecību.SQL Server 2014 1. servisa pakotnes VDR nedrošības atjauninājums  Šis atjauninājums ietver tikai šo svarīgo labojumu.

Katrā jaunajā kumulatīvajā SQL Server atjauninājumā ir iekļauti visi labojumfaili un visi drošības labojumi, kas bija iekļauti iepriekšējā kumulatīvajā atjauninājumā. Skatiet jaunākos kumulatīvos atjauninājumus SQL Server:

Papildinformācija

Kļūdu ziņojumiPašlaik ietekmētajā datu bāzē, ja tiek palaista DBCC CHECKDB pēc šī labojuma lietošanas, tiek parādīts šāds kļūdas ziņojums:

Msg 5289, Level 16, State 1, 1. rindiņa sagrupēti columnstore indeksi "KKI" tabulā ' t ' ir vismaz viena datu vērtība, kas neatbilst datu vērtībām vārdnīcā. Atjaunojiet datus no dublējuma.

Pašlaik ietekmētajā datu bāzē, palaižot vaicājumu, kas skenē ietekmētās tabulas pēc šī labojuma lietošanas, tiek parādīts šāds kļūdas ziņojums:

Msg 5288, Level 16, State 1, Line 1 Columnstore indeksā ir viena vai vairākas datu vērtības, kas neatbilst datu vērtībām vārdnīcā. Lai iegūtu papildinformāciju, lūdzu, palaidiet DBCC CHECKDB.

Ja tiek saņemtas šīs kļūdas, varat saglabāt nebojātos datus, masveidā eksportējot datus par neskartām kolonnām/rowgroups un pēc tam atkārtoti ielādējot datus, pēc tam, kad nometīsiet vai izveidojat sagrupētu columnstore indeksu. Ir jāiespējo izsekošanas karodziņa 10207, lai apspiestu 5288 kļūdu un atgrieztos pie vecās izlaišanas bojātas rowgroups. Piezīme.Šajā rowgroup R3 tiek ģenerēti kļūdu ziņojumi 5288 un 5289, kas ir segments S3. Izsekošanas karodziņu 10207 izmanto, lai izvilktu rowgroup R3 segmentus, kurus neietekmē trūkstošā vārdnīca D1.

Vaicājumu par ietekmētajām datu bāzēmLai noteiktu, vai šī problēma jau skar datu bāzi, kurā ir columnstore indeksi, izpildiet šādu vaicājumu:

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 

Piezīmes.

  • Šis vaicājums ir jāizpilda attiecībā uz katru datu bāzi, kurā ir columnstore indeksi serverī, kurā darbojas SQL Server. Tukša rezultātu kopa norāda, ka datu bāze nav ietekmēta.

  • Izpildīt šo vaicājumu perioda laikā, kad nav nevienas darbības, kas radīs jaunas rowgroups vai mainīs esošo rowgroups stāvokli. Piemēram, tālāk norādītās darbības var modificēt rowgroups stāvokli: index būvējums, index reorganizēt, lielapjoma ievietošana, korteža mover saspiešana. Pirms vaicājuma izpildes varat atspējot fona korteža mover uzdevumu, izmantojot izsekošanas karodziņu 634. Izmantojiet šo komandu, lai atspējotu fona uzdevumu: DBCC TRACEON (634,-1). Kad vaicājums ir pabeidzis izpildi, atcerieties atkārtoti iespējot fona uzdevumu, izmantojot komandu: DBCC TRACEOFF (634,-1). Tāpat pārliecinieties, vai nav nevienas lielapjoma ievietošanas/DVP/atlases, kas ievieto datus tabulās, kuras izmanto columnstore indeksu, kamēr tiek izpildīts šis vaicājums. Ieteicams veikt šīs darbības, lai neļautu vaicājumam atgriezties viltus pozitīvi.

Statusa

Microsoft ir apstiprinājusi, ka šī problēma pastāv Microsoft produktos, kas ir norādīti sadaļā "attiecas uz".

Vai nepieciešama papildu palīdzība?

Paplašiniet savas prasmes
Iepazīties ar apmācību
Esiet pirmais, kas saņem jaunās iespējas
Pievienoties Microsoft Insider

Vai šī informācija bija noderīga?

Paldies par jūsu atsauksmēm!

Paldies par atsauksmēm! Šķiet, ka jums varētu būt noderīgi sazināties ar kādu no mūsu Office atbalsta speciālistiem.

×