Со временем, таблицы InnoDB в MySQL начинают сильно фрагментироваться и как результат, “тормозить”. Поэтому, их время от времени нужно “дефрагментировать”.
Вот такой простейший скрипт defrag.php решит проблему фрагментации:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<?php. $link=mysqli_connect('localhost', 'root', 'ВашПароль'); if (!$link) { die('Ошибка соединения: ' . mysql_error()); } echo "Успешно соединились\n"; $res = mysqli_query($link,'SHOW DATABASES'); while (list($dbname) = mysqli_fetch_row($res)) { mysqli_select_db($link, $dbname); $rec = mysqli_query($link, 'SHOW TABLE STATUS'); while ($data = mysqli_fetch_object($rec)) if ($data->Engine == 'InnoDB') { echo 'Processing ', $dbname, '.', $data->Name, ' ... '; flush(); mysqli_query($link, "ALTER TABLE {$data->Name} ENGINE=InnoDB"); mysqli_query($link, "OPTIMIZE TABLE {$data->Name};"); echo "done.n"; } mysqli_free_result($rec); } mysqli_free_result($res); |
Выполняется данный скрипт из консоли:
1 |
php defrag.php |
Leave a Reply