Ответ
Размер БД можно определить через системные запросы СУБД или проверку файлов на диске. Способ зависит от типа базы данных.
1. Через SQL-запросы (JDBC):
PostgreSQL:
String sql = "SELECT pg_database_size(current_database());"; // Размер текущей БД в байтах
// Или для конкретной БД:
// SELECT pg_database_size('my_database_name');
try (Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
if (rs.next()) {
long sizeInBytes = rs.getLong(1);
System.out.println("Database size: " + sizeInBytes + " bytes");
}
}
MySQL / MariaDB:
-- Суммарный размер всех таблиц в БД
SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size_MB"
FROM information_schema.tables
WHERE table_schema = DATABASE();
2. Для встраиваемых/файловых БД (H2, SQLite): Можно измерить размер файла(ов) БД средствами Java NIO:
import java.nio.file.*;
Path dbPath = Paths.get("./database.mv.db"); // Файл H2
long fileSize = Files.size(dbPath); // Размер в байтах
System.out.println("DB file size: " + fileSize + " bytes");
// Для SQLite обычно один файл .db или .sqlite
3. Практическое замечание:
Размер БД в запросе (pg_database_size) обычно включает данные, индексы, но может не включать служебные файлы (WAL, временные файлы). Полный размер на диске может быть больше. Для точной оценки в production-среде также стоит учитывать:
- Размер логов транзакций.
- Пространство, зарезервированное для авторасширения (autoextend).
- Сжатие данных, если оно используется.