Avatar billede tommyrasmussen Nybegynder
04. juli 2005 - 14:15 Der er 23 kommentarer og
1 løsning

Problem med database der vokser helt uforholdsmæssigt

Jeg har et massivt problem med en database der bare vokser og vokser. Der ligger en lille stump VBA kode i den, der kører hvert 10. sekund. Databasen har ikke mere end ca. 100 poster, men vokser til trods for dette til 149GB i løbet af et døgn.

Hvad pokker kan der være galt med dette. Jeg synes jeg har prøvet at sætte det hele = nothing,  Koden ser således ud:

JENSEN63 har før hjulpet mig lidt med koden, så det kan være han har et godt forslag ?!

Function DecodeString()

DoCmd.SetWarnings False
Dim strSQL As String
Dim db As DAO.Database

    Set db = CurrentDb()

    strSQL = "INSERT INTO Data ( ID, Dato, Tidspunkt, Sensor1, Sensor2, Sensor3, Sensor4, Sensor5, Sensor6, Sensor7, Sensor8 )"
    strSQL = strSQL & "SELECT Mid([MSG],3,2) AS ID, "
    strSQL = strSQL & "Mid([senttime],1,10) AS Dato, "
    strSQL = strSQL & "Mid([senttime],12,8) AS Tidspunkt, "
    strSQL = strSQL & "Mid([MSG],6,5) AS Sensor1, "
    strSQL = strSQL & "Mid([MSG],12,5) AS Sensor2, "
    strSQL = strSQL & "Mid([MSG],18,5) AS Sensor3, "
    strSQL = strSQL & "Mid([MSG],24,5) AS Sensor4, "
    strSQL = strSQL & "Mid([MSG],30,5) AS Sensor5, "
    strSQL = strSQL & "Mid([MSG],36,5) AS Sensor6, "
    strSQL = strSQL & "Mid([MSG],42,5) AS Sensor7, "
    strSQL = strSQL & "Mid([MSG],48,5) AS Sensor8  "
    strSQL = strSQL & "FROM ozekismsin "
    strSQL = strSQL & "Where Left(msg, 2) = 'ID'"
    db.Execute strSQL


    strSQL = "INSERT INTO Alarmlog ( ID, Dato, Tidspunkt, Alarmtekst )"
    strSQL = strSQL & "SELECT Mid([MSG],27,2) AS ID, "
    strSQL = strSQL & "Mid([senttime],1,10) AS Dato, "
    strSQL = strSQL & "Mid([senttime],12,8) AS Tidspunkt, "
    strSQL = strSQL & "Mid([MSG],30,50) AS Alarmtekst "
    strSQL = strSQL & "FROM ozekismsin "
    strSQL = strSQL & "Where Mid([msg],12,5) = 'ALARM'"
    db.Execute strSQL
   
DoCmd.RunSQL "UPDATE Data SET Data.Sensor1 = IIf([Sensor1]=32767,Null,[Sensor1]), Data.Sensor2 = IIf([Sensor2]=32767,Null,[Sensor2]), Data.Sensor3 = IIf([Sensor3]=32767,Null,[Sensor3]), Data.Sensor4 = IIf([Sensor4]=32767,Null,[Sensor4]), Data.Sensor5 = IIf([Sensor5]=32767,Null,[Sensor5]), Data.Sensor6 = IIf([Sensor6]=32767,Null,[Sensor6]), Data.Sensor7 = IIf([Sensor7]=32767,Null,[Sensor7]), Data.Sensor8 = IIf([Sensor8]=32767,Null,[Sensor8]) "

db.Close
Set db = Nothing



End Function
Avatar billede mugs Novice
04. juli 2005 - 14:25 #1
Det er sandsynligvis fordi du indsætter nye data hvert 1o. sekund idet Access vokser meget når du tilføjer nye data.

Di kan sætte databasen til at komprimere ved lukning i menuen Funktioner > Indstillinger > Generelt og søt checkmærke i "komprimer ved lukning"
Avatar billede tommyrasmussen Nybegynder
04. juli 2005 - 14:33 #2
1. Databasen indsætter ikke nye data hvert 10.sekund, men kontrollerer om der er nye data at indsætte. Det er der for det meste ikke.

2. Databasen lukkes "aldrig", men kører kontinuerligt på en dedikeret pc.
Avatar billede mugs Novice
04. juli 2005 - 14:38 #3
OK - En Access database kan fylde ca 2 Gb, så jeg tror en komprimering vil afhjælpe noget af det.
Avatar billede terry Ekspert
04. juli 2005 - 14:39 #4
"..men vokser til trods for dette til 149GB i løbet af et døgn."

An Access dB can max. be 2GB!!!!
Avatar billede terry Ekspert
04. juli 2005 - 14:41 #5
If you mean 149MB then I wouldnt worry about it, and if possible I would try and compact the dB once in a while.
Avatar billede terry Ekspert
04. juli 2005 - 15:12 #6
Avatar billede tommyrasmussen Nybegynder
04. juli 2005 - 15:16 #7
Det er desværre ikke helt de svar jeg er ude efter.
Jeg har skrevet lidt forkert. Den vokser til 1,49GB i løbet af et døgn.
OG DET ER VEL AT MÆRKE MED EN TILFØJELSE PÅ KUN 4 POSTER.

Maskinen den kører på står et ubemandet sted, så det er ikke muligt at rende hen til den for at komprimere den hvert døgn. Det kan desværre heller ikke lade sig gøre at automatisere en komprimering, da der er delt adgang til databasen.

Jeg ved ikke helt hvad jeg skal stille op, for den kommer med en runtime error out of memory, og går så i stå. Det er ikke godt, for den skal faktisk kontinuerligt stå og logge nogle temperaturdata.

Jeg har prøvet at køre den på min lokale maskine, og der går ikke 10 minutter før databasestørrelsen er fordoblet.
Avatar billede terry Ekspert
04. juli 2005 - 15:26 #8
Access DOES grow in size when in use even when you are not actually adding records.
You could try altering your code to see if it helps, but there are no guaranties.
You could try using Dcount() to see if there are any records in ozekismsin and only if there are run the code to addthem to your tables.

You could also try increaing the time from 10 to 20 second or even more.

BUT! You still need to compact and repair.
There are tools on the market which can do this for you
Avatar billede terry Ekspert
04. juli 2005 - 15:27 #9
You also have an UPDATE which gets run every 10 seconds! This too will increase the dB size!
Avatar billede tommyrasmussen Nybegynder
04. juli 2005 - 15:42 #10
måske ER det netop UPDATE der er problemet, for jeg synes først det er efter den er kommet på systemet det er begyndt at gå rigtigt galt.
Jeg ved ikke hvordan man anvender Dcount. Systemet er i øjeblikket styret med nøgler på hvert felt, således at det samme felt ikke tilføjes mere end een gang.
Dcount var måske meget bedre, for så skal koden ikke kigge på alle poster i databasen hver gang.

Hvordan komprimerer man en database uden at have udelt adgang ?
Avatar billede mugs Novice
04. juli 2005 - 15:44 #11
DCount kan anvendes på flere måder. Jeg kan sende dig nogle eksempletr hvis du lægger din e-mail.
Avatar billede tommyrasmussen Nybegynder
04. juli 2005 - 15:49 #12
Det vil jeg gerne have.
Måske der er nogle der kunne have lyst til at kigge
på min database også, så skal de være yderst velkomne.
Bare smid en mail.

min er: tommyr@mail.dk
Avatar billede terry Ekspert
04. juli 2005 - 15:54 #13
Dim cnt as Long
cnt = dcount("*", "ozekismsin", "Left(msg,2) = 'ID'")


http://www.fmsinc.com/products/Agent/index.html
Avatar billede mugs Novice
04. juli 2005 - 15:56 #14
Eksempler sendt.
Avatar billede tommyrasmussen Nybegynder
04. juli 2005 - 16:02 #16
Ok, det ser interessant ud.
Jeg må lige have lidt tid til at kigge det igennem
og prøve mig frem, så skriver jeg om det giver nogle
brugbare resultater.
Avatar billede tommyrasmussen Nybegynder
04. juli 2005 - 22:19 #17
Der er ikke umiddelbart noget gennembrud i mit problem efter besvarelserne i dag.
For at kunne komprimere basen skal den lukkes ned, og det forekommer ret besværligt at skal lukke en database ned automatisk, komprimere den, for at starte den op igen. Ikke nok med det, så har jeg jo også en datakilde - en såkaldt ODBC connection til databasen, så man har ikke udelt adgang, medmindre ODBC programmet som kører sideløbende med den, lukkes ned.

DET NYE ER: lukkes det sidekørende program, og databasen for lov at køre uden de udefrakommende forstyrrelser, vokser den IKKE. Heller ikke selv om VBA koden stadig udføres hvert 10 sekund ??!?!?

Jeg roder videre med dcount problematikken, men jeg er begyndt at tvivle på en løsning, og det irriterer mig, når nu man ellers synes man har lavet en funktionel database.
Avatar billede mugs Novice
04. juli 2005 - 22:24 #18
Var det en mulighed via Windows Scheduler at lukke begge programmer, komprimere og åbne dem igen? Blot en strøtanke lige inden sengetid.
Avatar billede terry Ekspert
05. juli 2005 - 10:09 #19
Well it sounds like your ODBC connection is giving the problem, Why are you using an ODBC connection? Can you not connect with ADO?
Avatar billede terry Ekspert
24. juli 2005 - 18:52 #20
are we finished with this question tommy?
Avatar billede terry Ekspert
16. august 2005 - 11:16 #21
status?
Avatar billede terry Ekspert
24. august 2005 - 21:05 #22
tommy, if you are finished with this question then you should close it!
Thanks
Avatar billede tommyrasmussen Nybegynder
10. januar 2006 - 10:10 #23
Undskyld, men lidt familære problemer har gjort det umuligt for
mig at vende tilbage før nu. Problemet løste sig ikke helt, men
det kører nu rimeligt.

Kan dårligt huske hvem der skal have point, men mugs burde også have
noget. Skriv eventuelt en kommentar mugs ?
Avatar billede mugs Novice
10. januar 2006 - 11:59 #24
Det er helt OK som det er nu :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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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