2012-05-18 2 views
23

У меня есть таблица с большим количеством данных BLOB в столбце. Я пишу утилиту, чтобы сбрасывать данные в файловую систему. Но перед сбрасыванием мне нужно проверить, доступно ли на диске необходимое пространство для экспорта всех полей blob по всей таблице.Вычисление общего размера данных столбца BLOB в таблице

Просьба предложить эффективный подход, чтобы получить размер всех полей blob в таблице.

ответ

30

Вы можете использовать функцию MySQL OCTET_LENGTH(your_column_name). См. here для получения более подробной информации.

+9

OCTET_LENGTH() является синонимом LENGTH() –

20
select sum(length(blob_column)) as total_size 
from your_table 
+0

Спасибо за ответ. Размер, указанный выше, ниже, чем общий размер сбрасываемых файлов на диске. Любая идея о том, что может быть причиной? – jatinpreet

+1

@jatinpreet: Я предполагаю, что это из-за кластеризации файлов в файловых системах. В зависимости от ваших файловых систем файлы будут сохранены, например, в блоках размером 4 КБ. Это может все вокруг. Но это всего лишь предположение. –

2
select sum(length(blob_column_name)) from desired_tablename; 
1

К сожалению, это конкретный БД в лучшем случае.

Чтобы получить общий размер таблицы с сгустками в Oracle Я использую следующий: https://blog.voina.org/?p=374

К сожалению, это не работает в DB2 я до сих пор найти альтернативу.

Простого

select sum(length(blob_column)) as total_size 
from your_table 

не является правильным запрос, как не будет правильно оценить размер блоба на основе ссылки на сгусток, который хранится в столбце BLOB. Вы должны получить фактический выделенный размер на диске для blobs из репозитория blob.