475 messaggi dal 18 febbraio 2002
www.dimsolutions.it
Ho un server WIN2003 con queste caratteristiche:

Intel(R) Xeon(R) CPU 3040 @ 1.86GHz EM64T Family 6 Model 15 Stepping 2 ~1867MHz 2Gb RAM

Ho installato sul server un 25 domini circa.. tutte le applicazioni ivi residenti sono ASP.NET 1.1 + MYSQL 5, il sito con più accessi è circa 110utenti giornalieri il resto una ventina di media.
I database MySQL sono composti da un 30-50 tabelle (a seconda della versione) con un centinaio di record nella tabella più usata.

Per le connessioni al db uso il Connector rilasciato da MySql per .NET

Il server in alcuni orari della giornata ha alcuni picchi (per ora non frequenti nell'ordine di un paio di volte a giorno) in cui comincia a rallentare (la CPU uso 50%) per poi tornare ad 1-2% di uso CPU, ... e ora mi sto interrogando sulle cause.

Possibile che un server dedicato venga saturato da una situazione del genere? è l'accoppiata ASp.NET + MYSQL che degrata in questo modo le performance?
Modificato da diego78 il 24 agosto 2011 10.20 -

Telesoccorso Lineaperta: Servizi di Telesoccorso

Sito Immobiliare per la tua agenzia
5.610 messaggi dal 09 febbraio 2002
Contributi
ciao,
nonostante il server sia ormai di qualche anno fa, penso che sia più che adeguato a sostenere il traffico che riporti.


è l'accoppiata ASp.NET + MYSQL che degrata in questo modo le performance?

mmh, no, io per lo meno non ho mai sperimentato rallentamenti la cui causa fosse MySql.

Non ti so dare una risposta sul perché di questo comportamento, ma puoi "investigare" la cosa in due modi:
  • Abilita il general_log di MySql. Questo servirà a tenere traccia di tutte le query eseguite. Potrai consultarle dalla tabella general_log del database di sistema "mysql". Leggi qui come abilitare il general_log. Quando il consumo di CPU sale, vai a vedere quali query sono state eseguite in quel frangente. Copiale, e poi eseguile per renderti conto se sono query lente che usano molta cpu. Anteponendo la parola chiave EXPLAIN alla query, ti aiuterà a capire se la query può essere ottimizzata aggiungendo qualche indice.
  • Usa il Performance Monitor di windows per capire da dove si origina l'alto consumo di CPU. Leggi qui per una guida passo-passo.


ciao,

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!
475 messaggi dal 18 febbraio 2002
www.dimsolutions.it
il server purtroppo è in modalità MANAGED per cui mi è un pò difficile fare quello che mi hai suggerito

posso accedere solo tramite il pannelo PLESK.

Nel pannello dedicato a MySQL ho trovato però delle informazioni interessanti evidenziate in rosso da phpmyadmin:che riporto:

Innodb_buffer_pool_reads: 28 k
Il numero di richieste logiche che InnoDB non può soddisfare dal buffer pool e che devono fare una lettura di una pagina singola.

Innodb_row_lock_waits: 2
Il numero di volte che un row lock ha dovuto attendere.

Handler_read_rnd: 14 k
Il numero di richieste per leggere una riga basata su una posizione fissa. Questo valore è alto se stai facendo molte richieste che richiedono un ordinamento dei risultati. Probabilmente hai molte query che che richiedono a MySQL di leggere l'intera tabella oppure ci sono dei joins che non usano le chiavi correttamente.

Handler_read_rnd_next: 790 k
Il numero di richieste per leggere la riga successiva in un file di dati. Questo valore è alto se stai facendo molte scansioni della tabella. Generalmente è un segnale che le tue tabelle non sono correttamente indicizzate, o che le query non sono state scritte per trarre vantaggi dagli indici che hai.

Created_tmp_disk_tables: 3,943
Il numero delle tabelle temporanee create automaticamente sul disco dal server mentre esegue i comandi. Se il valore Created_tmp_disk_tables è grande, potresti voler aumentare il valore tmp_table_size, per fare im modo che le tabelle temporanee siano memory-based anzichè disk-based.

Key_reads: 84
Il numero di letture fisiche dal disco di un blocco chiave. Se Key_reads è grande allora il valore key_buffer_size è probabilmente troppo piccolo. IIl rapporto di cache miss rate può essere calcolato come Key_reads/Key_read_requests.

Select_full_join 298:
Il numero di joins che non usano gli indici. (Se questo valore non è 0, dovresti controllare attentamente gli indici delle tue tabelle.)
Modificato da diego78 il 25 agosto 2011 15.20 -

Telesoccorso Lineaperta: Servizi di Telesoccorso

Sito Immobiliare per la tua agenzia
5.610 messaggi dal 09 febbraio 2002
Contributi
Plesk ha scritto:
  • "Probabilmente hai molte query che che richiedono a MySQL di leggere l'intera tabella oppure ci sono dei joins che non usano le chiavi correttamente."
  • "Generalmente è un segnale che le tue tabelle non sono correttamente indicizzate"
  • "dovresti controllare attentamente gli indici delle tue tabelle."



Questi indizi puntano verso la mancanza di indici, ma su quel server hai non uno, ma 25 siti e capire quale query sta causando il problema potrebbe implicare una ricerca abbastanza lunga.
Tu da Plex non hai modo di vedere il dettaglio di quegli indicatori, così da sapere quali sono le query?

Ipotizziamo che una pagina esegua una query così:
SELECT * FROM clienti INNER JOIN ordini ON clienti.IDCliente = ordini.IDCliente


Se la colonna IDCliente della tabella ordini non ha un indice, MySql sarà costretto ad esaminare ogni volta tutti i record della tabella, alla ricerca di quelli da unire a ciascun record dalla tabella clienti. E' come cercare una specifica parola in un libro: devi per forza sfogliarlo tutto perché non puoi sapere in che pagina/e quella parola compare.

Quindi puoi migliorare tantissimo le prestazioni aggiungendo un indice, ma non è una cosa si fa a caso; bisogna prima capire quali sono le query "problematiche". Se non puoi leggere le query, puoi farti un'idea navigando nei siti ospitati nel server. Noti particolari rallentamenti quando visiti una data pagina o esegui una certa operazione?


Created_tmp_disk_tables: 3,943
Il numero delle tabelle temporanee create automaticamente sul disco dal server mentre esegue i comandi.


Questo potrebbe essere causato da subqueries, tipo:
SELECT * FROM clienti WHERE IDCliente IN (SELECT IDCliente FROM ordini WHERE Totale>1000)


Ho semplificato, ma ci potrebbero realmente essere query di questo genere la cui esecuzione è lenta e che vengono rallentante ulteriormente se ci sono diversi utenti che accedono contemporaneamente.

ciao,
Modificato da BrightSoul il 25 agosto 2011 16.23 -

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!
475 messaggi dal 18 febbraio 2002
www.dimsolutions.it
diciamo che i 25 siti sono alla fine 3 applicazioni diverse ripartite per 25 clienti.

Ho preso in analisi le query del FRONT dell'applicazione del sito con maggiori accessi (intorno ai 100 giornalieri) e ho potuto constatare come gli indici potevano essere inseriti in quasi tutte le tabelle coinvolte nelle query più pesanti (esempio il catalogo), praticamente avevo quasi sempre solo la chiave primaria.

Da domani riporterò l'ottimizzazione sui siti più trafficati e terrò in test per qualche giorno il livello della CPU

Ora con gli indici solo sul sito più trafficato non è cambiato nulla tra le 17.45 e le 18 il livello della CPU si è alzato e i siti sono rimasti bloccati per qualche minuto... ora è ripartito tutto

Telesoccorso Lineaperta: Servizi di Telesoccorso

Sito Immobiliare per la tua agenzia
475 messaggi dal 18 febbraio 2002
www.dimsolutions.it
Dopo aver fatto le modifiche agli indici su tutti i db ho monitorato l'uso di CPU e memoria per l'intera giornata e come al solito alle 17.15 la CPU e la memoria usata sono schizzati per qualche minuto e ho notato questa cosa nella lista processi di MySQL:

23444 database1 localhost:1350 database1_db Sleep 360 NULL
23445 database1 localhost:1351 database1_db Sleep 360 NULL
23446 database1 localhost:1352 database1_db Sleep 360 NULL
23447 database1 localhost:1353 database1_db Sleep 360 NULL
23448 database1 localhost:1354 database1_db Sleep 360 NULL
23457 ioservice_db localhost:1368 ioservice_db Sleep 223 NULL

praticamente per lo stesso database erano aperti 5 Thread mentre normalmente è 1 solo thread per ogni database.

Quindi cosa significa che ho avuto 5 accessi contemporanei nello stesso secondo (360 il tempo indicato) e il db è andato in blocco?

mi sembra proprio strana la cosa... e la cosa che mi sta rattristendo è che sto passando tutta luglio/agosto per questo problema del cavolo..

Telesoccorso Lineaperta: Servizi di Telesoccorso

Sito Immobiliare per la tua agenzia
5.610 messaggi dal 09 febbraio 2002
Contributi
diego78 ha scritto:
e la cosa che mi sta rattristendo è che sto passando tutta luglio/agosto per questo problema del cavolo..


capisco... ma è del tutto normale se non hai la possibilità di conoscere a fondo le possibili cause. Io proverei a cambiare strategia:
  • Se possibile, chiedi a chi ti gestisce il server di darti un'opinione sul problema che stai riscontrando
  • Predisponi un tuo PC/server quanto più simile a quello di produzione, su cui installerai tutti i siti. Poi, scarica un tool tipo WCAT per simulare molti accessi contemporanei e cercare, così, di riprodurre il problema. Usa il general_log di MySql e il Performance Monitor di Windows per capirne la fonte.



Quindi cosa significa che ho avuto 5 accessi contemporanei nello stesso secondo (360 il tempo indicato) e il db è andato in blocco?


Ma 5 accessi contemporanei sono niente per il server, ammesso che le applicazioni funzionino correttamente. Che versione di Windows server hai in produzione?

Dato che ci sono 5 connessioni in sleep da 360 secondi, per me è più probabile che sia stata l'applicazione ad aprire 5 connessioni, piuttosto che 5 utenti contemporanei. E' possibile che esista un bug nell'applicazione che gli fa aprire più di una connessione contemporaneamente?

Inolte, nelle tue connection string, per caso hai impostato un Max Pool Size=5 ?

Che succede esattamente quando i siti si bloccano? Si verifica un'eccezione oppure non succede nulla?

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!
475 messaggi dal 18 febbraio 2002
www.dimsolutions.it

Ma 5 accessi contemporanei sono niente per il server, ammesso che le applicazioni funzionino correttamente. Che versione di Windows server hai in produzione?


Windows 2003 SP2


Dato che ci sono 5 connessioni in sleep da 360 secondi, per me è più probabile che sia stata l'applicazione ad aprire 5 connessioni, piuttosto che 5 utenti contemporanei. E' possibile che esista un bug nell'applicazione che gli fa aprire più di una connessione contemporaneamente?


Guarda, ieri sera ho provato a simulare manualmente 3 connessioni contemporanee con 2 PC e Cellulare sul sito che ha maggior traffico (110 accessi giornalieri) e la CPU usata è arrivata tra il 20-30%... quindi questo mi fa supporre che siano gli accessi contemporanei che creano problemi... forse è l'oggetto netConnector per .NET 1.1 (non esiste una versione aggiornata da molto tempo) che crea questo collo di bottiglia con MySQL decrementando le prestazioni.

Sto pensando a questo punto di installare SQL EXPRESS sulla macchina. Che dici con queste caratteristiche del server (Dual core con 2gb di RAM) ci sono problemi per far girare il servizio SQL SERVER?


Inolte, nelle tue connection string, per caso hai impostato un Max Pool Size=5 ?


No


Che succede esattamente quando i siti si bloccano? Si verifica un'eccezione oppure non succede nulla?


Si bloccano (vanno in loop sulla richiesta) tutti i siti presenti sul server la CPU usata sale al 50% e la RAM disponibile viene quasi tutta consumata, dopo qualche minuto
CPU e RAM tornano sulla normalità e i siti tornano visibili. Nessuna eccezione.
Modificato da diego78 il 27 agosto 2011 13.17 -

Telesoccorso Lineaperta: Servizi di Telesoccorso

Sito Immobiliare per la tua agenzia

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
Community
Ultimi messaggi
UTENTI ONLINE
    In primo piano

    I più letti di oggi

    Media
    In evidenza
    MISC