Newsgroup: it.lavoro.professioni.webmaster
Titolo: timeout...

 
         ciao ng.
allora: ho implementato un sistema piuttosto complicato per effettuare delle
registrazioni; raccolgo un bel mucchio di dati per ogni utente e ho circa
16000 utenti...
ho utilizzato MSSQL server come base di dati, IIS5 e asp classic
rispettivamente come server web e linguaggio di scripting.
beh... purtroppo capita che a più di qualche utente il server web vada in
timeout... (90 sec)
ho indicizzato al millimetro le tabelle su sql e ho evitato di utilizzare le
variabili di sessione in ASP poichè sapevo che occupavano un sacco di
memoria.
ma non ho risolto il problema...
che debbo fare per migliorare le prestazioni? passare ad altri linguaggi?
stored procedure?
insomma... se qualcuno ha qualche consiglio ...
ciao
anto
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/



il server che potenzialità ha? Il db risiede sulla stessa macchina insieme 
al webserver?
ciao Daniel
http://www.gizax.it


 



a questo punto mi viene da dire.. abbandona tutto ciň che č Microzozz :))
e passa su un bel server apache 2.0 con un bellissimo e free mysql su linux
linguaggio php, naturalmente non so cosa ti comporta tutto questo 
incasinamento.
Se proprio non puoi prova a fare dei test di carico pesanti sul server o a 
provare a
scaricarti ottimizzatori di tabelle.
ciao Daniel
http://www.gizax.it

 scaricarti ottimizzatori di tabelle.
dove posso trovare dei tool per il primo test e gli ottimizzatori?
ciao
anto


 vada in timeout... (90 sec)
a mio avviso un linguaggio d scripting per una gestione cosi' complessa è
una follia...
per ottimizzare, ovviamente devi passare alle stored procedure, ma non
basta, se il sistema usa in modo intensivo il DB occorre utilizzare delle
tecniche di caching... che nel caso di classic asp devi implementare tu, in
asp.net
 ci sono delle classi che servono proprio a questo.
In ogni caso una buona struttra per un progetto web dovrebbe prevedere
almeno 3 livelli... logica, data layer, presentation layer... in questo modo
puoi intervenire in molteplici modi sulle prestazioni e sulla scalabilità...
-- 
Lino Mari
http://www.ebow.it
 - e-business on web!
http://www.ebow.it/blog/
 - Mktg Log
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - d2D004

> registrazioni; raccolgo un bel mucchio di dati per ogni utente e ho circa
Lo sai che se fai profilazione dell'utente devi notificare il 
trattamento al garante per la protezione dei dati personali? Lo sai che 
se non lo fai rischi tantissimo, da un minimo di 10.000 euro di multa 
fino a 60.000 euro?!?
Io avevo un progetto che prevedeva un minimo di profilazione tipo 
interessi, livello di istruzione ecc e ho tolto tutta la parte di 
profilazione proprio per non incorrere in tutti i doveri ed i rischi 
relativi.

memoria.
Io non ho capito se ad andare in timeout è lo script o la query di
inserimento in SQL.
Nel primo caso vedi di rivedere un attimo l'applicazione perchè uno
script che ci mette + di 90 secondi non è sicuramente qualcosa di
bello...
Nel secondo caso il problema probabilmente sono proprio gli indici...
Una tabella con 300 indici è molto veloce nelle ricerche ma lentissima
negli aggiornamenti (deve ricostruirsi i 300 indici...).
16000 record per SQL server sono una bazzecola... ho tabelle con
milioni di record che non fanno una piega.
Se il problema è questo (gli indici) potresti tentare una soluzione
del genere:
Ti crei una tabella newusers uguale a users ma senza indici.
Ti fai un programmino che, di notte, fa :
- drop degli indici su users
- trasferisce i dati da newusers a users
- ricostruisce gli indici su users
- cancella i dati da newusers
Ciao,
Alberto

memoria.
Io non ho capito se ad andare in timeout è lo script o la query di


 - cancella i dati da newusers
... interessante...
potrebbe essere una soluzione..
grazie


 a questo punto mi viene da dire.. abbandona tutto ciň che č Microzozz :))
ed ecco che come sempre spunta fuori il guru che da la colpa a ms quando non 
sa usare il software
-- 
ITHost (your host company)
Technical Manager
C. Paparelli (MCSE,MCSD,MCDBA)
http://www.ithost.ch

 che lavorano con sql.
aspe come hai un sacco di istruzioni ado????
non mi dire che per gli update apri un recordset e poi con un loop passi 
tutti i record e con i metodi edit e update apporti le modifiche, ti prego 
dimmi che non stai lavorando cosě !!!!!!!!!!
Per modificare un record si usa "UPDATE miaTABELLA SET campo='pippo' WHERE 
PK=123" per la cancellazione si utilizza "DELETE FROM tabella WHERE PK=123" 
e per l'inseriemento si utilizza "INSERT INTO tabella (CAMPO1, CAMPO2) 
VALUES ('valore1','valore2')"
Scordati tutti i metodi ado e utilizza solo open recordset, execute e close 
tutti gli altri metodi non vanno utilizzati (o meglio vanno usati con 
parsimonia)


 scalabilità...
ok su questo non si discute ma mi spieghi a che serve il caching se come ha 
detto "anto" deve gestire i dati di x utenti e di fatto le operazioni 
saranno sempre SELECT, UPDATE, INSERT e DELETE pertanto da buon dba me ne 
frego della cache e creo le mie sp ad hoc in modo da minizzare il carico di 
mssql e ho la buona abitudine di aprire un connessione, eseguire 
l'operazione e chiudere subito dopo la connessione.
Per "anto" apri Profiler di mssql e inizia a identificare tutte le 
operazioni TSQL che impiegano più di 200 ms una volta monitorato il server 
per almeno 24 a regime normale, analizza il trace generato dal profiler e 
inizia a convertire tutte le richieste batch in stored procedure, e mentre 
che crei le sp ottimizzale usando gli indici.
Se il db è perfettamente ottimizzato e performante e risulta ancora lento 
allora con perfomance monitor individua eventuali colli di bottiglia nella 
ram o negli hard disk ev. modifica la struttura dei database fisici 
separando gli indici dai dati e dai db di sistema utilizzando hard disk 
diversi ed ev. in raid
Consiglio la lettura dell'articolo architec.chm::/8_ar_da2_9sab.htm dal BOL


 non sa usare il software
senti mr. "io so tutto" se non l'avessi capito la mia era una battuta e cmq 
sei OT.
perciň spegniti per sempre.
Daniel
http://www.gizax.it

 perciò spegniti per sempre.
adesso esageriamo un minimo di educazione e cerca di trattare le altre 
persone con rispetto ed educazione e se proprio vuoi fare l'offeso la tua 
risposta oltre ad essere provocatoria è completamente inutile in quanto non 
risolvi il problema di "anto"


 a questo punto mi viene da dire.. abbandona tutto ciň che č Microzozz :))
lo vedi che ci sono gli smile?? no mi sembra che tu non sappia leggere a 
questo
punto
ehm ah proposito per curiositŕ sono andato sul tuo sito e ho scoperto con
grande piacere che gli hosting plan che offri sono tutti Asp .Net
adesso capisco tutto...
ciao mr. MS

 ciao mr. MS
ehm non hai capito molto, comunque per č uguale stanotte dormo lo stesso ps 
ricordati che č meglio conoscere bene 1 cosa che non saperne 30 male


 ps ricordati che č meglio conoscere bene 1 cosa che non saperne 30 male
waaz, quello che dico sempre pure io....
bah :|:|:| 




 ciao mr. MS
E sapessi quante cose si scoprono guardando degli header !
X-Newsreader: Microsoft Outlook Express 6.00.2900.2180
Kombatti il monopolio, sii l33t h3x0r.
-- 
checking for life_signs in -lKenny... no
	Oh my god, make (1) killed Kenny ! You, bastards !
nicholas_wieland-at-yahoo-dot-it

 con grande piacere che gli hosting plan che offri sono tutti Asp .Net
finalmente uno serio!


 connessione.
questa è la norma... ma spesso le connessioni sono troppe e contemporanee,
preferisco che le select ripetute spesso (se i dati non sono troppi),
vengano cachate per alcuni minuti ed eseguire le query in memoria.



 


 "parsimonia" mi sai dare una motivazione?
un motivo banale... per eseguire una insert o un update come credi che lo
dicano al DB? devono prima tradurre in SQL no? quindi un passaggio in più...



well ...
allora, io ho delle pagine che fanno partire delle sub come la seguente:
'sub fele
'sql="classi_ele"
'rs.open sql, cn
' for i=1 to request.form("c2")
' if i<=9 then
' rs.addnew("codice_classe")=cod_ele&"0"&i
' else
' rs.addnew("codice_classe")=cod_ele&i
' end if
' if request.form("info")="on" then
' if request.form("ic2"&i&"")=var1 or request.form("ic2"&i&"")=var2 then
' rs.update("info")= 0
' rs.update("acquisizione"), request.form("ic2"&i&"")
' end if
' end if
' rs.update("meccanografico"), mecc
' rs.update("livello"), 2
' rs.update("sezione")= request.form("sezc2"&i&"")
' rs.update("numero_studenti")= request.form("nstc2"&i&"")
' rs.update("sede")= request.form("sedc2"&i&"")
' if (request.form("dvc2"&i&"")<>"Non presenti") then
' rs.update("dis_vis")= request.form("dvc2"&i&"")
' end if
' if (request.form("dsac2"&i&"")<>"Non presenti") then
' rs.update("dsa")= request.form("dsac2"&i&"")
' end if
' next
' for i=1 to request.form("c4")
' a=40+i
' rs.addnew("codice_classe")=cod_ele&a
' if request.form("info")="on" then
' if request.form("ic4"&i&"")=var1 or request.form("ic4"&i&"")=var2 then
' rs.update("info")= 0
' rs.update("acquisizione"), request.form("ic4"&i&"")
' end if
' end if
' rs.update("meccanografico"), mecc
' rs.update("livello"), 4
' rs.update("sezione")= request.form("sezc4"&i&"")
' rs.update("numero_studenti")= request.form("nstc4"&i&"")
' rs.update("sede")= request.form("sedc4"&i&"")
' if (request.form("dvc4"&i&"")<>"Non presenti") then
' rs.update("dis_vis")= request.form("dvc4"&i&"")
' end if
' if (request.form("dsac4"&i&"")<>"Non presenti") then
' rs.update("dsa")= request.form("dsac4"&i&"")
' end if
' next
'rs.close
'end sub
sono proprio queste sub a rallentare il tutto...
domanda (per voi) idiota: come faccio a passare i valori della request.form
ad una stored procedure?
grazie
anto


 request.form ad una stored procedure?
le stored supportano parametri di input e output... e oltretutto possono
essere tipizzate... il che rende il tutto anche più sicuro da attacchi sql
injection...


 ha scritto nel messaggio 
news:81Z208Z36Z87Y1...@usenet.libero.it...

creando un stored procedure
create procedure nomeprocedura
(
    @par1 int,
    @par2 int,
    @par3 int,
)
as
insert into tabella (campo1, campo2, campo3) values (@par1, @par2, @par3)
nel tuo codice asp richiami unicamente
myRecSet.Execute "nomeprocedura " & par1 & ", " & par2 & ", " & par3
ed hai finito
