Est-il mauvais de créer plusieurs tables temporaires mysql simultanément?

8

Je dois effectuer une analyse statistique approfondie pour fournir des données aux utilisateurs. Actuellement, j'attrape les données de mysql et les traite via des PHPtableaux. Cependant, les tables temporaires mysql sont bien meilleures (extrêmement plus efficaces et plus rapides que les tableaux PHP; évidemment en raison de leur mécanisme).

Ma solution provisoire consiste à former une table temporaire à chaque demande (c'est-à-dire connexion) pour importer et traiter les données. Cependant, je ne sais pas s'il y a un inconvénient à créer de nombreuses tables temporaires simultanément?

Cela peut-il poser problème pour le serveur mysql? Ou puis-je l'utiliser comme alternative aux tableaux PHP dans de nombreuses requêtes simultanées?

Googlebot
la source

Réponses:

6

Vous voulez éviter autant que possible de créer des tables temporaires: empêcher la copie dans la table temporaire (sql)

Ils ne fonctionnent pas bien dans la réplication MySQL: comment les binlogs sont-ils mis à jour pour les tables temporaires MySQL?

Étant donné que les tables temporaires sont une réalité de la vie dans le monde DB, vous devrez peut-être apporter des modifications peu orthodoxes pour s'adapter à leur existence.

Normalement, mysqld a l'habitude de placer des tables tmp dans /tmpou partout où tmpdir est configuré. C'est généralement sur un mauvais disque sans méfiance.

Une alternative intéressante serait de configurer un disque RAM et de reconfigurer tmpdir pour l'utiliser

ÉTAPE 01: créer un point de montage pour un disque RAM

mkdir /var/tmpfs

ÉTAPE 02: Ajoutez le disque RAM à / etc / fstab (16 Go)

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

ÉTAPE 03: Ajoutez cette ligne à /etc/my.cnf

[mysqld]
tmpdir=/var/tmpfs

ÉTAPE 04: Activer le disque RAM

Vous pouvez effectuer l'une des opérations suivantes:

  1. Redémarrez simplement le serveur DB
  2. mount -t tmpfs -o size=16g none /var/tmpfs

Avant de faire cela, assurez-vous d'avoir suffisamment de RAM

Essaie !!!

RolandoMySQLDBA
la source
2
Les tables temporaires implicites n'ont aucun impact sur la réplication, que ce soit SBR ou RBR. Des tables temporaires explicites envoient tous les DDL sur le câble.
Rick James
4

"Beaucoup de tables temporaires mysql" - Les problèmes potentiels:

  • table_open_cache (et autres paramètres ajustables) - Vous pourriez (mais ne risquez pas) atteindre une certaine limite
  • Ballonnement de bélier - Vous pourriez (mais ne risquez pas) d'utiliser plus de bélier. Si cela conduit à un échange, c'est vraiment mauvais.

Je ne m'inquiéterais pas pour "beaucoup" à moins d'avoir vraiment des centaines de tables temporaires à la fois.

Combien de threads (SHOW PROCESSLIST; ignore 'Sleep') sont en cours d'exécution à la fois? Même un système occupé en a rarement plus de 10 à la fois.

Pour implicite tables temporaires , voyons les SELECT qui les provoquent; il peut être possible de reconcevoir les requêtes pour éviter les tables temporaires.

Je n'aime pas utiliser un disque RAM - cela éloigne la RAM des autres possibilités de mise en cache et risque de frapper une limite stricte (la taille du disque).

Rick James
la source