+380(66)433-69-36 | |
+380(66)433-69-36 | |
+380(66)433-69-36 |
- BitLocker с GUI под linux
- Ищем вирус elTest
- Работаем с бесплатным SSL сертификатом Letsencrypt с помощью certbot
- Синхронизация ресурсов с удаленного сервера локально
- Применение нестандартного SEO и статус 404
- MySQL синхронизируем права с разных серверов
- IPSec VPN соединение между офисами.
- "Зеркало" сайта на стороне. Донастраиваем nginx
- Дефрагментация таблиц всех баз MySQL
- Месяц в родительном падеже strftime PHP
- INIT скрипт для Dropbox
- osCommerce VAM Edition 226. Ошибки
- PositiveSSL порядок сертификатов
- osCommerce. Создаем модуль доставки
- Восстановление mySQL баз данных
- osCommerce.Перенос магазина в другой домен
- osCommerce.Прячем адмику
- osCommerce. Продление жизни сессий
- osCommerce. Создаем платежный модуль
- 10 причин выбрать нас
- GRUB2 восстановление
- osCommerce не пересчитывает общую сумму заказа
- Список потенциально опасных скриптов
- Отправка файлов из Dropbox по e-mail
- "Черный список" почтовых доменов
- Боремся с назойливыми иностранцами
- Яндекс-Диск, и стоит ли им пользоваться.
- Обновление модуля Интеркассы для osCommerce
- Веб-почта на сайте хостинга
- Подключение Outlook Express к хостингу
Дефрагментация таблиц всех баз MySQL
По мере работы с базами данных мы постоянно меняем их содержимое. Что-то удаляем, добавляем или обновляем - в любом случае новые данные перезаписываются, старые удаляются. В результате получаем дефрагментированные таблицы что в конце концов может сказаться на быстродействии базы данных. Метод оптимизации таких таблиц известен давно команда optimize table в MySQL. Однако команда не предназначена для оптимизции всех или множественных таблиц. Поэтому приходится производить манипуляции для каждой таблица отдельно. Однако если таких таблиц много - то это уже затруднительно. В Интернете довольно много скриптов, которые позволяют упростить эту работу. Здесь приводится один из таких переработанных скриптов, который учитывает ряд факторов. Таблицы в памяти не требуют дефрагментации, а таблицы InnoDB не поддерживают такой подход. Плюс как правило подвергают оптимизации все таблицы, у которых фрагментация больше 0 - т.е. даже те, у которых фрагментировано 1%. Конечно, на больших таблицах это может иметь значение - но в ряде случаев лучше задать порог оптимизации. Ниже приводится сам по себе срипт:
echo -n "MySQL username: " ; read username
echo -n "MySQL password: " ; stty -echo ; read password ; stty echo ; echo
optimize_limit=5
mysql -u $username -p"$password" -NBe "SHOW DATABASES;" | grep -v 'lost+found' | while read database ; do
if [ "$database" = "mysql" ] || [ "$database" = "information_schema" ]; then continue;fi
mysql -u $username -p"$password" -NBe "SHOW TABLE STATUS;" $database |
while read name engine version rowformat rows avgrowlength datalength maxdatalength indexlength datafree autoincrement createtime updatetime checktime collation checksum createoptions comment ;
do
if [ "$datalength" -eq "0" ] || [ "$engine" = "MEMORY" ] || [ "$engine" = "InnoDB" ] ;then continue; fi
fragmentation=$(($datafree * 100 / $datalength))
if [ "$fragmentation" -gt $optimize_limit ] ; then
echo "$database.$name is $fragmentation% fragmented."
mysql -u "$username" -p"$password" -NBe "OPTIMIZE TABLE $name;" "$database"
fi
done
done
При запуске скрипта будет запрошено имя пользователя и пароль. Пользователь должен иметь все необходимые права. Как правило, это root. Переменная optimize_limit - граница оптимизации в процентах. Да, и еще одно важное замечение. На время оптимизации таблицы - она блокируется на запись. Поэтому для очень больших таблиц скрипт нужно запускать во время, коггда нет активной работы с таблицами, или все-таки производить их оптимизацию вручную.