Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

Если заканчивается место на разделе с  базами данных, вы можете посмотреть какие базы занимают  много места.

Обычно это ecss_calls_db,  ecss_audit,  ecss_statistics.

Посмотреть размер базы можно через ОС командой:

  1. В операционной системе командой:

    sudo du -h /var/lib/ecss-mysql
    ecss1> sudo du -h /var/lib/ecss-mysql
    220K    /var/lib/ecss-mysql/ecss_system
    2.1M    /var/lib/ecss-mysql/web_conf
    28M     /var/lib/ecss-mysql/ecss_address_book
    1.1M    /var/lib/ecss-mysql/ecss_dialer_db
    220K    /var/lib/ecss-mysql/ecss_numbers_db
    6.3G    /var/lib/ecss-mysql/ecss_statistics
    112K    /var/lib/ecss-mysql/history_db
    57M     /var/lib/ecss-mysql/ecss_meeting_db
    9.4G    /var/lib/ecss-mysql/ecss_audit
    12G    /var/lib/ecss-mysql/ecss_calls_db
    26M     /var/lib/ecss-mysql/ecss_subscribers
    24G     /var/lib/ecss-mysq
  2. Или внутри mysql командой
SELECT table_schema "database_name", sum( data_length + index_length )/1024/1024 "Real Size in MB", sum(data_free)/1024/1024 "Free data", sum(data_length + data_free + index_length)/1024/1024 "Size on Filesystem" FROM information_schema.TABLES GROUP BY table_schema;
mysql> SELECT table_schema "database_name", sum( data_length + index_length )/1024/1024 "Real Size in MB", sum(data_free)/1024/1024 "Free data", sum(data_length + data_free + index_length)/1024/1024 "Size on Filesystem" FROM information_schema.TABLES GROUP BY table_schema;
+--------------------+-----------------+---------------+--------------------+
| database_name      | Real Size in MB | Free data     | Size on Filesystem |
+--------------------+-----------------+---------------+--------------------+
| ecss_address_book  |      9.09375000 |    8.00000000 |        17.09375000 |
| ecss_audit         |   3982.21875000 | 5455.00000000 |      9437.21875000 |
| ecss_calls_db      |   4846.84375000 | 6677.50000000 |      11699.02343750|
| ecss_dialer_db     |      0.45312500 |    0.00000000 |         0.45312500 |
| ecss_meeting_db    |     45.79687500 |    6.00000000 |        51.79687500 |
| ecss_numbers_db    |      0.03125000 |    0.00000000 |         0.03125000 |
| ecss_statistics    |   5898.81250000 |    5.00000000 |      5903.81250000 |
| ecss_subscribers   |     16.07812500 |    4.00000000 |        20.07812500 |
| ecss_system        |      0.03125000 |    0.00000000 |         0.03125000 |
| history_db         |      0.01562500 |    0.00000000 |         0.01562500 |
| information_schema |      0.15625000 |   80.00000000 |        80.15625000 |
| mysql              |      3.10166645 |    4.00092316 |         7.10258961 |
| performance_schema |      0.00000000 |    0.00000000 |         0.00000000 |
| sys                |      0.01562500 |    0.00000000 |         0.01562500 |
| web_conf           |      0.59375000 |    0.00000000 |         0.59375000 |
+--------------------+-----------------+---------------+--------------------+
15 rows in set (0.02 sec)

В таблице  мы имеем 3 значения размеров.

  1. Real size in MB - это полезные данные.
  2. Free data - пустое место "между"  полезными данными. Оттуда ранее была удалена информация,  у которой истек  срок хранения.
  3. Size on filesystem - реально занимаемоем место на  диске. Это сумма "Real size in MB" и " Free data"


Чтобы освободить место на диске, не обязательно удалять реальные данные из таблицы, ее можно оптимизировать (передвинуть данные, что бы они шли подряд,без разрывов  т.е пустых мест).

В mysql нельзя просто выполнить оптимизацию БАЗЫ, можно выполнить оптимизацию таблиц, поэтому, нужно узнать, какие таблицы содержат  "разрывы", пустые места.


Для примера возьмем  базу ecss_calls_db

Воспользуемся командой:

 SELECT table_name,data_free/1024/1024 "Free data",sum(index_length/1024/1024+data_length/1024/1024) "Real_size in MB" from information_schema.TABLES where table_schema = 'ecss_calls_db' group by table_name;
mysql> select table_name,data_free/1024/1024 "Free data",sum(index_length/1024/1024+data_length/1024/1024) "Real_size in MB" from information_schema.TABLES where table_schema = 'ecss_calls_db' group by table_name;
+-------------+---------------+-----------------+
| table_name  | Free data     | Real_size in MB |
+-------------+---------------+-----------------+
| cdr         | 3244.50000000 |   2282.33593750 |
| counters    |    0.00000000 |      0.01562500 |
| data        |    0.00000000 |      0.01562500 |
| inodes      |    0.00000000 |      0.04687500 |
| ss          |   98.00000000 |     54.96093750 |
| tolltickets | 3332.00000000 |   2684.07031250 |
| tree        |    0.00000000 |      0.04687500 |
| tree_view   |          NULL |            NULL |
| variables   |    0.00000000 |      0.01562500 |
| version     |    0.00000000 |      0.01562500 |
+-------------+---------------+-----------------+
10 rows in set (0.00 sec)

Отсюда можно увидеть, что всего 2 таблицы имеют "пустоты", и только для них необходима оптимизация.

Выполним оптимизацию таблицы cdr командой

optimize table ecss_calls_db.cdr;
mysql> optimize table cdr;
+-------------------+----------+----------+-------------------------------------------------------------------+
| Table             | Op       | Msg_type | Msg_text                                                          |
+-------------------+----------+----------+-------------------------------------------------------------------+
| ecss_calls_db.cdr | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| ecss_calls_db.cdr | optimize | status   | OK                                                                |
+-------------------+----------+----------+-------------------------------------------------------------------+
2 rows in set (2 min 18.51 sec)

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

Проверим, остались ли пустоты в таблице cdr командой:

SELECT table_name,data_free/1024/1024 "Free data",sum(index_length/1024/1024+data_length/1024/1024) "Real_size in MB" from information_schema.TABLES where table_schema = 'ecss_calls_db' group by table_name;
mysql> select table_name,data_free/1024/1024 "Free data",sum(index_length/1024/1024+data_length/1024/1024) "Real_size in MB" from information_schema.TABLES where table_schema = 'ecss_calls_db' group by table_name;
+-------------+---------------+-----------------+
| table_name  | Free data     | Real_size in MB |
+-------------+---------------+-----------------+
| cdr         |    5.00000000 |   2107.65625000 |
| counters    |    0.00000000 |      0.01562500 |
| data        |    0.00000000 |      0.01562500 |
| inodes      |    0.00000000 |      0.04687500 |
| ss          |   98.00000000 |     54.96093750 |
| tolltickets | 3332.00000000 |   2684.07031250 |
| tree        |    0.00000000 |      0.04687500 |
| tree_view   |          NULL |            NULL |
| variables   |    0.00000000 |      0.01562500 |
| version     |    0.00000000 |      0.01562500 |
+-------------+---------------+-----------------+

Далее,  optimize можно выполнить и с другими таблицами

  • Нет меток