Jag har en webbapplikation som använder sig av en MS SQL server. Nej, inte vad jag vet. Du måste nog hitta sätt som undviker att problemet inträffar. Eftersom siten har så mycket trafik antar jag att du inte kan låsa ute användarna under den tid det tar att utföra underhållet på databasen? Det vore ju annars ett enkelt sätt att slippa låsningar. Diskussionen kring att låsa ute användare känns som ett alternativ. Siten kan ligga nere 5 minuter, det gör ej så otroligt mycket. Jag tycker att bör göra som Ola skriver, dvs att optimera tabellerna med ett smartare index.MS SQL låsningar
Jag har nu byggt en applikation som ska uppdatera eller ta bort de flesta poster
vid en uppdatering.
Problemet här är att det uppstår time outs när jag kör detta skript. Siten är väldigt hårt trafikerad
och därför tror jag att det uppstår låsningar av något slag. Kan jag ställa in så att min uppdateringsfunktion har företräde framför siten och "kickar" ut sitens anrop och uppdaterar posterna?
MVH
RobertSv: MS SQL låsningar
Generellt ska man passa sig för att köra DELETE / UPDATE på väldigt stora datamängder på en gång. Anledning är bl.a. att när du gör DELETE så loggas varje post i transaction-loggen (Ett beteende som du inte kan slå av, det är nödvändigt för ROLLBACK t.ex). Så om du gör DELETE på 10.000 poster så skapas det alltså 10.000 loggposter samtidigt. Försök stycka upp DELETE:n i mindre delar. Du kan också förstås öka time-out tiden till några minuter. En annan sak att fundera över är om du kan optimera tabellerna med smartare index. Generellt bör man sätt upp index på alla kolumner som används i WHERE delen av SQL-satserna.Sv: MS SQL låsningar
Om du skall tömma hela tabeller så är TRUNCATE TABLE <tablename> mycket snabbare än DELETE FROM <tablename>. Den tar bort hela pages (8kb minnesblock om jag minns rätt) på en gång och endast denna borttagning loggas. Delete loggar borttagningen av varje rad. Truncate återställer också eventuell identity-kolumns räknare vilket inte delete gör. Men som sagt, truncate tömmer hela tabellen, den kan aldrig användas till att ta bort enskilda rader.
Sedan finns det en hel massa Table Hints som man kan ange på DELETE-statements. Då jag inte kan så mycket om dessa, well, mer specifikt så vet jag bara om dess existens men har ingen aning om hur man använder dom :-) Nåväl, de verkar enligt BOL (Books online) användas till bl a låsningsproblematik. Kanske kan du piffa upp SQL-satsen med någon sådan Table Hint? Kanske kan någon annan fylla på med lite hints om table hints...Sv:MS SQL låsningar
Hur går man tillväga då? Allt sker ju per automatik så går det att lösa programmeringsmessigt?Sv: MS SQL låsningar