SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.10.2013 18:13:53

Slorvengo
Завсегдатай
Зарегистрирован: 08.08.2013
Сообщений: 46

Размер БД, кол-во таблиц в БД

Добрый день...

Для вычисления размера папки - нашел замечательную функцию, которая работает через exec
Вычисление происходит моментально (условно говоря).

Код:

function uf_getDirSize($dir, $unit = 'm')
{
    $dir = trim($dir, '/');
    if (!is_dir($dir)) {
        trigger_error("{$dir} not a folder/dir/path.", E_USER_WARNING);
        return false;
    }
    if (!function_exists('exec')) {
        trigger_error('The function exec() is not available.', E_USER_WARNING);
        return false;
    }
    $output = exec('du -sb ' . $dir);
    $filesize = (int) trim(str_replace($dir, '', $output));
    switch ($unit) {
        case 'g': $filesize = number_format($filesize / 1073741824, 3) . " g"; break;  // giga
        case 'm': $filesize = number_format($filesize / 1048576, 1) . " m";    break;  // mega
        case 'k': $filesize = number_format($filesize / 1024, 0) . " k";       break;  // kilo
        case 'b': $filesize = number_format($filesize, 0) . " b";               break;  // byte
    }
    
    //return ( $filesize + 0 );
    return $filesize;
    
}

Имеется потребность также вычислить размер БД, и узнать кол-во таблиц в ней.

Нашел вот-такие sql-запросы вида:

Код:

//Вариант №1

SELECT table_schema                                        "DB Name", 
   Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" 
FROM   information_schema.tables 
GROUP  BY table_schema;

//Вариант №2
$link = mysql_connect('host', 'username', 'password');
 
$db_name = "your database name here";
$tables = array();
 
mysql_select_db($db_name, $link);
$result = mysql_query("SHOW TABLE STATUS");
 
while($row = mysql_fetch_array($result)) {
    /* We return the size in Kilobytes */
    $total_size = ($row[ "Data_length" ] + 
                   $row[ "Index_length" ]) / 1024;
    $tables[$row['Name']] = sprintf("%.2f", $total_size);
}
 
print_r($tables);

Есть ли что ни будь похожее через exec для mysql - комманда?, через которую можно узнать размер БД, а также кол-во таблиц в ней?. Или только запрос к таблице information_schema...

Есть еще небольшой вопрос про таблицу information_schema - что будет если ее удалить? Или что-то в ней поменять. Работоспособность сайта будет нарушена, или нет... И всегда ли эта таблица имеется на хостинге, где работает mysql-сервер?

И наверное даже вопрос - как лучше посчитать кол-во таблиц и размер БД - что бы это было "как бы мультихостингово".

--
Спасибо.

Отредактированно Slorvengo (15.10.2013 18:25:37)

Неактивен

 

#2 15.10.2013 19:47:40

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5831

Re: Размер БД, кол-во таблиц в БД

Slorvengo написал:

Есть еще небольшой вопрос про таблицу information_schema - что будет если ее удалить? Или что-то в ней поменять. Работоспособность сайта будет нарушена, или нет... И всегда ли эта таблица имеется на хостинге, где работает mysql-сервер?

information_schema удалить нельзя
наличие зависит от версии сервера mysql

Неактивен

 

#3 15.10.2013 20:39:19

Slorvengo
Завсегдатай
Зарегистрирован: 08.08.2013
Сообщений: 46

Re: Размер БД, кол-во таблиц в БД

Спасибо за ответ.
Значит буду спокойно использовать:

Код:

SELECT table_schema                                        "DB Name", 
   Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" 
FROM   information_schema.tables 
GROUP  BY table_schema;

--
Еще раз спасибо.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson