Avatar billede fdata Forsker
09. juni 2004 - 23:36 Der er 8 kommentarer og
1 løsning

Sletning af poster tager lang tid

Vi har installeret en ny SQL server 2000 og oprettet en simpel base.
Det viser sig nu, at sletning af sølle 10.000 poster tager ca. 20 sek.
("DELETE Tabel1.* FROM Tabel1" direkte i SQL Query Analyzer)
I Access kan det samme gøres på under den halve tid.
Burde SQL serveren ikke kunne give Access baghjul?
Er der nogen, der har erfaring med dette?
Avatar billede fsconsult.dk Nybegynder
10. juni 2004 - 07:36 #1
Det lyder voldsomt med 20 sek. Er der nogle voldsomme index på den tabel, eller evt. triggers som forårsager en del arbejde?

Alternativt kan du benytte TRUNCATE tabel1 (eller er det TRUNCATE TABLE tabel1). Som burde være hurtigere hvis man ønsker at tømme en tabel.
Avatar billede ldanielsen Nybegynder
10. juni 2004 - 11:02 #2
det er helt sikkert et spm. om indexer.

Har du defineret en primær nøgle på tabellen? vis os evt et createscript (højreklik på tabellen i Enterprise Manager, vælg kopier, derefter sæt ind her)
Avatar billede fdata Forsker
10. juni 2004 - 19:35 #3
Har ikke lige adgang til basen lige nu; men tabellen er helt simpel. Et unikt ID og 10-12 tekst- og realfelter. Ingen triggers. Ingen ingenting.
Det jeg fiskede efter er, om der måske er en eller anden option i SQL, der ikke er slået til/fra el.lign.?
Avatar billede arne_v Ekspert
10. juni 2004 - 20:26 #4
TRUNCATE TABLE

----

Det er ikke nogen naturlov at SQLServer er hurtigere end Access. Hvis din Access
database ligger lokalt og der kun er en samtidig bruger og der som i dette
tilfælde ikke er nogen specielle optimerings muligheder, så er der ikke nogen
grund til SQLServer skulle være specielt hurtigere end Access.

----

Mine gæt vil være:
  - indexer
  - meget fragmenteret database filer
Avatar billede trer Nybegynder
11. juni 2004 - 16:16 #5
Du skriver TEXT felter - mener du at I har brugt datatypen TEXT ?  Det svarer nemlig til at bruge MEMO i Access.

På SQL Server bliver blob felter (TEXT, NTEXT og IMAGE) lagret specielt og håndteret specielt, hvilket gør dem en smule sløvere end VARCHAR (som svarer til Access TEXT).

Rent hastighedsmæssigt - normalt er SQL Server væsentligt hurtigere end Access, jo mere komplekse opgaver, jo hurtigere er den forholdsmæssigt.

Jeg kunne godt tro, at I blot var blevet udsat for en voksende logfil (og at I har placeret logfilen sammen med datafilen samt systemdatabaserne og tempdb - hvad der er nemt at gøre da det er default, desværre).

www.microsoft.com/sql kan I finde whitepapers mv der beskriver opsætning og konfiguration af sql server.
Avatar billede fdata Forsker
12. juni 2004 - 13:24 #6
Vi må vist lige samle lidt op:
"Vi har installeret en ny SQL server 2000". Den er helt nyinstalleret. Altså ingen logfil. Ingen fragmentering. Ingenting!
Felterne er af type Varchar. Det hele er helt, helt simpelt.

Umiddelbart lyder det som om, det er filplaceringerne, der kunne være problemet.

Det lader ikke til, at der er settings, vi har overset.

I deler pointene for indsatsen. OK?
Avatar billede fdata Forsker
12. juni 2004 - 13:25 #7
... men så må I lige smide nogle svar  ;o)
Avatar billede trer Nybegynder
13. juni 2004 - 13:46 #8
Jeg fylder lige lidt på min kommentar ovenfor:

Logfilen på sql server oprettes til hver database. Default er (vistnok) 1 MB log der vokser med 10%. Med Trucnate log on checkpoint skal loggen "kun" kunne indeholde den største enkelte transaktion. Dvs. med delete table skal loggen som minimum kunne indeholde hele tabellen.  Kan den ikke det, så vil loggen vokse - og mens den gør det, så svarer den pågældende db reelt set ikke. Det svarer lidt til når Windows pagefil vokser.

Løsningen er, at man altid sætter log/data filer til at vokse med fx 5, 10 eller 25 MB eller bedre, beregner den forventede størrelse på db'en og sætter filstørrelserne efter det fra starten af.

Log filer bør aldrig være placeret på samme diske/raid som datafiler og tempdb bør altid være på en disk for sig. System-db'er (master, msdb) kan fint være sammen med OS-filerne.  SQL Server bør sættes til en max memory så der er omkring 200 mb fri til OS, backup og overvågning etc & SQL Server query memory bør sænkes til 512 KB. Har man mindre end 1 GB ram bør man trimme OS så "unødvendige" services (messenger, alerter, computer browser, dist. link tracking etc) ikke startes.

Mht backup - sørg for altid at tage fuld backup af master og msdb ved enhver ændring - inkl. når du tager backup af en bruger-database. Rækkefølgen bør være "bruger-db", "master" og "msdb" - grunden er, at master har metadata for den enklete bruger-db mens msdb indeholder backup information.
Avatar billede fdata Forsker
13. juni 2004 - 17:07 #9
Så kom der hul på bylden, hvad? Jeg tror, alle er enige om at du har fortjent hele potten. 1000 tak for dit svar. Vi kaster os over opsætningen mandag morgen. Super ;o))
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester