webForumDet fria alternativet

tömma transaktionsloggen på MSDE

8 svar · 494 visningar · startad av Nöff

NöffMedlem sedan nov. 2003569 inlägg
#1

Hej.

Min transaktionslogg har blivit några meg. Jag måste tömma den. Hur gör man?, databasmotorn gör det inte automatiskt :(

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Flyttas från SQL.

NöffMedlem sedan nov. 2003569 inlägg
#3

Detta är en riktigt knivig fråga.. Min log växer i extrem hastighet :(

@ndersMedlem sedan juni 200032 969 inlägg
#4

Det borde gå att göra genom att köra:

dump transaction databasnamn with no_log

Det är en query jag brukade köra på SQL server 6.5 en gång i tiden, men det borde väl funka fortfarande.

Görs på egen risk dock. ;)

mvh

OveRRidEMedlem sedan feb. 200112 078 inlägg
#5

DUMP anses som 'obsolete' och finns bara för bakåtkompablitet i 2000. Den kommer inte inkluderas i framtida versioner.

DUMP ersätts av BACKUP, vilket egentligen innebär att det inte är DUMP i sig som gör loggen mindre, utan dess biverkningar, alltså antagligen att en CHECKPOINT körs innan backupen (vilket är fallet med BACKUP). Vidare så är det lite fel att säga att DUMP gör loggen mindre, för det stämmer inte. Det är (eller skall vara iallafall) endast den aktiva delen av loggen som minskar i storlek. Det allokerade utrymmet i logfilen är fortfarande lika stort, tills dess att en SHRINK utfärdas.

Kan detta hjälpa kanske? http://www.webforum.nu/showthread.php?s=&postid=875339#post875339

NöffMedlem sedan nov. 2003569 inlägg
#6

Detta är ju verkligen ett knivigt problem, jag använder transaktioner skitmycket, för att jag helt enkelt måste göra det. Och då ökar transaktionsloggen skitsnabbt. Det verkar ju helt sjukt att det inte går att göra något åt den. jag menar transaktioner som skedde för flera månader sen är ju inte aktuella ju, varför har dom gjort det så svårt att bara radera den?

OveRRidEMedlem sedan feb. 200112 078 inlägg
#7

Jag tror att man måste förstå exakt hur transaktionsloggen fungerar och framför allt varför den gör som den gör.

Transaktionsloggen skall växa med så många procentenheter som du tillåter den, men det behöver inte betyda att den krymper eller växer i storlek hela tiden. SQLServer har finurliga metoder för att hantera resurser, speciellt allokerat minne i olika former, och loggarna är definitivt en del av detta, som också kan vara höjt i dunkel då det inte är dokumenterat fullt ut, enligt vad jag har hittat.

Du måste skilja på två begrepp; den aktiva delen av loggen samt transaktionsloggen som fil. Som standard så minskar inte transaktionsloggen i fysisk storlek förrän du gör en SHRINK. Däremot den aktiva delen, rensas vid lite olika tillfällen (som jag beskrivit tidigare) eller vid utfärdande av CHECKPOINTS, t.ex. vid BACKUP, DUMP eller liknande kommandon som gör att alla "dirty pages" måste flusha's till databasen, alltså skrivas till disk. När dessa dirty pages skrivs, minskar den aktiva delen (eftersom loggen trunkeras av SQLServer, men transaktionsloggens storlek består, som sagt. Det är viktigt att veta att den aktiva delen av loggen inte minskas av just en CHECKPOINT, utan snarare av trunkeringen. Checkpoint'en ser bara till att sätta en markering (MinLSN) som bestämmer var den aktiva delen av loggen börjar. Trunkeringen påverkar således bara den del av loggen som ligger bakom MinLSN'et, alltså före den.

Det kan ta löjliga proportioner, jag vet, för jag har sett transaktionsloggar som är över 1.5 till 2 GB (!), varav kanske 50 MB är aktiv av detta. Resten hoggas bara av SQLServer. I vissa fall hjälper inte ens SHRINK, och det är då man skall börja fundera på att se över saken. Anledningar till att den aktiva delen av transaktionsloggen förblir stor kan vara många, men de vanligaste är faktiskt sk. deadlocks i transaktioner, då en avbruten transaktion kan ligga och släpa av ingen till synes vettig anledning. Det är därför viktigt att alltid se till att hålla sin transaktionskritiska kod fräsh och inte lämna saker åt slumpen.

Hur stor del av din loggfil är aktiv? Hur stor är logfilen i sig?

RED. Tillägg av lite mer info om trunkering.

OveRRidEMedlem sedan feb. 200112 078 inlägg
#8

Intressant läsning;

MSDN skrev:

In general, transaction log records are archived by making a backup of records of committed transactions. Space used for archived transaction log records is reclaimed by reuse or by shrinking the operating system file(s) maintaining the transaction log.

Important: The Truncate method allows reuse of the space allocated to the operating system file(s) maintaining a transaction log. Log truncation is part of normal transaction log backup. If log backup is part of a database backup strategy, the Truncate method should never be called.

OveRRidEMedlem sedan feb. 200112 078 inlägg
#9

När man tänker efter, så är faktiskt SQL Server ett riktigt monster. ;)

143 ms totalt · 3 externa anrop · v20260731065814-full.7de19299
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)