Domanda

Ho la replica di MySQL attualmente in corso tra i due maestri in modo bidirezionale, uno in un centro dati a livello locale, un altro corso su Amazon EC2.

Tutto sembra funzionare normalmente replica saggio, nessun problema di per sé, ad eccezione per la query occasionale che causa una collisione, ma questi sono pochi e lontani tra loro. Recentemente ho creato mysql-proxy per tentare di bilanciamento del carico i due server, il bilanciamento del carico veramente calci in dopo che la macchina locale riceve 40 o più connessioni a quel punto le successive connessioni al database vengono mescolate fuori alla macchina EC2.

Una cosa che abbiamo notato di recente è che procura mysql ci informa che ci sono 41 collegamenti e poi iniziare il suo bilanciamento. Tuttavia quando mi collego al computer locale e fare un SHOW PROCESSLIST; può solo fornire me con 30 connessioni.

Qualcuno ha qualche idea del perché questo forse?

In aggiunta a che, a seguito del rilascio del comando SHOW PROCESSLIST; ho notato che ci sono un gran numero di query in esecuzione su entrambe le macchine che lo stato sono stati eseguiti al di sopra di 5000 secondi. Sono abbastanza sicuro che queste sono domande "zombie", ma Qualcuno sa il motivo per cui sono stati creati, in primo luogo?

FYI Stiamo eseguendo MySQL versione 5.1.54 sulle ultime versioni di Ubuntu e Debian.

Tutte le idee sarebbe estremamente utile.

[Addendum]

Si scopre che non usiamo mysql_pconnect e sono infatti utilizzando le librerie mysqli. Ho ancora stato in grado di scoprire perché questo accada e riferirà una volta scopro.

È stato utile?

Soluzione

Sono contro la scrittura ad entrambi i master in una configurazione dual-master. Ci sono troppe cose che possono andare male, e possono essere disordinato di correzione -. AUTO_INCREMENTs, altre chiavi duplicate, etc

centinaia di connessioni "sleep" è praticamente alcun impatto sul server, in modo da limitare al 40 non è utile. 10 o più attiva connessioni (non-sonno) può essere un problema. In tal caso vorrei guardare le query. Di solito l'ottimizzazione delle query è la migliore risposta.

Si noti inoltre, che ogni scrittura (INSERT, UPDATE, ecc) che viene fatto su un Master deve essere fatto su tutti gli altri padroni e schiavi. Quindi, non si può davvero "diffusione", scrive in giro.

Se si dispone di processi che non solo legge (SELECT), poi si dovrebbe andare a Schiavi e / o il Maestro di backup, non la vivo, scrivibile, Maestro. Questo aiuterà.

Essere consapevoli del problema "scrittura critica". Esempio: un utente inserisce un commento nel blog, poi guarda i suoi commenti, ma manca. Ciò può accadere se la scrittura è andato a una macchina, ma la lettura ha colpito un altro, e la replica è "dietro".

(I miei commenti si applicano a tutte le versioni, e tutte le API, non solo 5.1 e mysqli di PHP.)

I stare lontano da mysql_pconnect (e altri meccanismi di connessione pooling). avvio connessione / teardown è molto veloce in MySQL. connessioni in pool possono avere problemi con @variables, modalità di transazione, sql_modes, ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top