Avatar billede Syska Mester
26. januar 2008 - 15:59 Der er 8 kommentarer og
1 løsning

Design af database, kan det betale

Hej,

Jeg kom til at tænke på noget ...

Jeg har en database med nogle millioner records, hvor der kommer nye hver dag fra nogle spil ....

Lad os antage et simpelt eksempel:

spillerid ,serverid, dag, stats(indeholder flere ting IRL)

Nu har SQL 2008 endelig fået Date og Time adskilt ...
Date 3 byte, time 4 byte vist nok, SmallDateTime 4 byte.

Alt i databasen er opgivet i dage, tidspunktet på dagen er uden betydning, så vælger man selvfølgelig "Date" som sin Column type.

Men kan det betale sig at oprette en table ved siden af med dagene, og så lave link mellem dem ... der kommer ca. 300k nye rows per dag, og gamle(dem over x dage gamle) bliver slettet ... ?
small int fylder jo kun 2 byte ... så lidt plads kunne man spare, men giver det bare endnu størrer overhead, så man ender ud med dårligere performance ?

Jeg ved at det "behind the scenes" regnes som hel tal ... som ville selvf håbe at man kunne optimere lidt måske ? any one?

Som sagt importere jeg data 1 gang i døgnet, resten af dagen er de tal readonly ... hvad er optimalt her? Fill Factor 100, og så disable Index's når man laver inserts og enable dem igen efter så de opbygger deres index's igen eller kan de godt selv finde ud af at udsætte det Rebuild af index's når man har Fill Factor 100 ?

Det var vist alt ... hvis der er nogen der har rigtigt gode links til performance hints eller tips, må i gerne smide dem her ...

// ouT
Avatar billede arne_v Ekspert
26. januar 2008 - 21:28 #1
SQLServer 2008 ? Nogen er tidligt på den !

:-)

Jeg ville ikke lave den dagnummer-dag tabel. Udfra dine egne tal vil du spare
365*300000*1 bytes = 110 MB om året. Det er ingenting. Og CONTRAINT og JOIN vil
koste en lille smule.

300000 INSERT bør ikke være så slemt. Hvor lang tid tager det ? Bare bundt flere INSERT
i en enkelt transaktion (BCP er sikkert endnu bedre) og hav data og log op diske der
hænger på en RAID controller med cache (sat til writeback og *MED* batteri).
Avatar billede Syska Mester
26. januar 2008 - 22:00 #2
Hej Arne,

Ja, man skal vel ud og se hvad der er af nye ting :-) og den Date kunne være dejlig lige netop her ... så jeg kan bruge Date i stedet for DateTime ... vigtigt det kører godt og hurtigt på langsom hardware ... så hvis der kommer nok hits, kan computeren jo altid opgraderes :-)

Skal køre på en ældre model ( 3 Ghz P4, 2 GB ram, 80 GB sata )

Ikke så meget pladsen jeg tænkte på ... mere performance, read og write ... plads er så billigt det ikke er et issue, men det er performance ikke ... og der kan jo spares en del, ved at bruge tingene på den optimale måde, så disken ikke bliver overbelastet.

Jeg får de inserts som:
INSERT INTO `x_world` VALUES (30,-371,400,3,153596,'Arå 4',432,'Stensiggaard',2531,'TG©',360);
INSERT INTO `x_world` VALUES (31,-370,400,3,143795,'Arå 2',432,'Stensiggaard',2531,'TG©',499);
INSERT INTO `x_world` VALUES (32,-369,400,3,129581,'Arå A',432,'Stensiggaard',2531,'TG©',887);

Pt samles de i en SP og så fyres der ca. 20000 på samme tid ... og så igen og igen til de er færdige ...

Men tænkte mere på om det er en fordel at disable Index's inden man laver Inserts ... om det har noget at sige i forhold til ens Clustered Key som er min Primary key.

// oUT
Avatar billede arne_v Ekspert
26. januar 2008 - 22:12 #3
Har du sat AUTO COMMIT OFF og en COMMIT i bunden af den SP ?

(det bør gøre en pæn forskel)

Det koster ved hver INSERT hvis der er et INDEX. Det koster også at genskabe et INDEX.

Du kan prøve og måle hvad der bedst kan betale sig.
Avatar billede Syska Mester
29. januar 2008 - 02:09 #4
og så for et par dagen siden skrev jeg et indlæg, men super eksperten har det med at FUCKE, men nu er det lidt frisk på at skrive igen her :-)

Går ud fra at AUTO COMMIT OFF og COMMIT, bare skal ind før og efter x antal insert commands ... ?

Men hvad med den Fill Factor? Data er readonly i resten af døgnet?

Ja, det koster at genskabe ... men at lave en ALTER INDEX table REBUILD eller hvordan den command nu er ... gør jo også at der ikke er noget fragmentering, og ligesom optimere det hele lidt har jeg læst mig frem til ... så kan det jo ske at man alligevel vinder i sidste ende eller ?

Tror også godt du kan smide et svar ... :-)

// ouT
Avatar billede arne_v Ekspert
29. januar 2008 - 02:52 #5
Ja.

---

Jeg ved ikke med fill factor. Jeg er ikke DBA.
Avatar billede arne_v Ekspert
29. januar 2008 - 02:52 #6
Og et svar.
Avatar billede Syska Mester
29. januar 2008 - 17:57 #7
hva ... troede du vidste alt :-p

// ouT
Avatar billede arne_v Ekspert
29. januar 2008 - 18:04 #8
Der kan skrives meget tykke boeger om det jeg ikke ved.
Avatar billede Syska Mester
29. januar 2008 - 19:38 #9
hehe, måske, men der kan også skrives meget tykke bøger om hvad du ved :-)
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