È male creare contemporaneamente molte tabelle temporanee mysql?


8

Devo fare pesanti analisi statistiche per fornire alcuni dati agli utenti. Attualmente, acquisisco i dati da mysql e li PHPelaboro tramite array. Tuttavia, le tabelle temporanee mysql sono piuttosto migliori (estremamente più efficienti e veloci degli array PHP; ovviamente a causa del loro meccanismo).

La mia soluzione provvisoria è quella di formare una tabella temporanea su ogni richiesta (ad es. Connessione) per importare ed elaborare i dati. Tuttavia, non sono sicuro se esiste uno svantaggio per la creazione contemporanea di più tabelle temporanee?

Questo può creare problemi per il server mysql? Oppure posso usarlo come alternativa agli array PHP in numerose richieste simultanee?

Risposte:


6

Vuoi evitare di creare tabelle temporanee il più possibile: Impedisci la copia in tabelle temporanee (sql)

Non funzionano bene nella replica di MySQL: come vengono aggiornati i binlog per le tabelle temporanee di MySQL?

Poiché le tabelle temporanee sono un dato di fatto nel mondo DB, potrebbe essere necessario apportare alcune modifiche non ortodosse per adattarle alla loro esistenza.

Normalmente, mysqld ha l'abitudine di posizionare le tabelle tmp all'interno /tmpo ovunque sia configurato tmpdir . Di solito è su un povero disco ignaro.

Un'alternativa interessante sarebbe quella di installare un disco RAM e riconfigurare tmpdir per usarlo

PASSAGGIO 01: creazione di un punto di montaggio per un disco RAM

mkdir /var/tmpfs

PASSAGGIO 02: Aggiungi il disco RAM a / etc / fstab (16GB)

echo "none   /var/tmpfs              tmpfs   defaults,size=16g        1 2" >> /etc/fstab

PASSAGGIO 03: aggiungere questa riga a /etc/my.cnf

[mysqld]
tmpdir=/var/tmpfs

PASSAGGIO 04: abilitare il disco RAM

È possibile effettuare una delle seguenti operazioni:

  1. Basta riavviare il DB Server
  2. mount -t tmpfs -o size=16g none /var/tmpfs

Prima di farlo, assicurati di avere abbastanza RAM

Provaci !!!


2
Le tabelle temporanee implicite non hanno alcun impatto sulla replica, sia SBR che RBR. Le tabelle temporanee esplicite inviano tutti i DDL attraverso il filo.
Rick James,

4

"Molte tabelle temporanee mysql" - I potenziali problemi:

  • table_open_cache (e altri parametri sintonizzabili) - Potresti (ma non è probabile che tu) raggiungere un limite
  • Ram gonfio - Potresti (ma non è probabile che tu) usare più ram. Se questo porta allo scambio, è davvero un male.

Non mi preoccuperei di "molti" a meno che tu non abbia davvero centinaia di tabelle temporanee contemporaneamente.

Quanti thread (SHOW PROCESSLIST; ignora 'Sleep') sono in esecuzione contemporaneamente? Anche un sistema occupato raramente ne ha più di 10 contemporaneamente.

Per le tabelle temporanee implicite , vediamo i SELECT che li stanno causando; potrebbe essere possibile riprogettare le query per evitare le tabelle temporanee.

Non mi piace usare un ram-disk - allontana la RAM da altre possibilità di memorizzazione nella cache e corre il rischio di raggiungere un limite rigido (la dimensione del disco).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.