Benutzer-Werkzeuge

Webseiten-Werkzeuge


partitionierte_tabellen_mit_mysql

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
partitionierte_tabellen_mit_mysql [2019-09-09 13:08:42] manfredpartitionierte_tabellen_mit_mysql [2024-03-28 14:07:29] (aktuell) – [PARTITION BY HASH] manfred
Zeile 28: Zeile 28:
  
 ===== eine vorhandene Tabelle partitionieren ===== ===== eine vorhandene Tabelle partitionieren =====
 +
 +
 +==== PARTITION BY RANGE ====
  
 Ggf. ist es nötig, bevor man eine vorhandene Tabelle partitionieren kann, den Typ der einiger Spalten anzupassen und oft muss auch der ''PRIMARY KEY'' angepassw werden. Ggf. ist es nötig, bevor man eine vorhandene Tabelle partitionieren kann, den Typ der einiger Spalten anzupassen und oft muss auch der ''PRIMARY KEY'' angepassw werden.
Zeile 36: Zeile 39:
     CHANGE COLUMN `time` `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Zeitpunkt, zu dem das Ereignis eintrat'     CHANGE COLUMN `time` `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Zeitpunkt, zu dem das Ereignis eintrat'
   ;   ;
-  +
   ALTER TABLE `datenbank`.`tabelle`   ALTER TABLE `datenbank`.`tabelle`
     DROP PRIMARY KEY,     DROP PRIMARY KEY,
     ADD PRIMARY KEY (`id`,`time`) USING BTREE     ADD PRIMARY KEY (`id`,`time`) USING BTREE
   ;   ;
-  +
   ALTER TABLE `datenbank`.`tabelle`   ALTER TABLE `datenbank`.`tabelle`
   PARTITION BY RANGE (UNIX_TIMESTAMP(time)) (   PARTITION BY RANGE (UNIX_TIMESTAMP(time)) (
Zeile 55: Zeile 58:
   ;   ;
  
 +<code bash>
 +#!/bin/bash
 +
 +SICHERE_TAGE="92"          # Die Anzahl der Tage, die aufgehoben werden sollen
 +
 +DATENBANK="log_db"
 +TABELLE="log_tab"
 +MYSQL="mysql --ssl-cipher=ECDHE-RSA-AES256-GCM-SHA384 -h192.168.33.06 -P3306"
 +
 +
 +# für jeden Tag eine Partition anlegen
 +echo "
 +ALTER TABLE ${DATENBANK}.${TABELLE}
 +PARTITION BY RANGE (UNIX_TIMESTAMP(datetime)) (
 +$(for i in $(seq -7 ${SICHERE_TAGE})
 +do
 +        echo "        PARTITION p$(date -d"$((${i}+1)) day ago" +'%Y%m%d') VALUES LESS THAN (UNIX_TIMESTAMP('$(date -d"${i} day ago" +'%F') 00:00:00')),"
 +done | tac)
 +        PARTITION p0        VALUES LESS THAN MAXVALUE
 +)
 +;
 +" | ${MYSQL}
 +</code>
 +
 +
 +==== PARTITION BY HASH ====
 +
 +  * [[https://dev.mysql.com/doc/refman/8.0/en/partitioning-hash.html]]
 +
 +Um eine Tabelle nach HASH zu partitionieren, muß die ''HASH-Spalte'' von einem INT-Type sein!
 +
 +//Modulus-''HASH'' soll die Daten über die Partitionen gleichmäßiger verteilen.//
 +
 +Man sollte die Anzahl der Partitionen als einen Wert von ''2^x'' (2, 4, 8, 16, ...) wählen, weil der HASH-Algorythmus (Binärbaum) sich dann am besten ausbalancieren kann.
 +<file SQL Tabelle_partitionieren_-_HASH.sql>
 +ALTER TABLE `promotion_tracking_backend`.`CrossSiteTrackingData`
 +PARTITION BY HASH (id)
 +    PARTITIONS 16;
 +</file>
 +
 +  SELECT TABLE_SCHEMA,TABLE_NAME,PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE PARTITION_DESCRIPTION IS NOT NULL AND TABLE_SCHEMA='promotion_tracking_backend' AND TABLE_NAME='CrossSiteTrackingData';
 +
 +
 +==== PARTITION BY LINEAR HASH ====
 +
 +  * [[https://dev.mysql.com/doc/refman/8.0/en/partitioning-linear-hash.html]]
 +
 +**LINEAR HASH Partitioning:**
 +MySQL unterstützt auch lineares Hashing, das sich von regulärem Hashing darin unterscheidet, dass lineares Hashing einen linearen Potenzen-von-Zwei-Algorithmus verwendet, während reguläres Hashing den Modulus des Werts der Hash-Funktion verwendet.
 +
 +//''LINEAR HASH'' soll beim INSERT und DELETE sowie dem verändern der Partitionsanzahl etwas schneller sein als der Modulus-''HASH''.//
 +
 +<code sql>
 +ALTER TABLE `promotion_tracking_backend`.`CrossSiteTrackingData`
 +PARTITION BY LINEAR HASH (id)
 +    PARTITIONS 16;
 +</code>
  
 ===== partitionierte Tabelle neu anlegen ===== ===== partitionierte Tabelle neu anlegen =====
/home/http/wiki/data/attic/partitionierte_tabellen_mit_mysql.1568034522.txt · Zuletzt geändert: von manfred