Simptomi
Pretpostavimo da dodajete stupac u tablicu u programu Microsoft SQL Server 2012 ili SQL Server 2014. Kada se veličina retka približi najvećoj dopuštnoj veličini koja je 8.060 bytes, postupak dodavanja može potrajati dugo vremena.
Uzrok
Problem se pojavljuje jer kada je ukupna veličina retka bliska s najvećom dopuštenim veličinom retka, SQL Server će potpuno skenirati tablicu da bi bio sigurni da dodavanje novog stupca ne krši cjelovitost podataka. Verzije prije sustava SQL Server 2012 ne čine ovu provjeru, a to čini da se jezik definicije podataka (DDL) brže pokreće. No to ponašanje rezultira neuspjehe naknadnog rada, kao što su ažuriranje redaka ili smanjivanje ako veličina retka prelazi dopuštenu veličinu.
Rješenje
Kumulativno ažuriranje predstavlja novu zastavicu programa Trace 647 za ponašanje kompatibilnosti sa starijim verzijama. Problem je prvi put riješen u sljedećem kumulativnom ažuriranju sustava SQL Server.
Kumulativno ažuriranje 5 za SQL Server 2014 /en-us/help/3011055
Kumulativno ažuriranje 12 za SQL Server 2012 SP1 /en-us/help/2991533
Kumulativno ažuriranje 2 za SQL Server 2012 SP2 /en-us/help/2983175
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
-
Zastavicu za praćenje 647 možete uključiti pomoću parametra Startup (pokretanje). Informacije potražite u članku mogućnosti pokretanja servisa modula baze podataka.
-
Možete pokrenuti sljedeći upit (zamijenite naziv <tablice> s stvarnim nazivom tablice) da biste testirali određenu tablicu prije operacije na proizvodnom sustavu i planirali učinak tog problema. Ako je rezultat veći od 8.060, tablica će biti podložna tom problemu. Osim toga, ako ste odustali od stupaca, morate promijeniti tablicu pomoću mogućnosti obnovi. Rekonstrukcija tablice može učiniti da upit vrati točne rezultate.
select 1+1+2 + 2 + (case when sum (case when leaf_offset < 0 then 1 else 0 end) > 0 then 2 else 0 end) + ( (count (*) + 7)/8 ) + count (case when leaf_offset < 0 then 1 else null end) * 2 + sum( case when max_length=-1 then 24 else max_length end) from sys.system_internals_partition_columns col join sys.partitions par on col.partition_id = par.partition_id where object_id = object_id ('<table name>') and index_id in (0,1) and partition_number =1
-
Možete razmotriti Dodavanje stupaca duljine varijabli ili rijetkih stupaca kada aplikacija često doda nove stupce u tablicu. To je operacija samo metapodataka, čak i ako ukupna veličina svih stupaca prelazi 8.060 bajtova.
Status
Microsoft je potvrdio da se radi o problemu u Microsoftovim proizvodima navedenim u odjeljku "odnosi se na".