{"id":268,"date":"2026-10-20T09:53:00","date_gmt":"2026-10-20T07:53:00","guid":{"rendered":"https:\/\/www.cisilino.com\/?p=268"},"modified":"2026-10-29T20:02:07","modified_gmt":"2026-10-29T19:02:07","slug":"skript-speicherplatz-datenbank-mysql","status":"publish","type":"post","link":"https:\/\/www.cisilino.com\/de\/2026\/10\/20\/skript-speicherplatz-datenbank-mysql\/","title":{"rendered":"Welche Datenbank belegt den Speicherplatz? Ein Skript f\u00fcr MySQL und PostgreSQL"},"content":{"rendered":"<p>Das passiert fr\u00fcher oder sp\u00e4ter jedem: Die Festplatte des Servers l\u00e4uft voll, der Alarm geht los und die Frage ist immer dieselbe. <strong>Welche Datenbank belegt den ganzen Platz?<\/strong> Beim Speicherplatz von MySQL gibt es daf\u00fcr selten eine schnelle Antwort.<\/p>\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.cisilino.com\/wp-content\/uploads\/2026\/10\/speicherplatz-datenbanken-mysql-postgresql.webp\" alt=\"Speicherplatz von MySQL als Ringdiagramm in vier farbige Abschnitte geteilt, rechts drei Legendenbalken\" width=\"1200\" height=\"630\"\/><\/figure>\n<p>Ich stand davor nach einer Optimierung. Ich hatte <code>OPTIMIZE TABLE<\/code> ausgef\u00fchrt in der Hoffnung, Platz zur\u00fcckzugewinnen, aber das Dateisystem schrumpfte nicht wie erwartet. Ohne ein \u201eVorher\u201c, mit dem man das \u201eNachher\u201c vergleichen konnte, lie\u00df sich nicht sagen, ob die Optimierung gewirkt hatte, welche Datenbank wirklich verantwortlich war und ob der fehlende Platz vielleicht ganz woanders steckte.<\/p>\n<p>Die Werkzeuge, die ich hatte, beantworteten nur die H\u00e4lfte des Problems.<\/p>\n<ul class=\"wp-block-list\">\n<li><code>du<\/code> zeigt die Dateien auf der Platte, sagt aber nicht, zu welcher Tabelle sie geh\u00f6ren.<\/li>\n<li><code>information_schema<\/code> (oder <code>pg_class<\/code> bei PostgreSQL) liefert die logischen Gr\u00f6\u00dfen, sieht aber weder Binlogs noch <code>ibdata1<\/code>, Undo-Logs oder WAL.<\/li>\n<li>beide zeigen nur einen einzigen Augenblick: Der Vergleich \u00fcber die Zeit bleibt Handarbeit mit Copy-and-paste und Tabellenkalkulation.<\/li>\n<\/ul>\n<p>Ich brauchte etwas Einfaches: <strong>den Zustand aller Datenbanken zu einem bestimmten Zeitpunkt festhalten, sp\u00e4ter erneut festhalten und mir sagen lassen, was sich ge\u00e4ndert hat<\/strong>, die Unterschiede sortiert vom gr\u00f6\u00dften zum kleinsten. So f\u00e4llt der \u00dcbelt\u00e4ter sofort auf.<\/p>\n<p>Herausgekommen ist ein einzelnes Bash-Skript ohne Abh\u00e4ngigkeiten au\u00dfer dem Datenbank-Client und den \u00fcblichen Linux-Werkzeugen (<code>awk<\/code>, <code>du<\/code>, <code>df<\/code>). Es funktioniert mit <strong>MySQL\/MariaDB<\/strong> und mit <strong>PostgreSQL<\/strong>. Ich teile es hier in der Hoffnung, jemandem denselben frustrierenden Nachmittag zu ersparen.<\/p>\n<h2 class=\"wp-block-heading\">Was es tut<\/h2>\n<p>Das Skript hat vier Befehle.<\/p>\n<ul class=\"wp-block-list\">\n<li><code>snapshot<\/code> speichert den aktuellen Zustand (Datenbanken, Tabellen, Dateien im Datenverzeichnis, Platz des Dateisystems).<\/li>\n<li><code>compare<\/code> vergleicht zwei Momentaufnahmen und zeigt die Unterschiede, die gr\u00f6\u00dften zuerst.<\/li>\n<li><code>report<\/code> zeigt die gr\u00f6\u00dften Datenbanken und Tabellen einer einzelnen Momentaufnahme.<\/li>\n<li><code>list<\/code> listet die gespeicherten Momentaufnahmen auf.<\/li>\n<\/ul>\n<p>Der Vergleich ist in vier Abschnitte unterteilt, damit keine blinden Flecken bleiben.<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>Gr\u00f6\u00dfe jeder Datenbank<\/strong> (Daten + Indizes).<\/li>\n<li><strong>freier oder r\u00fcckgewinnbarer Platz<\/strong> (<code>data_free<\/code> bei MySQL, Sch\u00e4tzung der toten Tupel bei PostgreSQL).<\/li>\n<li><strong>Gr\u00f6\u00dfe jeder Tabelle<\/strong>.<\/li>\n<li><strong>tats\u00e4chliche Dateien im Datenverzeichnis<\/strong>: Datenbankordner, <code>ibdata1<\/code>, Binlogs, Undo, <code>pg_wal<\/code>.<\/li>\n<\/ul>\n<p>Der letzte Abschnitt l\u00f6st das R\u00e4tsel oft. Viele Male geh\u00f6rt der \u201eauff\u00e4llige\u201c Platz zu keiner Datenbank, sondern zu den Bin\u00e4rlogs oder zu den gemeinsamen InnoDB-Dateien.<\/p>\n<h2 class=\"wp-block-heading\">Voraussetzungen<\/h2>\n<ul class=\"wp-block-list\">\n<li>Linux mit Bash 4 oder h\u00f6her, <code>awk<\/code>, <code>du<\/code>, <code>df<\/code> (alles Standard).<\/li>\n<li>der Client <code>mysql<\/code> oder <code>psql<\/code>, mit einem Benutzer, der die Metadaten aller Datenbanken lesen darf.<\/li>\n<li>Root-Rechte (oder die des Benutzers <code>mysql<\/code>\/<code>postgres<\/code>), wenn Sie auch die Dateien auf der Platte messen wollen; ohne sie wird dieser Abschnitt mit einer Warnung \u00fcbersprungen.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">Installation<\/h2>\n<p>Speichern Sie das Skript (am Ende des Artikels) in einer Datei und machen Sie es ausf\u00fchrbar.<\/p>\n<pre class=\"wp-block-code\"><code>nano db_space_compare.sh\nchmod +x db_space_compare.sh<\/code><\/pre>\n<h3 class=\"wp-block-heading\">Zugangsdaten<\/h3>\n<p>F\u00fcr MySQL\/MariaDB ist der sauberste Weg eine Datei <code>~\/.my.cnf<\/code> mit den Zugangsdaten, damit sie nicht im Befehlsverlauf auftauchen.<\/p>\n<pre class=\"wp-block-code\"><code>&#91;client]\nuser=root\npassword=LA_TUA_PASSWORD<\/code><\/pre>\n<p>Alternativ k\u00f6nnen Sie die Optionen \u00fcber eine Umgebungsvariable \u00fcbergeben.<\/p>\n<pre class=\"wp-block-code\"><code>export MYSQL_OPTS=\"-u root -pPASSWORD -h 127.0.0.1\"<\/code><\/pre>\n<p>F\u00fcr PostgreSQL funktionieren <code>~\/.pgpass<\/code>, die Variablen <code>PG*<\/code> oder <code>PG_OPTS<\/code>.<\/p>\n<pre class=\"wp-block-code\"><code>export PG_OPTS=\"-U postgres -h localhost\"<\/code><\/pre>\n<h2 class=\"wp-block-heading\">So verwenden Sie es<\/h2>\n<p>Der typische Ablauf ist <em>vorher, Optimierung, nachher, Vergleich<\/em>.<\/p>\n<pre class=\"wp-block-code\"><code># 1. fotografia prima dell'ottimizzazione\nsudo .\/db_space_compare.sh snapshot prima\n\n# 2. esegui l'ottimizzazione (OPTIMIZE TABLE, VACUUM FULL, ...)\n\n# 3. fotografia dopo\nsudo .\/db_space_compare.sh snapshot dopo\n\n# 4. confronto\nsudo .\/db_space_compare.sh compare prima dopo<\/code><\/pre>\n<p>F\u00fcr PostgreSQL gen\u00fcgt es, die Option <code>-e postgres<\/code> hinzuzuf\u00fcgen.<\/p>\n<pre class=\"wp-block-code\"><code>sudo .\/db_space_compare.sh -e postgres snapshot prima\nsudo .\/db_space_compare.sh -e postgres snapshot dopo\nsudo .\/db_space_compare.sh -e postgres compare prima dopo<\/code><\/pre>\n<p>Die verf\u00fcgbaren Optionen sind.<\/p>\n<ul class=\"wp-block-list\">\n<li><code>-e mysql|postgres<\/code> w\u00e4hlt die Engine (Standard: <code>mysql<\/code>).<\/li>\n<li><code>-d DIR<\/code> \u00e4ndert den Ordner, in dem die Momentaufnahmen gespeichert werden (Standard: <code>.\/db_snapshots<\/code>).<\/li>\n<li><code>-n N<\/code> legt fest, wie viele Zeilen pro Abschnitt angezeigt werden (Standard: 20).<\/li>\n<\/ul>\n<p>Geben Sie keine Bezeichnung an, erh\u00e4lt die Momentaufnahme Datum und Uhrzeit als Namen. Das ist praktisch, um das Wachstum \u00fcber die Zeit zu \u00fcberwachen.<\/p>\n<h2 class=\"wp-block-heading\">Beispielausgabe<\/h2>\n<p>Hier ein Vergleich mit Testdaten, extra gebaut, um einen typischen Fall zu zeigen: Die Datenbank <code>shop<\/code> schrumpft nach der Optimierung, aber die Datenbank <code>log<\/code> w\u00e4chst und die Binlogs verdoppeln sich.<\/p>\n<pre class=\"wp-block-code\"><code>Confronto 'prima' (2026-10-11 20:00:00)  -&gt;  'dopo' (2026-10-11 22:00:00)\nFilesystem \/var: usato 46.6 GiB -&gt; 48.4 GiB (+1.9 GiB)\n\n=== Database - dimensione totale ===\n  NOME                                                      PRIMA         DOPO    DIFFERENZA  NOTE\n  log                                                    21.4 GiB     27.5 GiB      +6.1 GiB  +28.3%\n  shop                                                    5.6 GiB      3.6 GiB      -2.0 GiB  -35.0%\n\n=== Tabelle - dimensione (dati + indici) ===\n  NOME                                                      PRIMA         DOPO    DIFFERENZA  NOTE\n  log.eventi                                             21.4 GiB     27.5 GiB      +6.1 GiB  +28.3%\n  shop.ordini                                             5.6 GiB      3.6 GiB      -2.0 GiB  -35.0%\n  log.nuova                                                   0 B      1.0 KiB      +1.0 KiB  NUOVO\n\n=== File nella data directory (cartelle DB, ibdata1, binlog, undo, WAL) ===\n  NOME                                                      PRIMA         DOPO    DIFFERENZA  NOTE\n  log                                                    21.4 GiB     27.5 GiB      +6.1 GiB  +28.3%\n  mysql-bin.*                                             3.7 GiB      8.4 GiB      +4.7 GiB  +125.0%\n  shop                                                    5.7 GiB      3.6 GiB      -2.0 GiB  -36.1%\n  ibdata1                                                11.2 GiB     11.2 GiB           0 B<\/code><\/pre>\n<p>Hier ist der \u00dcbelt\u00e4ter offensichtlich: Die Tabelle <code>log.eventi<\/code> ist um mehr als 6 GiB gewachsen, und die Dateien <code>mysql-bin.*<\/code> sind von 3,7 auf 8,4 GiB gestiegen. Die Optimierung von <code>shop<\/code> hat funktioniert, aber der Gewinn wurde vom Rest aufgefressen.<\/p>\n<h2 class=\"wp-block-heading\">Wie man die Ergebnisse zum Speicherplatz von MySQL liest<\/h2>\n<ul class=\"wp-block-list\">\n<li>Am Anfang jedes Abschnitts stehen die Eintr\u00e4ge mit der gr\u00f6\u00dften \u00c4nderung. Eine Datenbank oder Tabelle, die nach der Optimierung <strong>nicht schrumpft<\/strong> (oder sogar w\u00e4chst), ist der erste Verd\u00e4chtige.<\/li>\n<li>Schrumpfen die Tabellen, das Dateisystem aber nicht, liegt der Platz woanders: Sehen Sie sich den Abschnitt \u00fcber die Dateien im Datenverzeichnis an (Binlogs, <code>ibdata1<\/code>, Undo, <code>pg_wal<\/code>).<\/li>\n<li><strong>MySQL\/MariaDB:<\/strong> <code>ibdata1<\/code> schrumpft nie, auch nicht mit <code>OPTIMIZE TABLE<\/code>. Mit <code>innodb_file_per_table=OFF<\/code> ist der Wert von <code>data_free<\/code> gemeinsam genutzt und wenig aussagekr\u00e4ftig.<\/li>\n<li><strong>PostgreSQL:<\/strong> Ein einfaches <code>VACUUM<\/code> gibt keinen Platz an das Betriebssystem zur\u00fcck, daf\u00fcr braucht man <code>VACUUM FULL<\/code> (oder <code>pg_repack<\/code>). Der angezeigte \u201er\u00fcckgewinnbare\u201c Platz ist eine Sch\u00e4tzung auf Basis der toten Tupel. Wie PostgreSQL den Platz selbst berechnet, erkl\u00e4rt die <a href=\"https:\/\/www.postgresql.org\/docs\/current\/diskusage.html\" target=\"_blank\" rel=\"noopener\">Dokumentation zur Plattenbelegung<\/a>.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">Wachstum \u00fcber die Zeit \u00fcberwachen<\/h2>\n<p>H\u00e4ngt das Problem nicht an einer einzelnen Optimierung, sondern an schrittweisem Wachstum, lohnt es sich, die Momentaufnahmen mit cron zu automatisieren, eine pro Stunde, und dann zwei beliebige Zeitpunkte zu vergleichen.<\/p>\n<pre class=\"wp-block-code\"><code># crontab -e (come root)\n0 * * * * \/usr\/local\/bin\/db_space_compare.sh -d \/var\/lib\/db_snapshots snapshot &gt;\/dev\/null 2&gt;&amp;1<\/code><\/pre>\n<p>Ohne Bezeichnung hei\u00dft jede Momentaufnahme nach Datum und Uhrzeit (zum Beispiel <code>20261011-140000<\/code>). Mit <code>list<\/code> sehen Sie die vorhandenen, mit <code>compare<\/code> vergleichen Sie zwei. In wenigen Tagen zeigt sich, welche Datenbank ungew\u00f6hnlich w\u00e4chst.<\/p>\n<pre class=\"wp-block-code\"><code>.\/db_space_compare.sh -d \/var\/lib\/db_snapshots list\n.\/db_space_compare.sh -d \/var\/lib\/db_snapshots compare 20261011-140000 20261012-140000<\/code><\/pre>\n<h2 class=\"wp-block-heading\">Das vollst\u00e4ndige Skript<\/h2>\n<p>Hier ist der Code. Kopieren Sie ihn in eine Datei namens <code>db_space_compare.sh<\/code>, machen Sie sie ausf\u00fchrbar, und Sie sind startklar.<\/p>\n<pre class=\"wp-block-code\"><code>#!\/usr\/bin\/env bash\n#\n# db_space_compare.sh\n# Fotografa l'occupazione di spazio di tutti i database (MySQL\/MariaDB o\n# PostgreSQL) e confronta due fotografie (es. prima\/dopo l'ottimizzazione)\n# per capire quale database, tabella o file occupa spazio in modo anomalo.\n#\n# Uso:\n#   db_space_compare.sh &#91;opzioni] snapshot &#91;etichetta]   (default: data-ora)\n#   db_space_compare.sh &#91;opzioni] compare  &lt;prima&gt; &lt;dopo&gt;\n#   db_space_compare.sh &#91;opzioni] report   &lt;etichetta&gt;\n#   db_space_compare.sh &#91;opzioni] list\n#\n# Opzioni:\n#   -e mysql|postgres   motore del database (default: mysql)\n#   -d DIR              cartella delle fotografie (default: .\/db_snapshots)\n#   -n N                righe mostrate per sezione (default: 20)\n#\n# Credenziali:\n#   MySQL\/MariaDB: ~\/.my.cnf oppure MYSQL_OPTS=\"-u root -pPASSWORD -h 127.0.0.1\"\n#   PostgreSQL:    ~\/.pgpass, variabili PG* oppure PG_OPTS=\"-U postgres -h localhost\"\n#                  (non mettere -d in PG_OPTS: lo script si collega a ogni database)\n#\n# Per misurare anche i file su disco (cartelle dei DB, ibdata1, binlog, undo,\n# pg_wal) va eseguito come root o come utente mysql\/postgres; altrimenti\n# quella parte viene saltata con un avviso.\n#\n# Esempio:\n#   sudo .\/db_space_compare.sh snapshot prima\n#   ... ottimizzazione (OPTIMIZE TABLE \/ VACUUM FULL \/ ...) ...\n#   sudo .\/db_space_compare.sh snapshot dopo\n#   sudo .\/db_space_compare.sh compare prima dopo\n\nset -euo pipefail\nexport LC_ALL=C\n\nENGINE=mysql\nOUTDIR=.\/db_snapshots\nTOPN=20\nSNAP_IN_PROGRESS=\"\"\n\ndie()  { echo \"ERRORE: $*\" &gt;&amp;2; exit 1; }\nwarn() { echo \"ATTENZIONE: $*\" &gt;&amp;2; }\nusage() { sed -n '2,\/^$\/{s\/^# \\{0,1\\}\/\/;p}' \"$0\"; exit \"${1:-0}\"; }\n\ncleanup() {\n  if &#91;&#91; -n $SNAP_IN_PROGRESS ]]; then\n    rm -rf -- \"$SNAP_IN_PROGRESS\"\n    echo \"Fotografia incompleta rimossa: $SNAP_IN_PROGRESS\" &gt;&amp;2\n  fi\n}\ntrap cleanup EXIT\n\nwhile getopts \":e:d:n:h\" opt; do\n  case $opt in\n    e) ENGINE=$OPTARG ;;\n    d) OUTDIR=$OPTARG ;;\n    n) TOPN=$OPTARG ;;\n    h) usage 0 ;;\n    *) usage 1 ;;\n  esac\ndone\nshift $((OPTIND - 1))\n\n&#91;&#91; $ENGINE == mysql || $ENGINE == postgres ]] || die \"motore non valido: '$ENGINE' (usa mysql o postgres)\"\n&#91;&#91; $TOPN =~ ^&#91;0-9]+$ ]] || die \"-n deve essere un numero\"\n\nread -r -a MYSQL_ARGS &lt;&lt;&lt; \"${MYSQL_OPTS:-}\"\nread -r -a PG_ARGS    &lt;&lt;&lt; \"${PG_OPTS:-}\"\n\nmy() { mysql \"${MYSQL_ARGS&#91;@]+\"${MYSQL_ARGS&#91;@]}\"}\" --batch --skip-column-names \"$@\"; }\npg() { psql  \"${PG_ARGS&#91;@]+\"${PG_ARGS&#91;@]}\"}\" -X -q -A -t -F $'\\t' -v ON_ERROR_STOP=1 \"$@\"; }\n\n# Funzioni awk comuni: formattazione in KiB\/MiB\/GiB, chiave e valore di riga.\n#   nk = numero di colonne che formano il nome (1 = database, 2 = db.tabella)\n#   vc = colonne da sommare per il valore (es. \"4,5\" = dati + indici)\nAWK_LIB='\nfunction h(b,   a, i, u) {\n  split(\"B KiB MiB GiB TiB PiB\", u, \" \")\n  a = (b &lt; 0) ? -b : b; i = 1\n  while (a &gt;= 1024 &amp;&amp; i &lt; 6) { a \/= 1024; i++ }\n  if (i == 1) return sprintf(\"%s%d B\", (b &lt; 0 ? \"-\" : \"\"), a)\n  return sprintf(\"%s%.1f %s\", (b &lt; 0 ? \"-\" : \"\"), a, u&#91;i])\n}\nfunction hs(b) { return (b &gt; 0 ? \"+\" : \"\") h(b) }\nfunction key(   k, i) { k = $1; for (i = 2; i &lt;= nk; i++) k = k \".\" $i; return k }\nfunction val(   n, c, i, s) { n = split(vc, c, \",\"); s = 0; for (i = 1; i &lt;= n; i++) s += $(c&#91;i]); return s }\n'\n\nmeta_get() { awk -F= -v k=\"$2\" '$1 == k { sub(\/^&#91;^=]*=\/, \"\"); print; exit }' \"$1\/meta.txt\"; }\n\n# ---------------------------------------------------------------- raccolta dati\n\n# Occupazione reale su disco delle voci di primo livello della data directory:\n# cartelle dei database, ibdata1, binlog, undo, redo log, pg_wal, base, ...\n# I file numerati (mysql-bin.000123, relay-log.000045, ...) sono sommati in una voce.\ncollect_disk() {\n  local d=$1 out=$2\n  : &gt; \"$out\"\n  if &#91;&#91; -z $d || ! -r $d || ! -x $d ]]; then\n    warn \"data directory '${d:-?}' non leggibile: salto i file su disco (esegui come root per includerli)\"\n    return 0\n  fi\n  { du -sb -- \"$d\"\/* 2&gt;\/dev\/null || true; } |\n    awk -F'\\t' -v p=\"$d\/\" '\n      { n = $2\n        if (index(n, p) == 1) n = substr(n, length(p) + 1)\n        if (n ~ \/\\.&#91;0-9]&#91;0-9]&#91;0-9]&#91;0-9]&#91;0-9]&#91;0-9]$\/) sub(\/&#91;0-9]+$\/, \"*\", n)\n        s&#91;n] += $1 }\n      END { for (n in s) printf \"%s\\t%.0f\\n\", n, s&#91;n] }' &gt; \"$out\"\n}\n\nwrite_meta() {\n  local dir=$1 datadir=$2 version=$3\n  {\n    echo \"timestamp=$(date '+%Y-%m-%d %H:%M:%S')\"\n    echo \"engine=$ENGINE\"\n    echo \"host=$(hostname)\"\n    echo \"version=$version\"\n    echo \"datadir=$datadir\"\n    if &#91;&#91; -n $datadir &amp;&amp; -e $datadir ]]; then\n      { df -P -B1 -- \"$datadir\" 2&gt;\/dev\/null || true; } |\n        awk 'NR == 2 { print \"fs_mount=\" $6; print \"fs_used=\" $3; print \"fs_avail=\" $4 }'\n    fi\n  } &gt; \"$dir\/meta.txt\"\n}\n\n# File prodotti da ogni fotografia (separati da TAB):\n#   tables.tsv     db, tabella, engine, dati, indici, libero\/recuperabile, righe\n#   databases.tsv  db, dati, indici, libero\/recuperabile, totale\n#   disk.tsv       voce della data directory, byte su disco\n#   meta.txt       data, host, versione, filesystem\n\nsnapshot_mysql() {\n  local dir=$1 pre=\"\" datadir version\n  command -v mysql &gt;\/dev\/null 2&gt;&amp;1 || die \"client 'mysql' non trovato\"\n  my -e \"SELECT 1\" &gt;\/dev\/null || die \"connessione a MySQL\/MariaDB fallita (controlla ~\/.my.cnf o MYSQL_OPTS)\"\n\n  # MySQL 8 tiene in cache le statistiche di information_schema fino a 24 ore:\n  # senza questo, i valori \"dopo\" l'ottimizzazione potrebbero essere quelli vecchi.\n  if &#91;&#91; -n $(my -e \"SHOW VARIABLES LIKE 'information_schema_stats_expiry'\") ]]; then\n    pre=\"SET SESSION information_schema_stats_expiry = 0;\"\n  fi\n\n  my -e \"$pre\n    SELECT table_schema, table_name, IFNULL(engine, '-'),\n           IFNULL(data_length, 0), IFNULL(index_length, 0), IFNULL(data_free, 0), IFNULL(table_rows, 0)\n      FROM information_schema.TABLES\n     WHERE table_type IN ('BASE TABLE', 'SYSTEM VERSIONED')\n       AND table_schema NOT IN ('information_schema', 'performance_schema', 'sys')\" &gt; \"$dir\/tables.tsv\"\n\n  my -e \"$pre\n    SELECT s.schema_name,\n           IFNULL(SUM(t.data_length), 0), IFNULL(SUM(t.index_length), 0), IFNULL(SUM(t.data_free), 0),\n           IFNULL(SUM(t.data_length), 0) + IFNULL(SUM(t.index_length), 0)\n      FROM information_schema.SCHEMATA s\n      LEFT JOIN information_schema.TABLES t\n             ON t.table_schema = s.schema_name\n            AND t.table_type IN ('BASE TABLE', 'SYSTEM VERSIONED')\n     WHERE s.schema_name NOT IN ('information_schema', 'performance_schema', 'sys')\n     GROUP BY s.schema_name\" &gt; \"$dir\/databases.tsv\"\n\n  datadir=$(my -e \"SELECT @@datadir\"); datadir=${datadir%\/}\n  version=$(my -e \"SELECT VERSION()\")\n  collect_disk \"$datadir\" \"$dir\/disk.tsv\"\n  write_meta \"$dir\" \"$datadir\" \"$version\"\n}\n\nsnapshot_postgres() {\n  local dir=$1 maindb=${PGDATABASE:-postgres} datadir version db\n  command -v psql &gt;\/dev\/null 2&gt;&amp;1 || die \"client 'psql' non trovato\"\n  pg -d \"$maindb\" -c \"SELECT 1\" &gt;\/dev\/null || die \"connessione a PostgreSQL fallita (controlla PG_OPTS, PGUSER, ~\/.pgpass)\"\n\n  pg -d \"$maindb\" -c \"SELECT datname FROM pg_database WHERE datallowconn AND NOT datistemplate ORDER BY 1\" &gt; \"$dir\/.dblist\"\n\n  # Per ogni database: dimensione di ogni tabella (catalogo incluso, es. pg_largeobject)\n  # e stima dello spazio occupato da tuple morte (bloat recuperabile con VACUUM FULL).\n  : &gt; \"$dir\/tables.tsv\"\n  while IFS= read -r db; do\n    &#91;&#91; -n $db ]] || continue\n    pg -d \"$db\" -c \"\n      SELECT current_database(), s.schemaname || '.' || s.relname, 'table',\n             pg_table_size(s.relid), pg_indexes_size(s.relid),\n             CASE WHEN s.n_live_tup + s.n_dead_tup &gt; 0\n                  THEN (pg_table_size(s.relid)::numeric * s.n_dead_tup \/ (s.n_live_tup + s.n_dead_tup))::bigint\n                  ELSE 0 END,\n             s.n_live_tup\n        FROM pg_stat_all_tables s\n       WHERE s.schemaname &lt;&gt; 'information_schema'\n         AND s.schemaname NOT LIKE 'pg_toast%'\" &lt; \/dev\/null &gt;&gt; \"$dir\/tables.tsv\" \\\n      || warn \"impossibile leggere le tabelle del database '$db'\"\n  done &lt; \"$dir\/.dblist\"\n\n  pg -d \"$maindb\" -c \"SELECT datname, pg_database_size(oid) FROM pg_database WHERE datallowconn AND NOT datistemplate\" &gt; \"$dir\/.dbsize\"\n  awk -F'\\t' '\n    FILENAME == ARGV&#91;1] { d&#91;$1] += $4; i&#91;$1] += $5; f&#91;$1] += $6; next }\n    { printf \"%s\\t%.0f\\t%.0f\\t%.0f\\t%s\\n\", $1, d&#91;$1], i&#91;$1], f&#91;$1], $2 }' \\\n    \"$dir\/tables.tsv\" \"$dir\/.dbsize\" &gt; \"$dir\/databases.tsv\"\n\n  datadir=$(pg -d \"$maindb\" -c \"SHOW data_directory\" 2&gt;\/dev\/null || true)\n  version=$(pg -d \"$maindb\" -c \"SHOW server_version\")\n  collect_disk \"$datadir\" \"$dir\/disk.tsv\"\n\n  # Dettaglio di base\/&lt;oid&gt; con il nome del database al posto dell'oid\n  if &#91;&#91; -n $datadir &amp;&amp; -r $datadir\/base &amp;&amp; -x $datadir\/base ]]; then\n    pg -d \"$maindb\" -c \"SELECT oid, datname FROM pg_database\" &gt; \"$dir\/.oidmap\"\n    { du -sb -- \"$datadir\"\/base\/* 2&gt;\/dev\/null || true; } |\n      awk -F'\\t' '\n        FILENAME == ARGV&#91;1] { name&#91;$1] = $2; next }\n        { o = $2; sub(\/.*\\\/\/, \"\", o); printf \"base\/%s\\t%s\\n\", ((o in name) ? name&#91;o] : o), $1 }' \\\n        \"$dir\/.oidmap\" - &gt;&gt; \"$dir\/disk.tsv\"\n  fi\n  write_meta \"$dir\" \"$datadir\" \"$version\"\n}\n\n# --------------------------------------------------------------- presentazione\n\nprint_fs() {\n  local d=$1 used avail mount\n  used=$(meta_get \"$d\" fs_used); avail=$(meta_get \"$d\" fs_avail); mount=$(meta_get \"$d\" fs_mount)\n  &#91;&#91; -n $used ]] || return 0\n  awk -v u=\"$used\" -v a=\"$avail\" -v m=\"$mount\" \"$AWK_LIB\"'\n    BEGIN { printf \"Filesystem %s: usato %s, libero %s\\n\", m, h(u), h(a) }'\n}\n\ntop_section() {\n  local f=$1 nk=$2 vc=$3 title=$4\n  echo\n  echo \"=== $title ===\"\n  if &#91;&#91; ! -s $f ]]; then echo \"  (nessun dato)\"; return 0; fi\n  awk -F'\\t' -v nk=\"$nk\" -v vc=\"$vc\" \"$AWK_LIB\"'\n    { v = val(); printf \"%.0f\\t%s\\t%s\\n\", v, key(), h(v) }' \"$f\" |\n    sort -t $'\\t' -k1,1nr -k2,2 |\n    awk -F'\\t' -v top=\"$TOPN\" 'NR &lt;= top &amp;&amp; $1 &gt; 0 { printf \"  %-60s %12s\\n\", $2, $3 }'\n}\n\ncompare_section() {\n  local fa=$1 fb=$2 nk=$3 vc=$4 title=$5\n  &#91;&#91; -f $fa ]] || fa=\/dev\/null\n  &#91;&#91; -f $fb ]] || fb=\/dev\/null\n  echo\n  echo \"=== $title ===\"\n  if &#91;&#91; ! -s $fa &amp;&amp; ! -s $fb ]]; then echo \"  (nessun dato)\"; return 0; fi\n  printf '  %-50s %12s %12s %13s  %s\\n' \"NOME\" \"PRIMA\" \"DOPO\" \"DIFFERENZA\" \"NOTE\"\n  awk -F'\\t' -v nk=\"$nk\" -v vc=\"$vc\" \"$AWK_LIB\"'\n    FILENAME == ARGV&#91;1] { k = key(); A&#91;k] = val(); S&#91;k] = 1; next }\n                        { k = key(); B&#91;k] = val(); S&#91;k] = 1 }\n    END {\n      for (k in S) {\n        inA = (k in A); inB = (k in B)\n        a = inA ? A&#91;k] : 0; b = inB ? B&#91;k] : 0; d = b - a\n        if (!inA)                 note = \"NUOVO\"\n        else if (!inB)            note = \"RIMOSSO\"\n        else if (a &gt; 0 &amp;&amp; d != 0) note = sprintf(\"%+.1f%%\", 100 * d \/ a)\n        else                      note = \"\"\n        printf \"%.0f\\t%s\\t%s\\t%s\\t%s\\t%s\\n\", (d &lt; 0 ? -d : d), k, h(a), h(b), hs(d), note\n      }\n    }' \"$fa\" \"$fb\" |\n    sort -t $'\\t' -k1,1nr -k2,2 |\n    awk -F'\\t' -v top=\"$TOPN\" 'NR &lt;= top { printf \"  %-50s %12s %12s %13s  %s\\n\", $2, $3, $4, $5, $6 }'\n}\n\n# -------------------------------------------------------------------- comandi\n\ncmd_snapshot() {\n  local label=${1:-$(date '+%Y%m%d-%H%M%S')}\n  &#91;&#91; $label =~ ^&#91;A-Za-z0-9]&#91;A-Za-z0-9._-]*$ ]] || die \"etichetta non valida: usa solo lettere, numeri, . _ -\"\n  local dir=$OUTDIR\/$label\n  &#91;&#91; ! -e $dir ]] || die \"la fotografia '$label' esiste gi\u00e0 ($dir)\"\n  mkdir -p -- \"$dir\"\n  SNAP_IN_PROGRESS=$dir\n  echo \"Fotografia '$label' ($ENGINE) in corso...\"\n  \"snapshot_$ENGINE\" \"$dir\"\n  rm -f -- \"$dir\/.dblist\" \"$dir\/.dbsize\" \"$dir\/.oidmap\"\n  SNAP_IN_PROGRESS=\"\"\n  echo \"Salvata in $dir ($(wc -l &lt; \"$dir\/tables.tsv\") tabelle)\"\n  print_fs \"$dir\"\n  top_section \"$dir\/databases.tsv\" 1 5 \"Database pi\u00f9 grandi\"\n}\n\ncmd_report() {\n  local label=${1:-}\n  &#91;&#91; -n $label ]] || die \"uso: report &lt;etichetta&gt;\"\n  local d=$OUTDIR\/$label\n  &#91;&#91; -f $d\/meta.txt ]] || die \"fotografia '$label' non trovata in $OUTDIR\"\n  echo \"Fotografia '$label' del $(meta_get \"$d\" timestamp) - $(meta_get \"$d\" engine) $(meta_get \"$d\" version) su $(meta_get \"$d\" host)\"\n  print_fs \"$d\"\n  top_section \"$d\/databases.tsv\" 1 5   \"Database pi\u00f9 grandi (dati + indici)\"\n  top_section \"$d\/tables.tsv\"    2 4,5 \"Tabelle pi\u00f9 grandi (dati + indici)\"\n  top_section \"$d\/tables.tsv\"    2 6   \"Tabelle con pi\u00f9 spazio recuperabile (data_free \/ tuple morte stimate)\"\n  top_section \"$d\/disk.tsv\"      1 2   \"Voci pi\u00f9 grandi nella data directory\"\n}\n\ncmd_compare() {\n  local a=${1:-} b=${2:-}\n  &#91;&#91; -n $a &amp;&amp; -n $b ]] || die \"uso: compare &lt;etichetta_prima&gt; &lt;etichetta_dopo&gt;\"\n  &#91;&#91; $a != \"$b\" ]] || die \"le due etichette sono uguali\"\n  local da=$OUTDIR\/$a db=$OUTDIR\/$b\n  &#91;&#91; -f $da\/meta.txt ]] || die \"fotografia '$a' non trovata in $OUTDIR\"\n  &#91;&#91; -f $db\/meta.txt ]] || die \"fotografia '$b' non trovata in $OUTDIR\"\n  &#91;&#91; $(meta_get \"$da\" engine) == \"$(meta_get \"$db\" engine)\" ]] || warn \"le due fotografie sono di motori diversi\"\n\n  echo \"Confronto '$a' ($(meta_get \"$da\" timestamp))  -&gt;  '$b' ($(meta_get \"$db\" timestamp))\"\n  local ua ub m\n  ua=$(meta_get \"$da\" fs_used); ub=$(meta_get \"$db\" fs_used); m=$(meta_get \"$db\" fs_mount)\n  if &#91;&#91; -n $ua &amp;&amp; -n $ub ]]; then\n    awk -v a=\"$ua\" -v b=\"$ub\" -v m=\"$m\" \"$AWK_LIB\"'\n      BEGIN { printf \"Filesystem %s: usato %s -&gt; %s (%s)\\n\", m, h(a), h(b), hs(b - a) }'\n  fi\n\n  compare_section \"$da\/databases.tsv\" \"$db\/databases.tsv\" 1 5   \"Database - dimensione totale\"\n  compare_section \"$da\/databases.tsv\" \"$db\/databases.tsv\" 1 4   \"Database - spazio libero\/recuperabile\"\n  compare_section \"$da\/tables.tsv\"    \"$db\/tables.tsv\"    2 4,5 \"Tabelle - dimensione (dati + indici)\"\n  compare_section \"$da\/disk.tsv\"      \"$db\/disk.tsv\"      1 2   \"File nella data directory (cartelle DB, ibdata1, binlog, undo, WAL)\"\n\n  cat &lt;&lt;'EOF'\n\nCome leggere il risultato:\n  - In cima a ogni sezione ci sono le voci cambiate di pi\u00f9: un database o una\n    tabella che dopo l'ottimizzazione non cala, o addirittura cresce, \u00e8 il\n    primo sospetto.\n  - Se le tabelle calano ma il filesystem no, lo spazio sta altrove: guarda la\n    sezione \"File nella data directory\" (binlog, ibdata1, undo, pg_wal).\n  - MySQL\/MariaDB: ibdata1 non si restringe mai, nemmeno con OPTIMIZE; con\n    innodb_file_per_table=OFF il data_free \u00e8 condiviso e poco indicativo.\n  - PostgreSQL: VACUUM semplice non restituisce spazio al disco, serve\n    VACUUM FULL (o pg_repack); lo spazio \"recuperabile\" \u00e8 una stima.\nEOF\n}\n\ncmd_list() {\n  if &#91;&#91; ! -d $OUTDIR ]]; then echo \"Nessuna fotografia in $OUTDIR\"; return 0; fi\n  local d found=0\n  for d in \"$OUTDIR\"\/*\/; do\n    &#91;&#91; -f $d\/meta.txt ]] || continue\n    found=1\n    printf '%-24s %s  %-8s  %s\\n' \"$(basename \"$d\")\" \"$(meta_get \"$d\" timestamp)\" \\\n      \"$(meta_get \"$d\" engine)\" \"$(meta_get \"$d\" host)\"\n  done\n  &#91;&#91; $found -eq 1 ]] || echo \"Nessuna fotografia in $OUTDIR\"\n}\n\ncmd=${1:-}\nshift || true\ncase $cmd in\n  snapshot) cmd_snapshot \"$@\" ;;\n  compare)  cmd_compare \"$@\" ;;\n  report)   cmd_report \"$@\" ;;\n  list)     cmd_list ;;\n  \"\"|help)  usage 0 ;;\n  *)        die \"comando sconosciuto: '$cmd' (usa snapshot, compare, report, list)\" ;;\nesac<\/code><\/pre>\n<h2 class=\"wp-block-heading\">Abschlie\u00dfende Hinweise<\/h2>\n<ul class=\"wp-block-list\">\n<li>Das Skript liest den Speicherplatz von MySQL nur aus und ist auf den Datenbanken <strong>schreibgesch\u00fctzt<\/strong>: Es f\u00fchrt nur <code>SELECT<\/code> auf den Metadaten aus. Es schreibt ausschlie\u00dflich in den Ordner der Momentaufnahmen.<\/li>\n<li>Unter MySQL 8 setzt es <code>information_schema_stats_expiry = 0<\/code> in der Sitzung, weil sonst die zwischengespeicherten Statistiken (bis zu 24 Stunden) auch nach der Optimierung \u201ealte\u201c Werte zeigen k\u00f6nnten.<\/li>\n<li>Schl\u00e4gt eine Momentaufnahme auf halbem Weg fehl, wird sie automatisch entfernt, um keine unvollst\u00e4ndigen Daten zu hinterlassen.<\/li>\n<li>Bevor Sie es in der Produktion einsetzen, probieren Sie es in einer Testumgebung aus und pr\u00fcfen die Berechtigungen des Datenbankbenutzers.<\/li>\n<\/ul>\n<p>Wenn Sie es nutzen und einen Fall finden, den es nicht abdeckt, oder Ideen zur Erweiterung haben (andere Engines, CSV-Export, E-Mail-Benachrichtigungen), schreiben Sie mir in die Kommentare. L\u00e4uft MySQL nach einem Upgrade gar nicht mehr, hilft dieser Artikel: <a href=\"https:\/\/www.cisilino.com\/de\/2026\/10\/13\/mysql-startet-nicht-debian-12\/\">MySQL startet nach dem Debian-12-Upgrade nicht mehr<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Festplatte des Servers l\u00e4uft voll und Sie wissen nicht, welche Datenbank schuld ist? Ein Skript, das den Platzbedarf von MySQL und PostgreSQL misst und im Zeitverlauf vergleicht.<\/p>\n","protected":false},"author":1,"featured_media":754,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"wpai_generated_summary":"","footnotes":""},"categories":[363],"tags":[342,294,306,338],"class_list":["post-268","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server-datenbanken","tag-bash-skript","tag-mysql-de","tag-postgresql-de","tag-speicherplatz"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"Speicherplatz von MySQL messen: Welche Datenbank f\u00fcllt die Serverplatte? Ein Skript vergleicht MySQL und PostgreSQL vorher und nachher.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"matteocisilino\"\/>\n\t<meta name=\"google-site-verification\" content=\"_A-1f0dO30IDVHfP9muflI8kHQs-H4YOi8WLUkYzuLE\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.cisilino.com\/de\/2026\/10\/20\/skript-speicherplatz-datenbank-mysql\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Matteo Cisilino - Guide su WordPress, server e sicurezza\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Speicherplatz von MySQL messen: Welche Datenbank belegt ihn?\" \/>\n\t\t<meta property=\"og:description\" content=\"Speicherplatz von MySQL messen: Welche Datenbank f\u00fcllt die Serverplatte? Ein Skript vergleicht MySQL und PostgreSQL vorher und nachher.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.cisilino.com\/de\/2026\/10\/20\/skript-speicherplatz-datenbank-mysql\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/www.cisilino.com\/wp-content\/uploads\/2026\/10\/speicherplatz-datenbanken-mysql-postgresql.webp\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/www.cisilino.com\/wp-content\/uploads\/2026\/10\/speicherplatz-datenbanken-mysql-postgresql.webp\" \/>\n\t\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-10-20T07:53:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-10-29T19:02:07+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Speicherplatz von MySQL messen: Welche Datenbank belegt ihn?\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Speicherplatz von MySQL messen: Welche Datenbank f\u00fcllt die Serverplatte? Ein Skript vergleicht MySQL und PostgreSQL vorher und nachher.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.cisilino.com\/wp-content\/uploads\/2026\/10\/speicherplatz-datenbanken-mysql-postgresql.webp\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/2026\\\/10\\\/20\\\/skript-speicherplatz-datenbank-mysql\\\/#blogposting\",\"name\":\"Speicherplatz von MySQL messen: Welche Datenbank belegt ihn?\",\"headline\":\"Welche Datenbank belegt den Speicherplatz? Ein Skript f\\u00fcr MySQL und PostgreSQL\",\"author\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/author\\\/matteocisilino\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.cisilino.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/speicherplatz-datenbanken-mysql-postgresql.webp\",\"width\":1200,\"height\":630,\"caption\":\"Speicherplatz von MySQL als Ringdiagramm in vier farbige Abschnitte geteilt, rechts drei Legendenbalken\"},\"datePublished\":\"2026-10-20T09:53:00+02:00\",\"dateModified\":\"2026-10-29T20:02:07+01:00\",\"inLanguage\":\"de-DE\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/2026\\\/10\\\/20\\\/skript-speicherplatz-datenbank-mysql\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/2026\\\/10\\\/20\\\/skript-speicherplatz-datenbank-mysql\\\/#webpage\"},\"articleSection\":\"Server und Datenbanken, Bash-Skript, MySQL, PostgreSQL, Speicherplatz\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/2026\\\/10\\\/20\\\/skript-speicherplatz-datenbank-mysql\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/category\\\/server-datenbanken\\\/#listItem\",\"name\":\"Server und Datenbanken\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/category\\\/server-datenbanken\\\/#listItem\",\"position\":2,\"name\":\"Server und Datenbanken\",\"item\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/category\\\/server-datenbanken\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/2026\\\/10\\\/20\\\/skript-speicherplatz-datenbank-mysql\\\/#listItem\",\"name\":\"Welche Datenbank belegt den Speicherplatz? Ein Skript f\\u00fcr MySQL und PostgreSQL\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/2026\\\/10\\\/20\\\/skript-speicherplatz-datenbank-mysql\\\/#listItem\",\"position\":3,\"name\":\"Welche Datenbank belegt den Speicherplatz? Ein Skript f\\u00fcr MySQL und PostgreSQL\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/category\\\/server-datenbanken\\\/#listItem\",\"name\":\"Server und Datenbanken\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/#organization\",\"name\":\"Matteo Cisilino\",\"description\":\"Guide su WordPress, server e sicurezza\",\"url\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.cisilino.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/logo-cisilino-512.png\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/2026\\\/10\\\/20\\\/skript-speicherplatz-datenbank-mysql\\\/#organizationLogo\",\"width\":512,\"height\":512,\"caption\":\"Logo: un cerchio a sinistra che si divide in cerchi pi\\u00f9 piccoli\"},\"image\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/2026\\\/10\\\/20\\\/skript-speicherplatz-datenbank-mysql\\\/#organizationLogo\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/author\\\/matteocisilino\\\/#author\",\"url\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/author\\\/matteocisilino\\\/\",\"name\":\"matteocisilino\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/2026\\\/10\\\/20\\\/skript-speicherplatz-datenbank-mysql\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/639872265f0661e8aee8924ba9d756b00ea816f8286fab99a5116c729d49618f?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"matteocisilino\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/2026\\\/10\\\/20\\\/skript-speicherplatz-datenbank-mysql\\\/#webpage\",\"url\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/2026\\\/10\\\/20\\\/skript-speicherplatz-datenbank-mysql\\\/\",\"name\":\"Speicherplatz von MySQL messen: Welche Datenbank belegt ihn?\",\"description\":\"Speicherplatz von MySQL messen: Welche Datenbank f\\u00fcllt die Serverplatte? Ein Skript vergleicht MySQL und PostgreSQL vorher und nachher.\",\"inLanguage\":\"de-DE\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/2026\\\/10\\\/20\\\/skript-speicherplatz-datenbank-mysql\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/author\\\/matteocisilino\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/author\\\/matteocisilino\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.cisilino.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/speicherplatz-datenbanken-mysql-postgresql.webp\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/2026\\\/10\\\/20\\\/skript-speicherplatz-datenbank-mysql\\\/#mainImage\",\"width\":1200,\"height\":630,\"caption\":\"Speicherplatz von MySQL als Ringdiagramm in vier farbige Abschnitte geteilt, rechts drei Legendenbalken\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/2026\\\/10\\\/20\\\/skript-speicherplatz-datenbank-mysql\\\/#mainImage\"},\"datePublished\":\"2026-10-20T09:53:00+02:00\",\"dateModified\":\"2026-10-29T20:02:07+01:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/\",\"name\":\"Matteo Cisilino\",\"description\":\"Guide su WordPress, server e sicurezza\",\"inLanguage\":\"de-DE\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.cisilino.com\\\/de\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Speicherplatz von MySQL messen: Welche Datenbank belegt ihn?","description":"Speicherplatz von MySQL messen: Welche Datenbank f\u00fcllt die Serverplatte? Ein Skript vergleicht MySQL und PostgreSQL vorher und nachher.","canonical_url":"https:\/\/www.cisilino.com\/de\/2026\/10\/20\/skript-speicherplatz-datenbank-mysql\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"google-site-verification":"_A-1f0dO30IDVHfP9muflI8kHQs-H4YOi8WLUkYzuLE","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.cisilino.com\/de\/2026\/10\/20\/skript-speicherplatz-datenbank-mysql\/#blogposting","name":"Speicherplatz von MySQL messen: Welche Datenbank belegt ihn?","headline":"Welche Datenbank belegt den Speicherplatz? Ein Skript f\u00fcr MySQL und PostgreSQL","author":{"@id":"https:\/\/www.cisilino.com\/de\/author\/matteocisilino\/#author"},"publisher":{"@id":"https:\/\/www.cisilino.com\/de\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/www.cisilino.com\/wp-content\/uploads\/2026\/10\/speicherplatz-datenbanken-mysql-postgresql.webp","width":1200,"height":630,"caption":"Speicherplatz von MySQL als Ringdiagramm in vier farbige Abschnitte geteilt, rechts drei Legendenbalken"},"datePublished":"2026-10-20T09:53:00+02:00","dateModified":"2026-10-29T20:02:07+01:00","inLanguage":"de-DE","mainEntityOfPage":{"@id":"https:\/\/www.cisilino.com\/de\/2026\/10\/20\/skript-speicherplatz-datenbank-mysql\/#webpage"},"isPartOf":{"@id":"https:\/\/www.cisilino.com\/de\/2026\/10\/20\/skript-speicherplatz-datenbank-mysql\/#webpage"},"articleSection":"Server und Datenbanken, Bash-Skript, MySQL, PostgreSQL, Speicherplatz"},{"@type":"BreadcrumbList","@id":"https:\/\/www.cisilino.com\/de\/2026\/10\/20\/skript-speicherplatz-datenbank-mysql\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.cisilino.com\/de\/#listItem","position":1,"name":"Home","item":"https:\/\/www.cisilino.com\/de\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.cisilino.com\/de\/category\/server-datenbanken\/#listItem","name":"Server und Datenbanken"}},{"@type":"ListItem","@id":"https:\/\/www.cisilino.com\/de\/category\/server-datenbanken\/#listItem","position":2,"name":"Server und Datenbanken","item":"https:\/\/www.cisilino.com\/de\/category\/server-datenbanken\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.cisilino.com\/de\/2026\/10\/20\/skript-speicherplatz-datenbank-mysql\/#listItem","name":"Welche Datenbank belegt den Speicherplatz? Ein Skript f\u00fcr MySQL und PostgreSQL"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.cisilino.com\/de\/#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.cisilino.com\/de\/2026\/10\/20\/skript-speicherplatz-datenbank-mysql\/#listItem","position":3,"name":"Welche Datenbank belegt den Speicherplatz? Ein Skript f\u00fcr MySQL und PostgreSQL","previousItem":{"@type":"ListItem","@id":"https:\/\/www.cisilino.com\/de\/category\/server-datenbanken\/#listItem","name":"Server und Datenbanken"}}]},{"@type":"Organization","@id":"https:\/\/www.cisilino.com\/de\/#organization","name":"Matteo Cisilino","description":"Guide su WordPress, server e sicurezza","url":"https:\/\/www.cisilino.com\/de\/","logo":{"@type":"ImageObject","url":"https:\/\/www.cisilino.com\/wp-content\/uploads\/2026\/10\/logo-cisilino-512.png","@id":"https:\/\/www.cisilino.com\/de\/2026\/10\/20\/skript-speicherplatz-datenbank-mysql\/#organizationLogo","width":512,"height":512,"caption":"Logo: un cerchio a sinistra che si divide in cerchi pi\u00f9 piccoli"},"image":{"@id":"https:\/\/www.cisilino.com\/de\/2026\/10\/20\/skript-speicherplatz-datenbank-mysql\/#organizationLogo"}},{"@type":"Person","@id":"https:\/\/www.cisilino.com\/de\/author\/matteocisilino\/#author","url":"https:\/\/www.cisilino.com\/de\/author\/matteocisilino\/","name":"matteocisilino","image":{"@type":"ImageObject","@id":"https:\/\/www.cisilino.com\/de\/2026\/10\/20\/skript-speicherplatz-datenbank-mysql\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/639872265f0661e8aee8924ba9d756b00ea816f8286fab99a5116c729d49618f?s=96&d=mm&r=g","width":96,"height":96,"caption":"matteocisilino"}},{"@type":"WebPage","@id":"https:\/\/www.cisilino.com\/de\/2026\/10\/20\/skript-speicherplatz-datenbank-mysql\/#webpage","url":"https:\/\/www.cisilino.com\/de\/2026\/10\/20\/skript-speicherplatz-datenbank-mysql\/","name":"Speicherplatz von MySQL messen: Welche Datenbank belegt ihn?","description":"Speicherplatz von MySQL messen: Welche Datenbank f\u00fcllt die Serverplatte? Ein Skript vergleicht MySQL und PostgreSQL vorher und nachher.","inLanguage":"de-DE","isPartOf":{"@id":"https:\/\/www.cisilino.com\/de\/#website"},"breadcrumb":{"@id":"https:\/\/www.cisilino.com\/de\/2026\/10\/20\/skript-speicherplatz-datenbank-mysql\/#breadcrumblist"},"author":{"@id":"https:\/\/www.cisilino.com\/de\/author\/matteocisilino\/#author"},"creator":{"@id":"https:\/\/www.cisilino.com\/de\/author\/matteocisilino\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/www.cisilino.com\/wp-content\/uploads\/2026\/10\/speicherplatz-datenbanken-mysql-postgresql.webp","@id":"https:\/\/www.cisilino.com\/de\/2026\/10\/20\/skript-speicherplatz-datenbank-mysql\/#mainImage","width":1200,"height":630,"caption":"Speicherplatz von MySQL als Ringdiagramm in vier farbige Abschnitte geteilt, rechts drei Legendenbalken"},"primaryImageOfPage":{"@id":"https:\/\/www.cisilino.com\/de\/2026\/10\/20\/skript-speicherplatz-datenbank-mysql\/#mainImage"},"datePublished":"2026-10-20T09:53:00+02:00","dateModified":"2026-10-29T20:02:07+01:00"},{"@type":"WebSite","@id":"https:\/\/www.cisilino.com\/de\/#website","url":"https:\/\/www.cisilino.com\/de\/","name":"Matteo Cisilino","description":"Guide su WordPress, server e sicurezza","inLanguage":"de-DE","publisher":{"@id":"https:\/\/www.cisilino.com\/de\/#organization"}}]},"og:locale":"de_DE","og:site_name":"Matteo Cisilino - Guide su WordPress, server e sicurezza","og:type":"article","og:title":"Speicherplatz von MySQL messen: Welche Datenbank belegt ihn?","og:description":"Speicherplatz von MySQL messen: Welche Datenbank f\u00fcllt die Serverplatte? Ein Skript vergleicht MySQL und PostgreSQL vorher und nachher.","og:url":"https:\/\/www.cisilino.com\/de\/2026\/10\/20\/skript-speicherplatz-datenbank-mysql\/","og:image":"https:\/\/www.cisilino.com\/wp-content\/uploads\/2026\/10\/speicherplatz-datenbanken-mysql-postgresql.webp","og:image:secure_url":"https:\/\/www.cisilino.com\/wp-content\/uploads\/2026\/10\/speicherplatz-datenbanken-mysql-postgresql.webp","og:image:width":1200,"og:image:height":630,"article:published_time":"2026-10-20T07:53:00+00:00","article:modified_time":"2026-10-29T19:02:07+00:00","twitter:card":"summary_large_image","twitter:title":"Speicherplatz von MySQL messen: Welche Datenbank belegt ihn?","twitter:description":"Speicherplatz von MySQL messen: Welche Datenbank f\u00fcllt die Serverplatte? Ein Skript vergleicht MySQL und PostgreSQL vorher und nachher.","twitter:image":"https:\/\/www.cisilino.com\/wp-content\/uploads\/2026\/10\/speicherplatz-datenbanken-mysql-postgresql.webp"},"aioseo_meta_data":{"post_id":"268","title":"Speicherplatz von MySQL messen: Welche Datenbank belegt ihn?","description":"Speicherplatz von MySQL messen: Welche Datenbank f\u00fcllt die Serverplatte? Ein Skript vergleicht MySQL und PostgreSQL vorher und nachher.","keywords":null,"keyphrases":{"focus":{"keyphrase":"speicherplatz von mysql"}},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_custom_url":null,"og_image_custom_fields":null,"og_image_url":null,"og_image_width":null,"og_image_height":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_image_url":null,"twitter_title":null,"twitter_description":null,"schema_type":"default","schema_type_options":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null,"created":"2026-10-29 09:23:45","updated":"2026-10-29 21:59:55","focus_keyword":"speicherplatz datenbank mysql","additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.cisilino.com\/de\/\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.cisilino.com\/de\/category\/server-datenbanken\/\" title=\"Server und Datenbanken\">Server und Datenbanken<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tWelche Datenbank belegt den Speicherplatz? Ein Skript f\u00fcr MySQL und PostgreSQL\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.cisilino.com\/de\/"},{"label":"Server und Datenbanken","link":"https:\/\/www.cisilino.com\/de\/category\/server-datenbanken\/"},{"label":"Welche Datenbank belegt den Speicherplatz? Ein Skript f\u00fcr MySQL und PostgreSQL","link":"https:\/\/www.cisilino.com\/de\/2026\/10\/20\/skript-speicherplatz-datenbank-mysql\/"}],"_links":{"self":[{"href":"https:\/\/www.cisilino.com\/de\/wp-json\/wp\/v2\/posts\/268","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cisilino.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cisilino.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cisilino.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cisilino.com\/de\/wp-json\/wp\/v2\/comments?post=268"}],"version-history":[{"count":2,"href":"https:\/\/www.cisilino.com\/de\/wp-json\/wp\/v2\/posts\/268\/revisions"}],"predecessor-version":[{"id":932,"href":"https:\/\/www.cisilino.com\/de\/wp-json\/wp\/v2\/posts\/268\/revisions\/932"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cisilino.com\/de\/wp-json\/wp\/v2\/media\/754"}],"wp:attachment":[{"href":"https:\/\/www.cisilino.com\/de\/wp-json\/wp\/v2\/media?parent=268"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cisilino.com\/de\/wp-json\/wp\/v2\/categories?post=268"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cisilino.com\/de\/wp-json\/wp\/v2\/tags?post=268"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}