|
| 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.
| |
|
|