KB3067257 – lahendus: osalised tulemid SQL Server 2014 rühmitatud columnstore indeksi päringus

Selles artiklis käsitletakse probleemi, mis ilmneb rakenduses Microsoft SQL Server 2014 rühmitatud columnstore indeksi päringu ajal. Selles artiklis on toodud selle probleemi lahendus .

Kokkuvõte

Kui kasutate päringut, mis otsib Microsoft SQL Server 2014 rühmitatud columnstore indeksit, võite harvadel tingimustel saada osalise päringu tulemi. See probleem ilmneb siis, kui käitatakse järgmist toimingut.

Juhis 1

Transact-SQL-lause [INSERT või BULK-INSERT] lisab andmed tabelisse, kus on rühmitatud columnstore indeks. Selle toimingu käigus kehtivad järgmised tingimused.

  • Kui Transact-SQL-lause jõuab rowgroup lävele, sulgub rowgroup R1, millel on segment S1.

  • Segment S1 osutab kohalikule sõnastikule D1.

  • Lausega jätkatakse uute rowgroup R2 ridade lisamist.

  • Kui rowgroup R1 on suletud, pole ka kohalik sõnastik D1 sulgeda. Kui sõnastikul D1 on endiselt vaba ruumi, saate selle avada ja uuesti kasutada uue rowgroup R2 jaoks.

Juhis 2

Kui Transact-SQL-lause lõpeb ebanormaalselt või tühistatakse enne uue rowgroup R2 sulgemist, kehtivad järgmised tingimused.

  • Columnstore metaandmete muudatused toimuvad välistehingutest sõltumatult sooritatud vahekannetes.

  • Praegusel hetkel püsivad rowgroup R1 jaotises "ehitamine" või NÄHTAMATUs olekus "süsteem" ja "segment S1 viited sõnastik D1".

  • Pole ühtegi rida loodud sõnastikus "süsteem". Selle põhjuseks on see, et Transact-SQL-lauses pole kunagi võimalust olemasoleva rea sulgemiseks. Seetõttu jätkub olemasolev rida.

Juhis 3

Kui pärast Transact-SQL-lause lõppemist algab tavaline olukord, kui pärast tehinguid-SQL-lause lõpeb, eemaldab Background-toiming nähtamatu rowgroup R1 ja lõigu S1. Kui uus Transact-SQL-lause on nüüd käivitatud ja loob rowgroup R3, millel on uus segment S3, mis nõuab uut kohalikku sõnastikku, siis ei saa te sõnastikku D1 sisemise ID-ga uuesti kasutada. Selle põhjuseks on see, et columnstore mälu olekus jälgitakse sõnastiku ID-sid, mida kasutatakse. Seetõttu viitab segment S3 uuele sõnastikule D2.Märkus. Selle toimingu tingimus on tavaline tingimus. Seetõttu ei esine korruptsiooni.

Juhis 4

Kui SQL Server kaotab sõnastikust-mälu oleku enne, kui see kestab (ja täidab kirjeldatud juhises 3), ilmneb selles artiklis kirjeldatud probleem.Märkused.

  • See sündmus ilmneb mõnel järgmistest põhjustest.

    • SQL serveri mälu ülekoormus ja sõnastikus olevad mälus olevad sisu tõstetakse mälust välja.

    • SQL serveri eksemplar taaskäivitatakse.

    • Klaster columnstore indeksit sisaldav andmebaas läheb ühenduseta režiimisse ja tuleb siis uuesti veebi.

  • Pärast mis tahes sündmuse toimumist ja SQL Server laadib mälus olevad struktuurid uuesti, pole ühtegi kirjet, millesse on installitud sõnastik D1 ja selle sisemine ID. Selle põhjuseks on see, et sõnastikku D1 ei jäänud süsteemi tabelitesse, kui Transact-SQL-lause lõppes või conceled.

  • Kui praegusel hetkel algab suvand kordselt liikuv Background, ei teki tõrkeid, sest juhises 3 kirjeldatud tingimused on täidetud.

  • Kui uus rowgroup R3 on loodud enne funktsiooni kordselt liikuv Background tööülesande algust (eelmise täpi üksuse kohta), määrab SQL Server sama sisemise ID-d uuele sõnastikule D1 ja viitab sõnastikule D1, mille segmendi S3 on rowgroup R3.

  • Kui pärast eelmist toimingut algab kordselt liikuv Background Task, langeb see nähtamatu rowgroup R1 ja selle segmentide S1 koos uue sõnastikuga D1. Selle põhjuseks on see, et kordsele tulijale lisatakse uus sõnastik D1 ja algne sõnastik D1, millele S1 viitab.Märkus. Selle tingimuse ilmnemisel ei saa te rowgroup R3 sisust päringut teha.

Lahendus

Probleem parandati esmakordselt SQL serveri järgmiste kumulatiivsete värskendustega:

Kumulatiivne Update 1 for SQL server 2014 SP1 kumulatiivne Update 8 SQL Server 2014Selle probleemi lahendus sisaldub ka järgmistes üldistes jaotuse (GDR) värskendustes.

SQL Server 2014 QFE turbevärskenduse  See värskendus sisaldab kumulatiivse värskenduse 8, see oluline lahendus ja nõutav MS15 058 turvavärskendused.Turvavärskenduse SQL Server 2014 GDR  See värskendus sisaldab selle olulise paranduse ja kumulatiivse turvalisuse parandused kaudu MS15-058.SQL Server 2014 hoolduspakett 1 GDR pole turvavärskendus  See värskendus sisaldab ainult seda olulist parandust.

Iga uus koondvärskenduses SQL Server sisaldab kõiki käigultparandused ja kõik turvaparandusi, mis kuulusid eelmise koondvärskenduse. Lugege SQL serveri kumulatiivseid värskendusi.

Lisateave

TõrketeatedPraegu mõjutatud andmebaasis, kui käivitate pärast selle paranduse rakendamist DBCC CHECKDB, kuvatakse järgmine tõrketeade:

MSG 5289, tase 16, olek 1, rida 1 rühmitatud columnstore indeks "konsulaarjuhised" tabeli "t" on üks või mitu andmete väärtused, mis ei vasta andmete väärtustele sõnastikus. Andmete taastamine varundist.

Praegu mõjutatud andmebaasis, kui käivitate päringu, mis skannib mõjutatud tabeleid pärast selle paranduse rakendamist, kuvatakse järgmine tõrketeade:

MSG 5288, tase 16, olek 1, rea 1 columnstore indeksil on üks või mitu andmete väärtust, mis ei vasta sõnastikus olevatele andmete väärtustele. Lisateavet leiate teemast DBCC CHECKDB.

Kui teile kuvatakse need tõrked, saate vigaseid andmeid salvestada lahtiselt mõjutamata veergude/rowgroups andmete eksportimise teel ja seejärel laadides andmed pärast kukutamist või rühmitatud columnstore indeksi loomist uuesti. Peaksite lubama jälituslipp 10207, et tõkestada 5288-tõrge ja naasta rikutud rowgroups vanasse käitumist. Märkus.Selle rowgroup R3, millel on segment S3, luuakse tõrketeated 5288 ja 5289. Jälituslipp 10207 kasutatakse rowgroup R3 segmentide ekstraktimiseks, mida puuduv sõnastik D1 ei mõjuta.

Päringu mõjutatud andmebaaside jaoksKui soovite kindlaks teha, kas columnstore indekseid sisaldav andmebaas on selle probleemiga juba mõjutatud, käivitage järgmine päring.

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 

Märkused

  • Peate käivitama selle päringu iga andmebaasiga, mis sisaldab columnstore indekseid serveris, kus töötab SQL Server. Tühi tulemite hulk näitab, et andmebaasi see ei mõjuta.

  • Saate selle päringu käivitada perioodi jooksul, kui tegevust, mis loob uue rowgroups või muudab olemasolevate rowgroups olekut. Näiteks võivad järgmised tegevused muuta rowgroups olekut: indeksi järk, indeks reorganiseerimine, hulgi lisamine, kordselt liikuv Delta kaupluste tihendamine. Enne päringu täitmist saate keelata taustal kordselt liikudes tööülesande jälituslipp 634 abil. Selle käsu abil saate keelata tausta ülesande: DBCC TRACEON (634;-1). Kui päring on lõpule viidud, pidage meeles järgmist: DBCC TRACEOFF (634;-1)uuesti lubamine. Samuti veenduge, et poleks hulgi INSERT/BCP/SELECT-in commands andmete lisamine tabelitesse, mis kasutavad selle päringu töötamise ajal columnstore indeksit. Soovitatav on kasutada neid juhiseid, et takistada päringul valede positiivsete tagasipöördumist.

Olek

Microsoft on kinnitanud, et see probleem esineb jaotises "kehtib järgmiste toodete kohta" loetletud Microsofti toodetes.

Kas vajate veel abi?

Täiendage oma oskusi
Tutvuge koolitusmaterjalidega
Kasutage uusi funktsioone enne teisi
Liitu Microsofti Insideri programmis osalejad

Kas sellest teabest oli abi?

Täname tagasiside eest!

×