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 [2022-04-25 13:32:03] – [eine vorhandene Tabelle partitionieren] manfredpartitionierte_tabellen_mit_mysql [2024-03-28 14:07:29] (aktuell) – [PARTITION BY HASH] manfred
Zeile 39: 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 57: Zeile 57:
   )   )
   ;   ;
 +
 +<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 ==== ==== 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! 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. 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.
-  ALTER TABLE `datenbank`.`tabelle+<file SQL Tabelle_partitionieren_-_HASH.sql> 
-  PARTITION BY HASH (id) +ALTER TABLE `promotion_tracking_backend`.`CrossSiteTrackingData
-      PARTITIONS 16;+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.
  
-  SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE PARTITION_DESCRIPTION IS NOT NULL AND TABLE_SCHEMA='datenbankAND TABLE_NAME='tabelle';+//''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.1650893523.txt · Zuletzt geändert: von manfred