2011-12-31 22 views
14

Sto provando a impostare la configurazione delle prestazioni ideale per MySQL e le risorse necessarie su un hosting condiviso.Che cosa significa veramente max_connections?

La mia domanda è, cosa significa veramente max_connections?

È il numero di richieste simultanee univoche fatte al server? Quindi, se ci sono due utenti, 1 con 1 scheda aperta e l'altra con 4 schede aperte ... e entrambi premono tutte le schede per ricaricare contemporaneamente, ci saranno 5 connessioni al DB MySQL? Di conseguenza, se confrontiamo questo scenario con: 10 persone con 2 schede e 31 persone con una scheda tutte che si aggiornano contemporaneamente allo stesso tempo ... con il nostro max_connections a 50, tutti verranno bloccati?

Il motivo che mi chiedo è perché voglio sparare per basso max_connections ad essere conservatori con risorse di memoria in quanto ho sempre visto il sito di andare in modalità di limitazione della CPU

Grazie per il vostro aiuto

risposta

13

Sì, ci è una connessione separata aperta per ogni pagina. Tuttavia, supponendo che non si stia facendo nulla di intensivo per il database, la connessione avrà vita breve e si chiuderà una volta che la pagina è stata servita al client.

Se si supera il numero massimo di connessioni, qualsiasi successivo tentativo di connessione avrà esito negativo.

+2

C'è una limitazione per l'impostazione del valore di 'max_connections'? Cosa succede se lo metto a 200.000 per esempio o anche di più? – antf

+1

Ogni connessione utilizza la memoria sia nel sistema operativo sia nel processo del server. Alla fine, colpirai un limite del numero massimo di connessioni che la tua scatola può gestire. Questo è abbastanza vecchio, ma il [problema C10K] (http://www.kegel.com/c10k.html) dà un'idea di alcuni se i problemi affrontano un numero elevato di connessioni a un singolo server. –

15

Il numero di collegamenti consentiti è controllato dalla variabile di sistema max_connections. Il valore predefinito è 151 per migliorare le prestazioni quando MySQL viene utilizzato con il server Web Apache. (In precedenza, il valore predefinito era 100.) Se è necessario supportare più connessioni, è necessario impostare un valore maggiore per questa variabile.

mysqld consente effettivamente a max_connections + 1 client di connettersi. La connessione aggiuntiva è riservata agli account che hanno il privilegio SUPER. Concedendo il privilegio SUPER agli amministratori e non agli utenti normali (che non dovrebbero averne bisogno), un amministratore può connettersi al server e utilizzare SHOW PROCESSLIST per diagnosticare i problemi anche se il numero massimo di client non privilegiati è connesso. Vedi Sezione 12.7.5.30, "MOSTRA ELENCO ELENCO PROCESSI".

Il numero massimo di connessioni che MySQL può supportare dipende dalla qualità della libreria di thread su una determinata piattaforma, dalla quantità di RAM disponibile, dalla quantità di RAM utilizzata per ciascuna connessione, dal carico di lavoro da ciascuna connessione e dalla risposta desiderata tempo. Linux o Solaris dovrebbero essere in grado di supportare da 500 a 1000 connessioni simultanee di routine e fino a 10.000 connessioni se sono disponibili molti gigabyte di RAM e il carico di lavoro da ciascuno è basso o il tempo di risposta è poco impegnativo. Windows è limitato a (tabelle aperte × 2 + connessioni aperte) < 2048 a causa del livello di compatibilità Posix utilizzato su tale piattaforma.

Potrebbe essere necessario aumentare il limite per i file aperti. Si veda anche la Sezione 2.5, "Installazione di MySQL su Linux", per come aumentare il limite del sistema operativo sul numero di handle che possono essere utilizzati da MySQL.

Da: MySQL 5.6 Reference Manual:: C.5.2.7 Too many connections