Sante Caserio
pubblicato più di 2 anni fa

MariaDB: la gestione dei thread

L’articolo descrive caratteristiche e vantaggi dell’approccio per la gestione dei Thread di MariaDB


In MySQL viene creato un thread per ogni client connesso con il server: questo metodo si chiama One Thread Per Connection. Tutte le istruzioni SQL lanciate da una data connessione vengono quindi gestite dallo stesso thread. Nell’ambito dei siti web, dove MySQL è più usato, questa soluzione non è però ottimale. Infatti le istruzioni, per la maggioranza, sono inserimenti, modifiche o cancellazioni di un solo record, oppure SELECT molto semplici, che spesso estraggono un’unica riga. Istruzioni di questo genere potrebbero essere eseguite in modo concorrente (in contemporanea) da diversi thread. Inoltre un thread aperto, nell’intervallo tra una richiesta e l’altra, rimane inutilizzato, sprecando inutilmente risorse che potrebbero essere usate per rispondere alle esigenze di altri client.

Ecco perchè in MariaDB vi è un nuovo metodo per gestire i thread, chiamato Pool Of Threads. Esso prevede un numero fisso di thread aperti che si dividono le istruzioni SQL da eseguire, indipendentemente da quale client le abbia inviate, in modo in maniera da ottimizzare le performance.

Abilitare il Pool Of Threads

Anche in MariaDB, il modo per gestire i thread utilizzato per default è One Thread Per Connection. Per utilizzare Pool Of Threads occorre utilizzare una versione non compilata del programma e, al momento di eseguire configure, specificare il parametro –with-libevents.

Anche così, il metodo predefinito sarà One Thread Per Connection. Per lanciare il server mysqld utilizzando Pool Of Threads, si usa il seguente parametro:

1mysqld --thread-handling=pool-of-threads

Se si vuole esplicitamente indicare come metodo One Thread Per Connection (non necessario):

1mysqld --thread-handling=one-thread-per-connection

Specificare le dimensioni del pool

E’ anche possibile specificare quanti thread devono essere presenti nel pool. Il valore predefinito è 20. Lo si può modificare servendosi del seguente parametro:

1mysqld --thread-handling=pool-of-threads --thread-pool-size=15

Il valore ottimale dipende dalle caratteristiche delle applicazioni che si connettono al database e la sua ricerca può richiedere diversi test.

La porta extra

Cosa accadrebbe se tutti i thread rimanessero in attesa che un LOCK venga rilasciato, o se stessero eseguendo un’istruzione molto lunga? In questo caso non sarebbe possibile stabilire una nuova connessione finché un thread non si liberi; di conseguenza non sarebbe nemmeno possibile tentare di risolvere il problema con i comandi SHOW PROCESSLIST e KILL.

Per consentire la risoluzione dei problemi, se il server viene lanciato con il metodo Pool Of Threads, esiste una porta extra alla quale ci si può connettere con i vecchio metodo One Thread Per Connection.

Per default questa porta è la numero 0. Per modificare questo valore:

1mysqld --thread-handling=pool-of-threads --extra-port=2000

Per default viene accettata una sola connessione sulla porta extra, perchè è sufficiente per la risoluzione dei problemi. E’ però possibile dire al server di accettare più connessioni:

1mysqld --thread-handling=pool-of-threads --extra-port=2000 --extra-max-connections=3

In questo modo sarà possibile effettuare una o più connessioni con il metodo One Thread Per Connection, per eseguire operazioni che risultano più performanti in questa modalità; bisogna però avere sempre cura di lasciare una connessione sempre libera per la risoluzione dei problemi.

Link Utili

Sito di MariaDB: http://askmonty.org/
Introduzione ai Thread Posix: http://a2.pluto.it/a2738.htm#almltitle5117

Condividi su:

Esprimi un voto:

  • Current rating: 0.0/5
  • 1
  • 2
  • 3
  • 4
  • 5

Argomenti chiave:

Ultimi commenti Ultimi commenti

Esegui il Login oppure registrati per scrivere un commento.
Cerca nel sito...
Ultime recipes

Un utilissimo tool di shell che effettua un dettagliato e comodo report su MySQL MySQL Report un tool di shell per tenere tutto sotto controllo

Un utilissimo tool di shell che effettua un dettagliato e comodo report su MySQL


Vai alla recipe

Un utilissimo tool per sniffare il traffico Client/Server TCP/IP di MySQL MySQLSniffer sniffare il traffico TCP di MySQL

Un utilissimo tool per sniffare il traffico Client/Server TCP/IP di MySQL


Vai alla recipe

Verificare l'integrità, riparare gestire chiavi e memoria di tabelle MyISAM attraverso myisamchk riparare file MyISAM

Verificare l'integrità, riparare gestire chiavi e memoria di tabelle MyISAM attraverso il file myisamchk


Vai alla recipe

Un tool per comprimere le tabelle MyISAM fino a oltre il 50% myisampack comprimere file MyISAM

Un tool per comprimere le tabelle MyISAM fino a oltre il 50%


Vai alla recipe

mysqlshow le info di base sui database, tabelle e colonne senza utilizzare alcun mysqlshow visualizzare le informazioni sul database MySQL

mysqlshow le info di base sui database, tabelle e colonne senza utilizzare alcun client


Vai alla recipe

Utilizzando UNION / UNION ALL su campi int unsigned zerofill,
ho notato che MysqlUNION / UNION ALL su campi int unsigned zerofill. di DebUsr
Vai al tip

Utilizzo di funzioni come alias di campo tramite l'impiego di prepared statementReport con alias di campo dinamici di john_revelator
Vai al tip

Può capitare che sia necessario eseguire un dump di database in formato Comma SeparatedEsecuzione dump in formato CSV (tabelle in engine MyIsam esportate in formato CSV) di ghigomatto
Vai al tip

E' possibile eseguire le query SQL contenute in un file di testo. Questo è utileEseguire le query da un file di testo di Sante Caserio
Vai al tip

Se vogliamo fare il backup di tutti i database con mysqldump, e ne abbiamo parecchiFare il backup di tutti i database di Sante Caserio
Vai al tip

Salve, dopo tante storie ho studiato il php e mysql .. . che in questo forum parlavo php e campo mysql timestamp di gigi Vai al topic

ciao a tutti ho creato un forum su aruba ma non so come farlo visualizzare nel mio aruba di albertodiprima Vai al topic

Salve a tutti gente, questo è il mio primo post su questo forum e questo a causa Problema Gravissimo con AutoIncrement di stefanoadsl Vai al topic

Salve! Mi presento, mi chiamo Adriano e sono uno studente di ingegneria informatica Problema Trigger di Xanakro Vai al topic

Ciao a tutti!
Volevo chiedere una informazione.
Ho una query che lanciata la prima Query Eseguita più volte di OltreLeStelle Vai al topic