7.5 KiB
Проверка лимита памяти Trino
Дата: 19 октября 2026 года. Это отчет о проверке; актуальная конфигурация
находится в docker-compose.yml и trino/jvm.config, требования для учащегося —
в START_HERE.md.
Что проверяли
Trino 478 в контейнере с пределом 2 ГиБ RAM, без swap, с Java heap от 512 МиБ
до 1 ГиБ. JVM сама подбирает размер регионов G1; вместо настройки образа
G1HeapRegionSize=32M для большого heap получен регион 1 МиБ.
Среда: Linux x86_64, Docker Engine, cgroup v2, 6 CPU и 11,14 ГиБ памяти, видимых Docker. Остальные сервисы стенда работали одновременно. Общего лимита 8 ГБ для проекта или виртуальной машины в этом прогоне не было.
Исходные файлы основного маршрута курса:
| Файл | Размер, байт |
|---|---|
yellow_tripdata_2024-01.parquet |
49 961 641 |
yellow_tripdata_2024-02.parquet |
50 349 284 |
yellow_tripdata_2024-03.parquet |
60 078 280 |
taxi_zone_lookup.csv |
12 331 |
Файлы взяты из уже скачанного учебного набора, без выборки или сокращения.
Сценарий
-
Перед изменением проверены отсутствие активных Spark-приложений и запросов Trino, чтение существующей таблицы
lakehouse.default.spark_trino_smoke. -
Пересоздан только Trino. Запуск до
SERVER STARTEDзанял около 25 секунд, healthcheck прошел. -
Созданы отдельная временная схема
trino_memory_<id>и собственный префиксvalidation/trino_memory_<id>/raw/в MinIO. Таблицы курса не перезаписывались. -
Spark подготовил bronze и справочник по SQL Модуля 4; фильтры, нормализации, два JOIN со справочником и silver выполнены кодом Модуля 5. Проверки качества этого модуля также прошли. Получены 9 554 778 строк bronze, 9 418 184 строк silver и 265 строк справочника.
-
Через Python-клиент Trino выполнены 11 запросов из Модуля 6: просмотр схем, таблиц и колонок, выборки, подсчет строк, общие метрики, агрегаты по районам и топ-10 зон. Имена таблиц заменены на временные; SQL сохранен.
-
Дополнительно дважды выполнен JOIN всей bronze со справочником зон и группировкой по району:
SELECT z.Borough, count(*) AS trips, avg(b.fare_amount) AS avg_fare FROM <bronze> b LEFT JOIN <zones> z ON b.PULocationID = z.LocationID GROUP BY z.Borough ORDER BY trips DESC; -
Подсчет строк, общие метрики, агрегаты по районам, топ зон, чтение созданной Spark таблицы итогов и оба JOIN сверены с результатами Spark. Для чисел с плавающей точкой использован допуск
1e-8. Ошибки Python-клиента Trino пробрасывались наружу, без обработчика исключений из ноутбука. -
Повторно прочитана прежняя smoke-таблица: результат
1 / from_sparkсохранен. Всего завершились успешно 14 запросов. Временные таблицы удалены сPURGE, затем удалены временная схема и собственный raw-префикс. ПослеPURGEотдельно удалены восемь пустых маркеров каталогов в собственном warehouse-префиксе. Проверено отсутствие временных объектов; исходные Parquet/CSV на хосте сохранены.
Измерения
| Показатель | Результат |
|---|---|
Лимит контейнера (memory.max) |
2 147 483 648 байт |
Лимит swap (memory.swap.max) |
0 |
Фактический MaxHeapSize через jcmd 1 VM.flags |
1 073 741 824 байта |
Пик контейнера Trino (memory.peak) |
1 340 874 752 байта, около 1,25 ГиБ |
События oom, oom_kill, max в memory.events |
0 |
| Перезапуски Trino | 0 |
Пик суммы memory.current восьми контейнеров |
около 5,89 ГиБ |
Пик той же суммы за вычетом inactive_file |
около 5,44 ГиБ |
Суммарная память снималась раз в секунду, получено 165 отсчетов во время
подготовки таблиц, запросов и очистки. Пик Trino взят из счетчика cgroup,
который учитывает и запуск контейнера. Вычитание inactive_file приближает
сумму к показателю памяти в docker stats; файловый кэш показан отдельно.
Агрегаты по silver обработали 9 418 184 строки каждый, что подтверждено
статистикой запросов Trino. count(*) по bronze использовал метаданные Iceberg;
проверкой чтения bronze служил также JOIN со справочником.
Границы вывода
Бюджет Trino 2 ГиБ / heap 1 ГиБ достаточен для проверенных запросов на основном наборе курса при одном учащемся. Измерение не подтверждает работу всех восьми модулей под общим жестким лимитом 8 ГБ. В сумму контейнеров не входят Docker daemon, ядро и другие процессы Linux/WSL2. Docker Desktop, Windows, ARM64, параллельные занятия и расширенный набор Taxi за 12 месяцев не проверялись.
Для повторной проверки подними стенд с этой конфигурацией и пройди модули 3–6 на трех месяцах Taxi, добавив JOIN выше. Временная схема нужна, если важно сохранить существующие учебные таблицы. Примененный лимит можно проверить с хоста:
docker inspect --format '{{.HostConfig.Memory}} {{.HostConfig.MemorySwap}}' trino
docker compose exec trino jcmd 1 VM.flags
docker compose exec trino cat /sys/fs/cgroup/memory.peak
docker compose exec trino cat /sys/fs/cgroup/memory.events
Последние два пути относятся к cgroup v2; счетчики накапливаются с запуска контейнера. Числа нового прогона могут отличаться.