Ist es schlecht, viele temporäre MySQL-Tabellen gleichzeitig zu erstellen?

8

Ich muss umfangreiche statistische Analysen durchführen, um den Benutzern einige Daten zu liefern. Derzeit fange ich die Daten von MySQL ab und verarbeite sie überPHP Arrays. Temporäre MySQL-Tabellen sind jedoch viel besser (extrem effizienter und schneller als PHP-Arrays; offensichtlich aufgrund ihres Mechanismus).

Meine vorläufige Lösung besteht darin, bei jeder Anforderung (dh Verbindung) eine temporäre Tabelle zum Importieren und Verarbeiten der Daten zu erstellen. Ich bin mir jedoch nicht sicher, ob es einen Nachteil gibt, viele temporäre Tabellen gleichzeitig zu erstellen.

Kann dies zu Problemen für den MySQL-Server führen? Oder kann ich es als Alternative zu PHP-Arrays bei zahlreichen gleichzeitigen Anfragen verwenden?

Googlebot
quelle

Antworten:

6

Sie möchten verhindern, dass temporäre Tabellen so weit wie möglich erstellt werden: Verhindern Sie das Kopieren in temporäre Tabellen (SQL)

Sie funktionieren in MySQL Replication nicht gut: Wie werden Binlogs für temporäre MySQL-Tabellen aktualisiert?

Da temporäre Tabellen in der DB-Welt eine Tatsache sind, müssen Sie möglicherweise einige unorthodoxe Änderungen vornehmen, um ihrer Existenz Rechnung zu tragen.

Normalerweise hat mysqld die Angewohnheit, tmp-Tabellen in /tmpoder wo auch immer tmpdir zu platzieren konfiguriert ist. Das ist normalerweise auf einer armen, ahnungslosen Festplatte.

Eine interessante Alternative wäre, eine RAM-Disk einzurichten und tmpdir neu zu konfigurieren für die Verwendung

SCHRITT 01: Erstellen Sie einen Mount-Punkt für eine RAM-Disk

mkdir /var/tmpfs

SCHRITT 02: Fügen Sie die RAM-Disk zu / etc / fstab hinzu (16 GB)

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

SCHRITT 03: Fügen Sie diese Zeile zu /etc/my.cnf hinzu

[mysqld]
tmpdir=/var/tmpfs

SCHRITT 04: Aktivieren Sie die RAM-Disk

Sie können eine der folgenden Aktionen ausführen:

  1. Starten Sie einfach den DB Server neu
  2. mount -t tmpfs -o size=16g none /var/tmpfs

Bevor Sie dies tun, stellen Sie sicher, dass Sie über genügend RAM verfügen

Versuche es !!!

RolandoMySQLDBA
quelle
2
Implizite temporäre Tabellen haben keinen Einfluss auf die Replikation, egal ob SBR oder RBR. Explizite temporäre Tabellen senden alle DDLs über die Leitung.
Rick James
4

"Viele temporäre MySQL-Tabellen" - Die möglichen Probleme:

  • table_open_cache (und andere einstellbare Elemente) - Sie könnten (aber wahrscheinlich nicht) ein Limit erreichen
  • Ram Bloat - Sie könnten (aber wahrscheinlich nicht) mehr Ram verwenden. Wenn dies zum Tauschen führt, ist das wirklich schlecht.

Ich würde mir keine Sorgen um "viele" machen, wenn Sie nicht wirklich Hunderte von temporären Tabellen gleichzeitig haben.

Wie viele Threads (SHOW PROCESSLIST; Ignorieren von 'Sleep') werden gleichzeitig ausgeführt? Selbst ein ausgelastetes System hat selten mehr als 10 gleichzeitig.

Sehen wir uns für implizite temporäre Tabellen die SELECTs an, die sie verursachen. Möglicherweise können die Abfragen neu gestaltet werden, um die temporären Tabellen zu vermeiden.

Ich mag es nicht, eine RAM-Disk zu verwenden - sie nimmt RAM von anderen Caching-Möglichkeiten und birgt das Risiko, ein festes Limit (die Disk-Größe) zu erreichen.

Rick James
quelle