/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Kan ikke delete mange rækker i database
Fra : Per J


Dato : 13-10-03 10:48

Hej,

Jeg har en MSSql database og jeg vil gerne have slettet ca. 4 millioner
rækker i en tabel.
Men jeg får en timeout expired, når jeg prøver. Jeg kan ca. slette 200.000
rækker uden timeout, men jeg vil gerne kunne slette alle på én gang.
Hvordan?




 
 
Peter Lykkegaard (13-10-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 13-10-03 11:16


"Per J" wrote in a message >

> Jeg har en MSSql database og jeg vil gerne have slettet ca. 4 millioner
> rækker i en tabel.
> Men jeg får en timeout expired, når jeg prøver. Jeg kan ca. slette 200.000
> rækker uden timeout, men jeg vil gerne kunne slette alle på én gang.
> Hvordan?
>
TRUNCATE TABLE name

- Peter



Per J (13-10-2003)
Kommentar
Fra : Per J


Dato : 13-10-03 13:16

"Peter Lykkegaard" <polonline@hot.mail.com> wrote in message
news:HXuib.54$s84.36@news.get2net.dk...
>
> "Per J" wrote in a message >
>
> > Jeg har en MSSql database og jeg vil gerne have slettet ca. 4 millioner
> > rækker i en tabel.
> > Men jeg får en timeout expired, når jeg prøver. Jeg kan ca. slette
200.000
> > rækker uden timeout, men jeg vil gerne kunne slette alle på én gang.
> > Hvordan?
> >
> TRUNCATE TABLE name
>
> - Peter
>
>

TRUNCATE kan jeg desværre ikke bruge, da jeg gerne vil have en WHERE på min
tabel.

/Per



Jens Gyldenkærne Cla~ (13-10-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 13-10-03 13:32

Per J skrev:

>> > Jeg har en MSSql database og jeg vil gerne have slettet ca.
>> > 4 millioner rækker i en tabel.

Er der lige så mange rækker der ikke skal slettes?

> TRUNCATE kan jeg desværre ikke bruge, da jeg gerne vil have en
> WHERE på min tabel.

Hvis der er væsentligt færre rækker der skal beholdes, kan du måske
trække dem ud i en temporær tabel, slette alt i hovedtabellen og
lægge dem ind igen. Det kan selvfølgelig give bøvl hvis du har
kaskadesletninger til andre tabeller.

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Per J (13-10-2003)
Kommentar
Fra : Per J


Dato : 13-10-03 14:25

"Jens Gyldenkærne Clausen" <jc@dmf.dk> wrote in message
news:Xns941393EB5CEDFjcdmfdk@gyrosmod.dtext.news.tele.dk...
> Per J skrev:
>
> >> > Jeg har en MSSql database og jeg vil gerne have slettet ca.
> >> > 4 millioner rækker i en tabel.
>
> Er der lige så mange rækker der ikke skal slettes?
>
> > TRUNCATE kan jeg desværre ikke bruge, da jeg gerne vil have en
> > WHERE på min tabel.
>
> Hvis der er væsentligt færre rækker der skal beholdes, kan du måske
> trække dem ud i en temporær tabel, slette alt i hovedtabellen og
> lægge dem ind igen. Det kan selvfølgelig give bøvl hvis du har
> kaskadesletninger til andre tabeller.
>
> --
> Jens Gyldenkærne Clausen
> Svar venligst under det du citerer, og citer kun det der er
> nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
> hvordan på http://usenet.dk/netikette/citatteknik.html

Jeg har ca. 4 mill rækker jeg vil have slettet. Og ca. 1mill. jeg vil
bibeholde.
Og det er en lidt for stor opgave for dababasen at flytte rundt på så mange
rækker på én gang.
Men det kan vel ikke passe? MSSql burde da kunne klare langt større opgaver,
ikk? Hotmails logs, må da være en milliard gange større
Jeg tror ikke det er et hardware problem, der burde være rigeligt med
krafter.
Jeg har hørt, at der kan være nogle index indstillinger, men der er index på
tabellens id.


/Per




Peter Lykkegaard (13-10-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 13-10-03 19:26

Per J wrote:

> TRUNCATE kan jeg desværre ikke bruge, da jeg gerne vil have en WHERE
> på min tabel.
>
Prøver du at slette fra QA eller hvordan?
Du evt slå transactionsloggen fra?

mvh/Peter Lykkegaard




Per J (14-10-2003)
Kommentar
Fra : Per J


Dato : 14-10-03 09:15


"Peter Lykkegaard" <polonline@hotmail.dk> wrote in message
news:3f8af769$0$27470$edfadb0f@dread16.news.tele.dk...
> Per J wrote:
>
> > TRUNCATE kan jeg desværre ikke bruge, da jeg gerne vil have en WHERE
> > på min tabel.
> >
> Prøver du at slette fra QA eller hvordan?
> Du evt slå transactionsloggen fra?
>
> mvh/Peter Lykkegaard
>
Jeg sletter fra QA. Jeg tror ikke det er en god idé at slå transactionloggen
fra. Kan det ikke medføre nogle andre konsekvenser?



Peter Lykkegaard (14-10-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 14-10-03 19:01

Per J wrote:
> "Peter Lykkegaard" wrote in a message
>>
>> Prøver du at slette fra QA eller hvordan?
>> Du evt slå transactionsloggen fra?
>>
> Jeg sletter fra QA. Jeg tror ikke det er en god idé at slå
> transactionloggen fra. Kan det ikke medføre nogle andre konsekvenser?

Depends, lyder fra andet indlæg som om du sletter fra tabellen, mens der
kører produktion på databasen?
Tag databasen ud af drift, sæt evt singleuse på den og slå transactionloggen
fra og få ryddet op

Derefter sætter du transactiologgen til igen og sætter databasen i
produktion igen

Ved at slå transactionloggen fra, så kan du ikke lave rollback

mvh/Peter Lykkegaard




Jens Gyldenkærne Cla~ (13-10-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 13-10-03 14:54

Per J skrev:

> Jeg har ca. 4 mill rækker jeg vil have slettet. Og ca. 1mill.
> jeg vil bibeholde.

O.k.


> Men det kan vel ikke passe? MSSql burde da kunne klare langt
> større opgaver, ikk?

Jo. Hvordan ser din sletteforespørgsel ud?

Du skriver at der er index på id-feltet - men er det det du bruger
til at udvælge poster efter? Og er det et indeks eller bare en unik
constraint?
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Per J (13-10-2003)
Kommentar
Fra : Per J


Dato : 13-10-03 15:10


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> wrote in message
news:Xns9413A1B1963Ajcdmfdk@gyrosmod.dtext.news.tele.dk...
> Per J skrev:
>
> > Jeg har ca. 4 mill rækker jeg vil have slettet. Og ca. 1mill.
> > jeg vil bibeholde.
>
> O.k.
>
>
> > Men det kan vel ikke passe? MSSql burde da kunne klare langt
> > større opgaver, ikk?
>
> Jo. Hvordan ser din sletteforespørgsel ud?

Min forespørgsel er :
DELETE FROM session WHERE time > '08-08-2003 00:00:00'

>
> Du skriver at der er index på id-feltet - men er det det du bruger
> til at udvælge poster efter? Og er det et indeks eller bare en unik
> constraint?

Jeg ved ikke hvad forskellen er. Hvis jeg skulle bruge et rigtig index,
hvordan skulle den da så oprettes?


> --
> Jens Gyldenkærne Clausen
> Svar venligst under det du citerer, og citer kun det der er
> nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
> hvordan på http://usenet.dk/netikette/citatteknik.html



Ole Nielsby (15-10-2003)
Kommentar
Fra : Ole Nielsby


Dato : 15-10-03 15:05


Per J <per@hot.mailer.dk> skrev:

> Min forespørgsel er :
> DELETE FROM session WHERE time > '08-08-2003 00:00:00'

Kan du ikke evt. slette en dag ad gangen:

DELETE FROM session WHERE time > '08-10-2003 00:00:00'
GO
DELETE FROM session WHERE time > '07-10-2003 00:00:00'
GO
.....

DELETE FROM session WHERE time > '08-08-2003 00:00:00'
GO


Per J (16-10-2003)
Kommentar
Fra : Per J


Dato : 16-10-03 14:50

"Ole Nielsby" <ole.nielsby@snailmail.dk> wrote in message
news:3f8d5606$0$27380$edfadb0f@dread16.news.tele.dk...
>
> Per J <per@hot.mailer.dk> skrev:
>
> > Min forespørgsel er :
> > DELETE FROM session WHERE time > '08-08-2003 00:00:00'
>
> Kan du ikke evt. slette en dag ad gangen:


Jo, det endte jeg faktisk også med at gøre. Jeg slettede et par dage af
gangen.

>
> DELETE FROM session WHERE time > '08-10-2003 00:00:00'
> GO
> DELETE FROM session WHERE time > '07-10-2003 00:00:00'
> GO
> ....
>
> DELETE FROM session WHERE time > '08-08-2003 00:00:00'
> GO
>




Jens Gyldenkærne Cla~ (13-10-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 13-10-03 15:35

Per J skrev:

> Min forespørgsel er :
> DELETE FROM session WHERE time > '08-08-2003 00:00:00'


Her ville et indeks på time kunne hjælpe. Men om det kan svare sig
at oprette det alene for at slette de 4 mio. poster ved jeg ikke.

> Jeg ved ikke hvad forskellen er. Hvis jeg skulle bruge et
> rigtig index, hvordan skulle den da så oprettes?

CREATE (UNIQUE) INDEX skulle være nok.

Hvis jeg kigger på de tabeller jeg har oprettet via EM, findes
primary key bare som unique constraint - ikke som index. Det er dog
muligt at den i praksis fungerer som index alligevel.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Per J (14-10-2003)
Kommentar
Fra : Per J


Dato : 14-10-03 09:29


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> wrote in message
news:Xns9413A8AFBBAEEjcdmfdk@gyrosmod.dtext.news.tele.dk...
> Per J skrev:
>
> > Min forespørgsel er :
> > DELETE FROM session WHERE time > '08-08-2003 00:00:00'
>
>
> Her ville et indeks på time kunne hjælpe. Men om det kan svare sig
> at oprette det alene for at slette de 4 mio. poster ved jeg ikke.
>
> > Jeg ved ikke hvad forskellen er. Hvis jeg skulle bruge et
> > rigtig index, hvordan skulle den da så oprettes?
>
> CREATE (UNIQUE) INDEX skulle være nok.
>
> Hvis jeg kigger på de tabeller jeg har oprettet via EM, findes
> primary key bare som unique constraint - ikke som index. Det er dog
> muligt at den i praksis fungerer som index alligevel.
> --
> Jens Gyldenkærne Clausen
> Svar venligst under det du citerer, og citer kun det der er
> nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
> hvordan på http://usenet.dk/netikette/citatteknik.html

Der er allerede oprettet et index på time. Men jeg kan ikke lave et unique.
da de ikke er unique. Og jeg har prøvet at fortælle serveren, at den skal
ignorere at de ikke er unique(flueben i "ignore duplicate key"). Men det
syntes ikke at hjælpe.
Jeg har prøvet at lave forespøtgslen i QA, men efter 7 min. lukkede jeg, da
den blokerede fra alt andet.



Stig Johansen (14-10-2003)
Kommentar
Fra : Stig Johansen


Dato : 14-10-03 06:16

Per J wrote:

> Hej,
>
> Jeg har en MSSql database og jeg vil gerne have slettet ca. 4 millioner
> rækker i en tabel.
> Men jeg får en timeout expired, når jeg prøver. Jeg kan ca. slette 200.000
> rækker uden timeout, men jeg vil gerne kunne slette alle på én gang.
> Hvordan?

Det lyder som om det er en ADO komponent, der timer ud?
Default her er 30 sek. passer det?

--
Med venlig hilsen
Stig Johansen

Per J (14-10-2003)
Kommentar
Fra : Per J


Dato : 14-10-03 09:14

"Stig Johansen" <aaa@bbb.com> wrote in message
news:bmg09k$q9a$1@sunsite.dk...
> Per J wrote:
>
> > Hej,
> >
> > Jeg har en MSSql database og jeg vil gerne have slettet ca. 4 millioner
> > rækker i en tabel.
> > Men jeg får en timeout expired, når jeg prøver. Jeg kan ca. slette
200.000
> > rækker uden timeout, men jeg vil gerne kunne slette alle på én gang.
> > Hvordan?
>
> Det lyder som om det er en ADO komponent, der timer ud?
> Default her er 30 sek. passer det?
>
> --
> Med venlig hilsen
> Stig Johansen

Jeg prøvede at slette i Query analyzer, men efter 7 min., stoppede jeg
forespørgslen, da den blokerede for alt andet.
Den fik derfor ikke slettet en eneste række.



Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408518
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste