diff --git a/scripts/sql/probe.php b/scripts/sql/probe.php new file mode 100755 index 0000000000..ac953e6dd1 --- /dev/null +++ b/scripts/sql/probe.php @@ -0,0 +1,69 @@ +#!/usr/bin/env php +establishConnection('r'); +$databases = queryfx_all($conn_r, 'SHOW DATABASES'); +foreach ($databases as $database) { + $name = head($database); + queryfx($conn_r, 'USE %C', $name); + $tables = queryfx_all( + $conn_r, + 'SHOW TABLE STATUS'); + $tables = ipull($tables, null, 'Name'); + $data[$name] = $tables; +} + +$totals = array_fill_keys(array_keys($data), 0); +$overall = 0; + +foreach ($data as $db => $tables) { + foreach ($tables as $table => $info) { + $table_size = $info['Data_length'] + $info['Index_length']; + + $data[$db][$table]['_totalSize'] = $table_size; + $totals[$db] += $table_size; + $overall += $table_size; + } +} + +echo "APPROXIMATE TABLE SIZES\n"; +asort($totals); +foreach ($totals as $db => $size) { + printf("%-32.32s %18s\n", $db, fmt($totals[$db], $overall)); + $data[$db] = isort($data[$db], '_totalSize'); + foreach ($data[$db] as $table => $info) { + printf(" %-28.28s %18s\n", $table, fmt($info['_totalSize'], $overall)); + } +} +printf("%-32.32s %18s\n", 'TOTAL', fmt($overall, $overall)); + +function fmt($n, $o) { + + return sprintf( + '%8.8s MB %5.5s%%', + number_format($n / (1024 * 1024), 1), + sprintf('%3.1f', 100 * ($n / $o))); +} + +