log->error("\nThis script will show table data, index and free space used. The argument needed is numeric.\n\n" ."php $argv[0] 1 ...: To show all tables with data + index space used greater than 1MB or free space greater than 1MB.\n" ."php $argv[0] .01 ...: To show all tables with data + index space used greater than .01MB or free space greater than .01MB.\n")); } passthru('clear'); $data = $index = $total = $free = 0; $table_data = "SELECT TABLE_NAME AS 'Table', TABLE_ROWS AS 'Rows', " ."ENGINE AS 'engine', " ."CREATE_OPTIONS AS 'format', " ."((DATA_LENGTH) / POWER(1024,2)) AS 'data', " ."((INDEX_LENGTH) / POWER(1024,2)) AS 'index', " ."((DATA_FREE) / POWER(1024,2)) AS 'free', " ."((DATA_LENGTH + INDEX_LENGTH) / POWER(1024,2)) AS 'total' " ."FROM information_schema.TABLES WHERE information_schema.TABLES.table_schema = '".env('DB_NAME')."' " .'ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC'; $run = $pdo->queryDirect($table_data); $mask = $pdo->log->headerOver('%-25.25s ').$pdo->log->primaryOver("%7.7s %10.10s %15.15s %15.15s %15.15s %15.15s\n"); printf($mask, 'Table Name', 'Engine', 'Row_Format', 'Data Size', 'Index Size', 'Free Space', 'Total Size'); printf($mask, '=========================', '=======', '==========', '===============', '===============', '===============', '==============='); if ($run instanceof \Traversable) { foreach ($run as $table) { if ($table['total'] > $argv[1] || $table['free'] > $argv[1]) { printf($mask, $table['table'], $table['engine'], str_replace('row_format=', '', $table['format']), number_format($table['data'], 2).' MB', number_format($table['index'], 2).' MB', number_format($table['free'], 2).' MB', number_format($table['total'], 2).' MB'); } $data += $table['data']; $index += $table['index']; $free += $table['free']; $total += $table['total']; } } printf($mask, '=========================', '=======', '==========', '===============', '===============', '===============', '==============='); printf($mask, 'Table Name', 'Engine', 'Row_Format', 'Data Size', 'Index Size', 'Free Space', 'Total Size'); printf($mask, '', '', '', number_format($data, 2).' MB', number_format($index, 2).' MB', number_format($free, 2).' MB', number_format($total, 2).' MB'); $myisam = $pdo->queryOneRow('SELECT CONCAT(ROUND(KBS/POWER(1024,IF(pw<0,0,IF(pw>3,0,pw)))+0.49999), ' ."SUBSTR(' KMG',IF(pw<0,0,IF(pw>3,0,pw))+1,1)) recommended_key_buffer_size " .'FROM (SELECT SUM(index_length) KBS ' .'FROM information_schema.tables ' ."WHERE engine='MyISAM' AND table_schema NOT IN ('information_schema','mysql')) A, (SELECT 3 pw) B;", false); $innodb = $pdo->queryOneRow('SELECT CONCAT(ROUND(KBS/POWER(1024,IF(pw<0,0,IF(pw>3,0,pw)))+0.49999), ' ."SUBSTR(' KMG',IF(pw<0,0,IF(pw>3,0,pw))+1,1)) recommended_innodb_buffer_pool_size " .'FROM (SELECT SUM(index_length) KBS ' .'FROM information_schema.tables ' ."WHERE engine='InnoDB') A,(SELECT 3 pw) B;", false); $a = $myisam['recommended_key_buffer_size']; if ($myisam['recommended_key_buffer_size'] === null) { $a = '12M'; } $b = $innodb['recommended_innodb_buffer_pool_size']; if ($innodb['recommended_innodb_buffer_pool_size'] === null) { $b = '12M'; } // Get current variables $aa = $pdo->queryOneRow("SHOW VARIABLES WHERE Variable_name = 'key_buffer_size'", false); $bb = $pdo->queryOneRow("SHOW VARIABLES WHERE Variable_name = 'innodb_buffer_pool_size'", false); if ($aa['value'] >= 1073741824) { $current_a = $aa['value'] / 1024 / 1024 / 1024; $current_a .= 'G'; } else { $current_a = $aa['value'] / 1024 / 1024; $current_a .= 'M'; } if ($bb['value'] >= 1073741824) { $current_b = $bb['value'] / 1024 / 1024 / 1024; $current_b .= 'G'; } else { $current_b = $bb['value'] / 1024 / 1024; $current_b .= 'M'; } echo $pdo->log->headerOver("\n\nThe recommended minimums are:\n"); echo $pdo->log->primaryOver('MyISAM: key-buffer-size = ').$pdo->log->alternate($a); echo $pdo->log->primaryOver('InnoDB: innodb_buffer_pool_size = ').$pdo->log->alternate($b); echo $pdo->log->headerOver("\nYour current setting are:\n"); echo $pdo->log->primaryOver('MyISAM: key-buffer-size = ').$pdo->log->alternate($current_a); echo $pdo->log->primaryOver('InnoDB: innodb_buffer_pool_size = ').$pdo->log->alternate($current_b);