Pagina 1 di 6 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 51

Discussione: rallentamento Database

  1. #1

    rallentamento Database

    Ciao a tutti... vi spiego il mio problema.....
    ho una pagina in asp contenente un form di inserimento di dati.
    Cliccando su Invia i dati... mi esegue l' upload di un file a mia scelta e invia la mail direttamente all'utente a cui si scrive l' indirizzo e mail...inoltre fa altri controlli sull' intero database...
    il Dabatase e un Database aziendale e contiene circa 13.000 record..... il fatto e che per eseguire tutto rallenta da far paura....ho notato pero che se cancello la meta dei record e molto molto piu veloce ( ma cosi va bene )...per con tutti i record e una chiavica e succede che la connessione va in timeout....

    C'e un sistema per velocizzare il tutto ???? Questa e la pagina che esegue il tutto ....GRAZIE

    <head>
    <title>INSERISCI DOCUMENTO</title>
    <link href="stile.css" rel="stylesheet" type="text/css">
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript" src="js/interface.js"></script>
    <link href="stylemenu.css" rel="stylesheet" type="text/css" />

    </head>




    <%
    Dim oUpload
    Dim oFile
    Dim sFileName
    Dim oFSO
    Dim sPath 'percorso del file
    Dim sNewData
    Dim nLength
    Dim bytBinaryData
    Dim Tipo 'campo TIPOLOGIA del form
    Dim Destinatario
    Dim Mittente 'campo PERSONA del form

    Const nForReading = 1
    Const nForWriting = 2
    Const nForAppending = 8

    Dim anno, mese, giorno, ore, minuti, secondi
    Dim Differenza3
    'data = day(date)

    ' Funzione DataInNum a cui passo una data
    ' Preleva dalla data l'anno
    anno = Year(date)
    ' Preleva dalla data il mese
    mese = Month(date)
    ' Preleva dalla data il giorno
    giorno = Day(date)
    ' Concatena i valori in un unico numero
    solodata = giorno & "/" & mese & "/" & anno

    data = giorno & mese & anno

    ore = hour(time)
    minuti = minute(time)
    secondi = second(time)

    Orax = ore & minuti & secondi


    ' grab the uploaded file data
    Set oUpload = New clsUpload

    Tipo = oUpload.ValueOf(1)' il numero contrassegnato nella parentesi sta a indicare il numero del campo ( in quest caso ) '
    Data_ricevimento = oUpload.ValueOf(2)
    Mittente = oUpload.ValueOf(3)
    Ritirato_da = oUpload.ValueOf(5)
    Data_ritiro = oUpload.ValueOf(6)
    Destinatario = oUpload.ValueOf(4)
    Priorita = oUpload.ValueOf(7)
    Mail = oUpload.ValueOf(8)
    Note = oUpload.ValueOf(9)
    Allegato = oUpload.ValueOf(10)
    StatoPosta = oUpload.ValueOf(11)


    Set oFile = oUpload("File1")

    ' parse the file name

    sFileName = oFile.FileName
    If Not InStr(sFileName, "\") = 0 Then
    sFileName = Mid(sFileName, InStrRev(sFileName, "\") + 1)
    End If

    ' Convert the binary data to Ascii
    bytBinaryData = oFile.BinaryData
    nLength = LenB(bytBinaryData)
    For nIndex = 1 To nLength
    sNewData = sNewData & Chr(AscB(MidB(bytBinaryData, nIndex, 1)))
    Next

    ' Save the file to the file system
    sPath = Server.MapPath("allegati") & "/"
    Set oFSO = Server.CreateObject("Scripting.FileSystemObject")
    sFileName = data & Orax & "-" & sFileName
    sFileName = replace(sFileName, " ", "_")
    oFSO.OpenTextFile(sPath & sFileName, nForWriting, True).Write sNewData
    Set oFSO = Nothing

    Set oFile = Nothing
    Set oUpload = Nothing

    dataP = Data_ricevimento

    dim conn, rs2, rs4, rs5, sql

    ' --- costruzione stringa di connessione al db ---
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};" &_
    "DBQ="& Server.MapPath("Posta.mdb")

    ' --- preparazione connection e recordset ---


    Set cn = Server.CreateObject("Adodb.Connection")
    'Set rs3 = Server.CreateObject("Adodb.Recordset")
    'Set rs = Server.CreateObject("Adodb.Recordset")


    Set rs5 = Server.CreateObject("Adodb.Recordset")


    sql5 = "SELECT * FROM T_Diff ORDER BY ID desc"
    SET rs5 = conn.execute(sql5)



    Do while not rs5.EOF

    ' Differenza3 = DateDiff("s", Data_ricevimento, Now)

    if rs5("StatoPosta") = "NO" then

    if rs5("Differenza") > 12 then

    if rs5("Sollecito") = "No" then


    Set objEmail = CreateObject("CDO.Message")
    objEmail.From = "PostaInternaManital@prova.com"
    objEmail.To = rs5("Mail")
    objEmail.Subject = "Avviso attivazione posta"
    objEmail.HTMLbody = "SOLLECITO"
    objEmail.AddAttachment server.MapPath("allegati\" & sFileName)
    objEmail.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    objEmail.Configuration.Fields.Item _

    ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "out.alice.it"
    objEmail.Configuration.Fields.Item _

    ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25

    objEmail.Configuration.Fields.Update
    objEmail.Send

    rs5.movefirst
    sqlupdate = "UPDATE T_Diff SET Sollecito = 'Si'"
    conn.execute(sqlupdate)


    end if

    end if

    end if

    'response.write( "
    " & rs5( "Mail" ) )
    rs5.movenext

    Loop

    'chiusura RecordSet RS5
    rs5.Close
    set rs5 = Nothing


    Set rs2 = Server.CreateObject("Adodb.Recordset")

    rs2.Open "T_Posta", conn, 2, 2

    ' --- aggiunta di un record ---
    rs2.addnew
    rs2("Mittente") = Mittente
    rs2("Tipo") = Tipo
    rs2("Data_ricevimento") = Data_ricevimento
    rs2("Destinatario") = Destinatario
    rs2("Ritirato_da") = Ritirato_da
    rs2("Data_ritiro") = Data_ritiro
    rs2("Priorita") = Priorita
    rs2("Mail") = Mail
    rs2("Note") = Note
    rs2("Allegato") = sFileName
    rs2("StatoPosta") = StatoPosta
    rs2.update

    sql11 = "SELECT ID FROM T_Posta ORDER BY ID desc"

    set rs11 = conn.execute(sql11)


    rs11.movefirst
    IDPosta = rs11("ID")

    rs2.Close
    set rs2 = Nothing

    '
    'rs.Open "T_Documenti", conn, 2, 2

    ' --- aggiunta di un record ---
    'rs.addnew
    ' rs("Destinatario") = Destinatario
    ' rs("Data") = solodata
    ' rs("Mail") = Mail
    ' rs.update

    ' rs3.Open "T_MailR", conn, 2, 2

    ' --- aggiunta di un record ---
    ' rs3.addnew
    ' rs3("Mail") = Mail
    ' rs3("Ora") = Orax
    ' rs3("Data") = solodata
    ' rs3("Destinatario") = Destinatario
    ' rs3.update

    Set rs4 = Server.CreateObject("Adodb.Recordset")

    rs4.Open "T_Diff", conn, 2, 2

    ' --- aggiunta di un record ---
    rs4.addnew
    rs4("Mail") = Mail
    rs4("DataCorr") = DataP
    rs4("OraInvio") = Orax
    rs4("Differenza") = Differenza3
    rs4("StatoPosta") = StatoPosta
    rs4("Sollecito") = "No"
    rs4("IDPosta") = IDPosta
    rs4.update

    rs4.Close
    set rs4 = Nothing

    Set rs6 = Server.CreateObject("Adodb.Recordset")

    sql6 = "SELECT *, DateDiff('s', Data_ricevimento, 'Now') AS Differenza3 FROM T_Diff,T_Posta"
    set rs6 = conn.execute(sql6)

    do while not rs6.EOF

    'fondamentale perche senno non fa riga per riga
    Data_ricevimento = rs6("Datacorr")

    Differenza3 = DateDiff("s", Data_ricevimento, Now)

    'modifichiamo la differenza e associamo l'ID della posta

    sqlupdate1 = "UPDATE T_Diff SET Differenza = " & Differenza3 & " WHERE IDPosta=" & rs6("IDPosta")
    conn.execute(sqlupdate1)

    rs6.movenext

    loop

    rs6.Close
    set rs6 = Nothing
    conn.Close
    set conn = nothing



    Set objEmail = CreateObject("CDO.Message")
    objEmail.From = "PostaInternaManital@prova.com"
    objEmail.To = Mail
    objEmail.Subject = "Avviso attivazione posta"
    objEmail.HTMLbody = "Avviso ricezione posta presso Sede Ivrea"
    objEmail.AddAttachment server.MapPath("allegati\" & sFileName)

    objEmail.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

    objEmail.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "out.alice.it"

    objEmail.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25

    objEmail.Configuration.Fields.Update
    objEmail.Send



    AzioneLog = "Inserita registrazione di tipo " & Tipo & " registrata il " & Data_ricevimento & " da " & Mittente & " per " & Destinatario & " con allegato " & sFileName
    %>



    <html>


    Il file &#232; stato salvato!</p>



    Indietro
    <%
    'response.redirect "visualizza.asp"
    %>
    </html>

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,134
    13000 record con access ottimista, poi aggiungici la pagina cosi strutturata sarebbe un miracolo che andasse qualche volta
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Il fatto e che anche in sequel fa così... Non migliora di nulla......
    Che si potrebbe fare?

  4. #4
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,812

    Re: rallentamento Database

    Originariamente inviato da emi10
    Ciao a tutti... vi spiego il mio problema.....
    ho una pagina in asp contenente un form di inserimento di dati.
    Cliccando su Invia i dati... mi esegue l' upload di un file a mia scelta e invia la mail direttamente all'utente a cui si scrive l' indirizzo e mail...inoltre fa altri controlli sull' intero database...


    il Database e un Database aziendale e contiene circa 13.000 record..... il fatto e che per eseguire tutto rallenta da far paura....ho notato pero che se cancello la meta dei record e molto molto più veloce ( ma cosi va bene )...per con tutti i record e una chiavica e succede che la connessione va in timeout....
    13000 non sono pochi ma nemmeno tanti se li filtri adeguatamente (ho db access con + di 200000 record e non presentano problemi )

    senza che cerchi di leggere/capire la pappardelle di codice (che a colpo d'occhio mi pare un po' tortuoso), ci dici in sintesi che controlli dovresti fare?


    EDIT: ricorda di usare il tag CODE del forum per postare codice, grazie

  5. #5
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,134
    A) Passa a sqlserver o mysql come db
    B) Eseguire upload separatamente
    C) Inviare le mail a blocchi di 500/1000 indirizzi per volta fino al raggiungimento 13000
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  6. #6
    Per prima cosa devo fare l'upload del file e successivamente inviare la mail all utente in questione
    Il controllo vero e proprio e quello di mandare una mail di sollecito dopo le 48 h dalla ricezione se l utente non si e preoccupato di andare a ritirare la posta.


    Sembra semplice, ma ho ottimizzato il cosdice per quanto ne sono capace, ma con 13000 record va lentissimo....se invece ne metto la meta va molto bene

    Grazie mille per l iuto

  7. #7
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,812
    quindi la prima parte (upload + invio singola mail) c'entra un tubo, giusto?

  8. #8
    ma diciamo di no... anche perche quello non da problemi ...

    il problema sta nel fatto che per poter eseguire il controllo di invio mail e calcolare le varie differenze ( per vedere se sono passate 48 h ) deve analizzare tutti i record e va in palla

  9. #9
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,812
    parliamo ancora di strategia prima che di codice.

    passare 13000 record alla botta è decisamente troppo

    anche con server/script/database performante non va tanto bene

    come ha detto andrea separa i processi (non mescolare quello che serve a te con quello che serve all'utente)

    poi invia POCHE centinaia di mail alla volta:
    selezione i primi N a cui devi inviare
    (where "che ne so" and "non inviato")
    cicla l'invio
    scrivi che l'hai fatto (inviato)

    per automatizzare il processo schedula sul server il file che esegue l'operazione

  10. #10
    pero come faccio a dirgli di inviare le mail a blocchi ?

    nel senso ...vome faccio a dirgli per esempio di fare le prime 500?

    il problema pero è anche mentre controlla tutti i record ( perche deve calcolare le differenze ) .... posso fargliene controllare solo 500 per volta per esempio ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.