KB2967240 – PARANDUS: kasutamata ruumi ei saa tagasi nõuda kahandamistoimingu abil tabelis, mis sisaldab SQL Server lob-veergu

Rakenduskoht
SQL Server 2008 Service Pack 3 SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2008 R2 Service Pack 2 SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard

Sümptomid

Oletame, et teil on tabel, mis sisaldab suurt objekti (LOB) veerg Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 või SQL Server 2014. Kui värskendate lob veergu väiksemate LOB-andmetega ja proovite kasutamata ruumi tagasi võtta järgmiste meetodite abil.

  • DBCC SHRINKDATABASE / DBCC SHRINKFILE
  • ALTER INDEX REORGANIZE WITH (LOB_COMPACTION = ON)

Sellisel juhul ei saa kasutamata ruumi tagasi võtta.

Lahendus

Probleem lahendati esmalt järgmises SQL Server koondvärskenduses.

SQL Server 2012 SP2 koondvärskendus 2 /en-us/help/2983175

SQL Server 2012 SP1 koondvärskendus 11 /en-us/help/2975396

koondvärskendus 13 SQL Server 2008 R2 SP2 /en-us/help/2967540

SQL Server 2014 koondvärskendus 2 /en-us/help/2967546

SQL Server 2008 SP3 koondvärskendus 17 /en-us/help/2958696

Teave SQL Server koondvärskenduste kohta

Iga uus koondvärskendus SQL Server sisaldab kõiki kiirparandusi ja kõiki turbeparandusi, mis olid kaasatud eelmise koondvärskenduse. Vaadake uusimaid SQL Server koondvärskendusi.

      

Ajutine lahendus

Probleemi lahendamiseks kasutage järgmisi ajutisi lahendusi.

  • Eksportige kõik read uude tabelisse ja teisaldage read tagasi. See korraldab LOB andmed ümber ja vabastab kasutamata ruumi.
  • Kasutage suvandit DBCC SHRINKFILE koos suvandiga EMPTYFILE, et teisaldada kõik andmed äsja lisatud andmefaili ja seejärel eemaldada vana andmefail. See korraldab lobandmed seal ümber kasutamata ruumi vabastades.

Veel teavet

Järgmises näites kasutatakse kasutamata ruumi, kasutades selleks TSQL-käsku sp_spaceused "table_name" enne ja pärast LOB-veeru värskendamist väiksemate LOB-andmetega:
Enne värskendamist tehke järgmist.

nimi read reserveeritud andmed index_size kasutamata
table_name 1000 261072 kB 261056 kB 16 kB 0 kB

Pärast värskendamist:

nimi read reserveeritud andmed index_size kasutamata
table_name 1000 261072 kB 199672 kB 16 kB 61384 KB

      

Olek

Microsoft on kinnitanud, et see on jaotises „Rakenduskoht“ loetletud Microsofti toodete korral esinev probleem.