É ruim criar muitas tabelas temporárias mysql simultaneamente?

8

Preciso fazer uma análise estatística pesada para fornecer alguns dados aos usuários. Atualmente, eu pego os dados do mysql e os processo por meio de PHPmatrizes. Entretanto, as tabelas temporárias do mysql são muito melhores (extremamente mais eficientes e mais rápidas que as matrizes PHP; obviamente devido ao seu mecanismo).

Minha solução provisória é formar uma tabela temporária a cada solicitação (ou seja, conexão) para importar e processar os dados. No entanto, não tenho certeza se existe uma desvantagem em criar muitas tabelas temporárias simultaneamente?

Isso pode causar problemas para o servidor mysql? Ou posso usá-lo como uma alternativa para matrizes PHP em várias solicitações simultâneas?

Googlebot
fonte

Respostas:

6

Você deseja impedir a criação de tabelas temporárias o máximo possível: Impedir a cópia para a tabela temporária (sql)

Eles não funcionam bem na replicação do MySQL: Como os binlogs são atualizados para as tabelas temporárias do MySQL?

Como as tabelas temporárias são um fato da vida no mundo do DB, talvez seja necessário fazer algumas mudanças não-ortodoxas para acomodar sua existência.

Normalmente, o mysqld tem o hábito de colocar tabelas tmp dentro /tmpou onde quer que o tmpdir esteja configurado. Isso geralmente está em algum disco pobre e desavisado.

Uma alternativa interessante seria configurar um disco RAM e reconfigurar o tmpdir para usá-lo

PASSO 01: Criar um ponto de montagem para um disco RAM

mkdir /var/tmpfs

PASSO 02: Adicione o disco RAM ao / etc / fstab (16GB)

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

PASSO 03: Adicione esta linha ao /etc/my.cnf

[mysqld]
tmpdir=/var/tmpfs

PASSO 04: Habilite o disco RAM

Você pode executar um dos seguintes procedimentos:

  1. Apenas reinicie o servidor DB
  2. mount -t tmpfs -o size=16g none /var/tmpfs

Antes de fazer isso, verifique se você tem RAM suficiente

De uma chance !!!

RolandoMySQLDBA
fonte
2
As tabelas temporárias implícitas não têm impacto na replicação, seja SBR ou RBR. As tabelas temporárias explícitas enviam todas as DDLs pela conexão.
Rick James
4

"Muitas tabelas temporárias do mysql" - os possíveis problemas:

  • table_open_cache (e outros ajustáveis) - Você poderia (mas provavelmente não atingirá) algum limite
  • Ram inchaço - Você pode (mas não é provável) usar mais ram. Se isso leva à troca, isso é muito ruim.

Eu não me preocuparia com "muitos", a menos que você realmente tenha centenas de tabelas temporárias de uma só vez.

Quantos threads (SHOW PROCESSLIST; ignore 'Sleep') estão em execução ao mesmo tempo? Mesmo um sistema ocupado raramente tem mais de 10 ao mesmo tempo.

Para tabelas temporárias implícitas , vamos ver os SELECTs que as estão causando; pode ser possível redesenhar as consultas para evitar as tabelas temporárias.

Não gosto de usar um disco ram - retira a RAM de outras possibilidades de armazenamento em cache e corre o risco de atingir um limite rígido (o tamanho do disco).

Rick James
fonte