mysql узнаем объем базы

Дата | 09.02.2021

mysql узнаем объем базы
В mysql узнаем объем базы данных.

mysql> SELECT table_schema `bases`, Round(Sum(data_length + index_length) / 1024 / 1024, 1) `Size in MB` FROM information_schema.TABLES GROUP BY table_schema;
+--------------------+------------+
| bases              | Size in MB |
+--------------------+------------+
| eg_y               |      939.7 |
| ir_y               |      925.6 |
| information_schema |        0.2 |
| kont_y             |      908.9 |
| mysql              |        6.3 |
| performance_schema |        0.0 |
| prept              |      923.9 |
| obmens             |      887.7 |
| sys                |        0.0 |
| test_y             |      709.8 |
+--------------------+------------+
10 rows in set (4.80 sec)

Либо если нужно подсчитать в гигабайтах индивидуально для определенной базы.

mysql> SELECT table_schema `base`, Round(Sum(data_length + index_length) / 1024 / 1024 / 1024, 1) `Size in GB` FROM information_schema.TABLES WHERE table_schema = "test_y";
+----------+------------+
| base     | Size in GB |
+----------+------------+
| test_y   |        0.7 |
+----------+------------+
1 row in set (0.02 sec)

Добавлю, как посчитать объем таблицы в базе.

mysql> SELECT table_name AS `Tab`, Round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB` FROM information_schema.TABLES WHERE table_schema = "test_y" AND table_name = "pow_ks";
+--------+------------+
| Tab    | Size in MB |
+--------+------------+
| pow_ks |       2.33 |
+--------+------------+
1 row in set (0.00 sec)

Либо если нужно посмотреть весь список таблиц с их объемом.

mysql> SELECT table_name AS `Tab`, Round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB` FROM information_schema.TABLES WHERE table_schema = "my_bas";
+-------------------+------------+
| Tab               | Size in MB |
+-------------------+------------+
| ad_ny             |       0.03 |
| ad_no_la          |     130.35 |
| ag                |       0.06 |
| ELEMENT_NAME      |       NULL |
| search            |       0.02 |
| u_sort            |       4.39 |
| sib               |       0.02 |
| goods             |       0.02 |
| t_prop_id         |       0.05 |
| wishes            |       0.02 |
| qtionts           |     250.74 |
+-------------------+------------+
11 rows in set (0.05 sec)

Если нам нужно добавить к выводу информации о таблицах какая структура у таблиц и вес индексов.

mysql> SELECT table_name AS `Tab`, Round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`,ENGINE,TABLE_ROWS,INDEX_LENGTH FROM information_schema.TABLES WHERE table_schema = "site_base";
+-------------------+------------+--------+------------+--------------+
| Tab               | Size in MB | ENGINE | TABLE_ROWS | INDEX_LENGTH |
+-------------------+------------+--------+------------+--------------+
| logs              |       0.08 | InnoDB |          0 |        65536 |
| logs_extensions   |       0.02 | InnoDB |          0 |            0 |
| tokens            |       0.00 | MEMORY |          0 |            0 |
| tokens_aggregate  |       0.00 | MEMORY |          0 |            0 |
| types             |       0.03 | InnoDB |          0 |        16384 |
| activities        |       3.00 | MyISAM |      32278 |      1209344 |
| utf8_conversion   |       0.02 | InnoDB |          0 |            0 |
| vidges            |     107.49 | MyISAM |     566061 |     77364224 |
| vidges_relatives  |     529.17 | MyISAM |    5668228 |    189609984 |
| links             |       0.14 | InnoDB |          6 |       131072 |
| xmap              |       0.00 | MyISAM |         13 |         2048 |
| sitemap           |       0.00 | MyISAM |          1 |         2048 |
+-------------------+------------+--------+------------+--------------+
12 rows in set (0.00 sec)

Столбцы:
ENGINE структура таблицы.
TABLE_ROWS количества записей в таблице.
INDEX_LENGTH размер индекса в таблице (размер в байтах).

Допустим нам нужно вывести в консоли список таблиц базы с пунктом количество столбцов в них.
Если индексы в таблицах битые или их вовсе нет, то займет много времени подсчет строк.

mysql> SELECT TABLE_NAME, COUNT(*) AS COLUMNS_COUNT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'test_y' GROUP BY TABLE_NAME;
+---------------------+---------------+
| TABLE_NAME          | COLUMNS_COUNT |
+---------------------+---------------+
| ad_ny               |             7 |
| ad_no_la            |             4 |
| ag                  |            13 |
| app_password        |            11 |
| connec_buttons      |             6 |
| cloud_opt           |             5 |
| cache_t             |             4 |
| captcha             |             4 |
| spasibo             |             8 |
| goods               |             2 |
| t_prop_id           |             3 |
| wishes              |             4 |
| qtionts             |           117 |
+---------------------+---------------+
12 rows in set (0.02 sec)

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

mysql> SELECT table_name, table_rows FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'barg';
+-----------------+------------+
| table_name      | table_rows |
+-----------------+------------+
| ad_no           |          0 |
| ad_no_la        |          0 |
| ag              |         37 |
| rost            |          0 |
| goods           |        358 |
| tovar_id        |          0 |
| wishes          |          0 |
+-----------------+------------+
7 rows in set (0.02 sec)

Подсчет количество строк в таблице.
Но если индексы к таблице отсутствуют, то выполнения запроса займет какое-то время.

mysql> use test_y;
Database changed
mysql> SELECT COUNT(*) AS strings FROM `qtionts`;
+---------+
| strings |
+---------+
|     117 |
+---------+
1 row in set (0.00 sec)

Подсчет количество таблиц в базе.

mysql> SELECT COUNT(*) AS TABS FROM information_schema.tables WHERE table_schema = 'test_y';
+------+
| TABS |
+------+
|  439 |
+------+
1 row in set (0.01 sec)

Вот и вся инструкция mysql узнаем объем базы.
MariaDB phpmyadmin root.
Как правильно удалять пользователя в базе.
mysql 8 правильная создания пользователя.

4 thoughts on “mysql узнаем объем базы

  1. Василий

    БЗД`эшник, привет!
    Извини, что пишу этот вопрос тут, но предусмотренного для него на сайте места найти не могу.
    Как подписатья на обновления на твоём сайте?
    RSS не нашёл. Может ещё как-то это делается?
    Прикрутил бы ты RSS? Другие БЗД`эшники, думаю, были бы тебе тоже благодарны.

  2. Василий

    *обществу
    (правки нет, а ошибку заметил после отправки)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *