Avatar billede tblaster Nybegynder
05. oktober 2011 - 19:43 Der er 4 kommentarer og
1 løsning

Langsom afvikling af tekst import fra fil ind i MySQL database.

Jeg har et ASP script til at importer en masse tekst fra en fil. Mit problem er, at jeg syntes importen køre meget langsom.

Her er min kode:

' Open file
set fs=Server.CreateObject("Scripting.FileSystemObject")
set t=fs.OpenTextFile("C:\inetpub\wwwroot\site1\File.txt",1,false)

' Loop through file
Do While Not t.AtEndOfStream
  Counter = Counter + 1
  temp    = t.readline
  If Counter = 2 Then
      Set Rs = Conn.Execute("INSERT INTO T1 (Tekst) VALUES ('" & temp & "')")
  End If
  If Counter > 3 Then Counter = 0
Loop
t.close

Pt. indsættes der kun ca. 100.000 poster i database i timen hvilket jeg syntes er meget langsom. Og da min File.txt indeholder over 20 millioner poster der skal indsættes i databasen så tager det for lang tid.

Hvis jeg kigger på serveren der afvikler scriptet så køre CPU'en på mellem 0 og 1 % og der er pt. brugt 5.11 GB ram så der er masser af frit arbejdskraft.

Mit spørgsmål er derfor om jeg kan ændre noget i mit script så importen køre hurtigere eller om jeg kan ændre noget på serveren som gør at IIS'en og asp koden kan benytte langt flere ressourcer. Det kan vel ikke passe at den kun vil bruge 1% af computerens ressourcer når resten ikke benyttes.

Her er specifikationerne på serveren.

OS: Windows 2008 R2 SP1
CPU: Xeon Quad Core 2.0 GHz (E5504)
Ram: 16 GB DDR3
IIS: 7.5
MySQL: 5.5.10

På forhånd tak.
Avatar billede arne_v Ekspert
05. oktober 2011 - 20:03 #1
To forslag:

A) indsaet flere raekker per INSERT

INSERT INTO T1 (Tekst) VALUES ('aaa'),('bbb'),('ccc')

B) hvis tabellen er MyISAM saa put DELAY_KEY_WRITE=1 paa tabel definitionen
Avatar billede tblaster Nybegynder
05. oktober 2011 - 20:29 #2
Genialt!

Min tabel stod til InnoDB og efter at have ændret den til MyISAM og sat DELAY_KEY_WRITE=1 så køre det bare. Nu køre CPU'en på ca. 25% og nu importeres der omkring 250.000 poster i minuttet!

Vil du anbefale at jeg ændre alle mine tabeller til MyISAM eller er der nogle ulemper ved det?

Post et svar så skal du få dine velfortjente point!
Avatar billede arne_v Ekspert
05. oktober 2011 - 21:01 #3
Der er en del ulemper ved MyISAM. MyISAM understoetter ikke transaktioner, MyISAM understoetter ikke foreign key constraints etc..

Men den er hurtig til INSERT !
Avatar billede arne_v Ekspert
05. oktober 2011 - 21:01 #4
og et svar
Avatar billede arne_v Ekspert
05. oktober 2011 - 21:03 #5
DELAY_KEY_WRITE=1 goer at et crash midt i load kan give lidt kaos.

Intet er gratis i denne verden!
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
Kurser inden for grundlæggende programmering

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