Aggiornamento di una selezione

di il
1 risposte

Aggiornamento di una selezione

Ciao a tutti. Premetto che non sono assolutamente un esperto di database e che mi avvicino a questo mondo per la prima volta.
Espongo il problema: (vale per MS Access o Sql Server)
1 server IIS Pentium IV win 2000 server in inglese, 750 Mb Ram
100 utenti intranet si collegano al sito ASP
ogni utente deve ricevere sul proprio video un nominativo diverso contenuto in una tabella del DB (che contiene milioni di record).
Uso ASP per la parte di pubblicazione.
Chi mi sa aiutare nell'impostare un criterio di selezione, in modo che ogni utente riceva un nominativo diverso da un'altro ?

Attualmente uso un sistema di Update su Select, cioè :
1) seleziono il primo record in cui non c'è nessun flag in un campo che chiamo LOCK;
2) aggiorno il record con una query di Update, flaggando questo campo

Se ho fino a 40 utenti nella intranet il tutto funziona, quando il numero aumenta (in certi orari ho proprio 100 persone), il server si blocca perchè un file DLLHOST.EXE utilizza costantemente il 100% della CPU.
Sui siti Microsoft e Newsgroup il problema è noto, però nessuno ha una soluzione, se non un riferimento al modo con cui la query esegue i comandi sopra descritti.
Non è un virus come descritto su altri siti, in quanto ho antivirus, patch e spyware detect installati e correttamente funzionanti.
Non posso migrare sotto altra piattaforma (Apache con PHP ad esempio o altro), devo per forza usare quello che ho in casa.
Chi mi sa dare una mano ?

Grazie infinite
Fabio

1 Risposte

  • Re: Aggiornamento di una selezione

    Sbaglio, o crei per ogni utente una connessione separata al database? Se questo fosse il caso potresti spostare il codice dell'apertura al file global.asa, ci sono poi delle procedure che riguardano la sessione in genere (non ricordo bene come si chiamano). Lì controlli se il database è già aperto, e se è vero, riutilizzi la connessione e incrementi un contatore globale. In questo modo puoi gestire anche migliaia di utenti con una sola connessione al database. Alla chiusura dell'ultima sessione (decrementi il contatore), chiudi anche il database.

    Ciò non toglie il fatto che un database con milioni di record ha comunque un bel peso ed è lento. Con variabili globali, puoi comunque aiutare il sistema, bloccando certe operazioni, oppure eseguirle in un secondo momento, tramite cosiddetti semafori.

    Comunque sia, la soluzione migliore al problema è scrivere un ActiveX che fa le operazioni al posto dello script, in quanto è molto più veloce, e la condivisione delle risorse funziona a meraviglia ..., oltre a dare anche un ulteriore livello di sicurezza e più flessibilità nella scelta delle risorse.

    E' un problema complesso ma non irrisolvibile, e la soluzione sta nel tenere basso le connessioni individuali al database, soprattutto con Access.

    Giovanni
    ---
    http://www.y2ksw.com/vbulletin
Devi accedere o registrarti per scrivere nel forum
1 risposte