1

Тема: автоматическая оптимизация всех баз данных

Здравствуйте!
Столкнулся с такой проблемой. У меня на моем сервере создано много баз данных, больших и маленьких и периодически необходимо все эти базы оптимизировать т.к. производительность системы сильно падает. Руками оптимизировать каждую базу очень трудоемкая работа. А нельзя ли как-то задать такой запрос чтобы все базы данных оптимизировались автоматически?
PS Не нашел ответа на свой вопрос по форуму, решил создать тему, извиняюсь если этот вопрос уже задавали.

2

Re: автоматическая оптимизация всех баз данных

=USSR=
В документации MySQL смотрите описание программы mysqlcheck: http://dev.mysql.com/doc/refman/5.1/en/mysqlcheck.html
Ключ --optimize определяет необходимость оптимизировать таблицы.
Ключ --all-databases указывает, что требуется выполнить определенную операцию над всеми базами данных.

Обычно не все БД требуют постоянной оптимизации, поэтому можно использовать ключ --databases после которого перечисляются необходимые БД.

Если надо задать только определенные таблицы в БД, то можно использовать перечисление таблиц сразу после ключа --optimize.

Выполнение оптимизации с помощью mysqlcheck можно назначить периодически выполняемой задачей по Cron.

Если нужен именно SQL-запрос для оптимизации таблиц, то он должен выглядеть так:
OPTIMIZE TABLE tbl_name [, tbl_name] ...

Задать оптимизацию всех таблиц определенной БД, запросом нельзя.

3

Re: автоматическая оптимизация всех баз данных

так как правильно составить запрос на оптимизацию всех баз данных?

4

Re: автоматическая оптимизация всех баз данных

=USSR=
Запросом нельзя сделать оптимизацию баз данных, только таблиц.
Если нет доступа к командной строке и нельзя использовть mysqlcheck, то в SQL-запросе надо перечислить все таблицы нуждающиеся в оптимизации. Запрос я указал выше.

5

Re: автоматическая оптимизация всех баз данных

Нужен скрипт который автоматически будет оптимизировать базы данных по крону. Кто сможет написать или посоветовать готовый скрипт?
Услуга оплачивается.

6

Re: автоматическая оптимизация всех баз данных

=USSR=
Если доступа к командной строке нет, то используйте данный PHP скрипт. В массиве пропишите имена баз данных, в функции подключения к MySQL, соответственно, данные учетной записи.

<?php

$aDB = array('db_name_1', 'db_name_2', 'db_name_3'); // Массив имен баз данных.

function Connect() { // Функция подключения к MySQL.
    $link = mysql_connect('localhost', 'root', 'pass') or die('mysql_connect');
    return $link;
}

$link = Connect();

foreach ($aDB as $db_name) {
    $data = array();
    $sql = 'SHOW TABLE STATUS FROM `' . $db_name . '` WHERE `Data_free` > 0';
    $result = mysql_query($sql);
    if (mysql_num_rows($result) > 0) {
        while ($row = mysql_fetch_assoc($result)) {
            $data[] = '`' . $db_name . '`.`' . $row['Name'] . '`';
        }
        mysql_free_result($result);
    } else continue;

    $sql = 'OPTIMIZE TABLE ' . implode(',', $data);
    mysql_query($sql);
}

?>

7

Re: автоматическая оптимизация всех баз данных

Спасибо, попробую.