Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Skapa nya fält i en gigantisk tabell - prestandaproblem

Postades av 2009-12-02 13:05:28 - Erik Jorman, i forum sql-server/msde, Tråden har 5 Kommentarer och lästs av 1714 personer

Hej.
Jag har en tabell (i en sql server 2008) som innehåller miljontals med poster. Nu ska jag lägga till 3 fält till den. Eftersom dom måste deklareras som NOT NULL (dom är för övrigt decimala 15,4), så måste alla initieras med ett värde samtidigt. Så, när jag körde följande:
IF NOT EXISTS (SELECT * FROM syscolumns WHERE name = 'mittForstaNyaFaelt' AND id = object_id('dbo.minDatabas'))
BEGIN
EXEC ('ALTER minDatabas ADD mittForstaNyaFaelt decimal(15, 4) NOT NULL DEFAULT 0')

END
ELSE
PRINT 'Kolumn mittForstaNyaFaelt i tabell minDatabas fanns redan, ej tillagd!'
GO

Och sen samma för de andra 2 nya fälten, så tog det en evighet, typ 4 dygn, och det är inte accepabelt. Dessutom så växte loggfilen något groteskt. Finns det något knep för att snabba upp detta? Jag funderar på t.ex. att ta det i mindre bitar, typ 2000 poster i taget eller så, men vet inte om det kommer snabba upp det. Transaktionsloggen bör väl i alla fall bli lite mindre.


Svara

Sv: Skapa nya fält i en gigantisk tabell - prestandaproblem

Postades av 2009-12-02 22:59:49 - Håkan Borneland

Testa det här.
(håller loggfilen på mattan också)

<code>
ALTER DATABASE [din databas] SET RECOVERY SIMPLE;
GO
ALTER TABLE [din tabell] ADD [din kolumn] decimal(15, 4) NOT NULL DEFAULT 0;
GO
ALTER DATABASE [din databas] SET RECOVERY FULL;
GO
</code>

Varför använde du EXEC för detta?

Tog ca 12 minuter på en tabell med 2,9 miljoner rader.


Svara

Sv:Skapa nya fält i en gigantisk tabell - prestandaproblem

Postades av 2009-12-02 23:18:05 - Andreas Hillqvist

Borde du inte kunna lägga till alla tre kolumner i en ALTER TABLE sats?

ALTER minDatabas 
    ADD mittForstaNyaFaelt decimal(15, 4) NOT NULL DEFAULT 0,
    ADD mittAndraNyaFaelt decimal(15, 4) NOT NULL DEFAULT 0,
    ADD mittTredjeNyaFaelt decimal(15, 4) NOT NULL DEFAULT 0


Svara

Sv: Skapa nya fält i en gigantisk tabell - prestandaproblem

Postades av 2009-12-02 23:41:32 - Håkan Borneland

Jo det går alldeles utmärkt, ser ut såhär:

<code>
ALTER DATABASE [din databas] SET RECOVERY SIMPLE;
GO
ALTER TABLE [din tabell] ADD
[din kolumn1] decimal(15, 4) NOT NULL DEFAULT 0,
[din kolumn2] decimal(15, 4) NOT NULL DEFAULT 0,
[din kolumn3] decimal(15, 4) NOT NULL DEFAULT 0;
ALTER DATABASE [din databas] SET RECOVERY FULL;
GO
</code>

EDIT: Ovanstående tog 15,4 minuter på 2,9 miljoner rader.


Svara

Sv: Skapa nya fält i en gigantisk tabell - prestandaproblem

Postades av 2009-12-07 15:51:47 - Erik Jorman

Tack för era tips. Varför jag använde EXEC är bara för att det är en standard vi använder sen gammalt. I alla fall, hur jag än testar går det grymt segt. Nu är det en enorm mängd rader i tabellen (nästan 100 000 000) och dessutom kör jag på en virtuell maskin där man inta är riktigt säker på hur mycket resurser man får. Lite frustrerande..........


Svara

Sv:Skapa nya fält i en gigantisk tabell - prestandaproblem

Postades av 2009-12-07 23:26:16 - Håkan Borneland

Den "standarden" tycker jag ni ska överge...

En annan lösning skulle vara att skapa en tom tabell med de nya raderna (annat namn).
BULK COPY raderna från originaltabellen, och sedan "droppa", den "gamla".
Döp om den nya tabellen till samma som den gamla.


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 615
27 953
271 709
5 578
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies