Как получить место для хранения таблицы в механизме хранения MariaDB MyRocks - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь получить место, которое таблица, использующая механизм хранения MyRocks, занимает на диске, и я получаю противоречивые результаты между тем, что я ожидаю, запросом на information_schema и размером, сообщаемым ОС.

Чтобы получить размер в соответствии с сообщением MariaDB, я использую следующий оператор выбора:

select table_name 'Table Name',
      (data_length+index_length)/power(1024,3) 'Table Size in GB' 
from information_schema.tables where table_schema="MyTableName";

, который возвращает действительно небольшое число для того, что я делаю, до точки, гдеЯ сомневаюсь, что он сообщает фактический размер (0,4 ГБ для 4 000 000 строк с большим количеством текста).

Если я запускаю команду du -h /var/lib/mysql/#rocksdb/, я получаю размер диска 2,4 ГБ, что немного больше, чем я ожидал.Однако, если я правильно понимаю, MyRocks сжимает данные при вставке данных, поэтому возможно, что дисковое пространство, сообщаемое командой du, не соответствует фактическому размеру таблицы.

Итак, существует ли надежный методполучить размер стола?Я уже использую правильный способ получить размер таблицы?

1 Ответ

0 голосов
/ 14 октября 2018

Похоже, вам нужно использовать POWER(1024,3) вместо POWER(2014,3), предполагая, что механизм хранения - MyISAM:

select table_name AS `Table Name`,
      (data_length+index_length)/power(1024,3) AS `Table Size in GB` 
from information_schema.tables 
where table_schema='MyTableName';

И расчет:

(data_length+index_length)/(2014*2014*2014) = 0.4
=> 
(data_length+index_length) = 3267671497,6

3267671497,6/(1024*1024*1024) = 3.04GB

DATA_LENGTH

Для MyISAM DATA_LENGTH - длина файла данных, в байтах .

Для InnoDB, DATA_LENGTH - этопримерный объем памяти, выделенный для кластеризованного индекса, в байтах.В частности, это размер кластеризованного индекса в страницах, умноженный на размер страницы InnoDB. )

...