metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-04-23 01:29 pm

Нихт фертшейн

В результате запроса 150000 записей.
Размер временного файла для результата запроса, созданного Firebird - около 2Гб. Этот же результат, экспортированный в CSV - 5 мб.
13 килобайт на запись что ли, во временном файле. И фетч медленный как капец.
Надо, что-ли, во внутренности этого файла заглянуть будет как-нибудь, что ж там такое.
PS: при увеличении количества записей в запросе в 10 раз размер файла становится 2.2 гб. Сплошной wtf.
PPS: да это вообще абсурд - оно пишет во временный файл в три раза больше, чем читает с диска.

[identity profile] anonim-legion.livejournal.com 2013-04-23 05:06 pm (UTC)(link)
Предлагаю бредовое решение - временные файлы на in-memory диске, со включенным сжатием.

[identity profile] metaclass.livejournal.com 2013-04-23 05:14 pm (UTC)(link)
По идее, при достаточном количестве памяти можно будет ее отдать Firebird и он сам перестанет лезть на диск за сортировкой.

[identity profile] anonim-legion.livejournal.com 2013-04-23 05:22 pm (UTC)(link)
Если в csv оно занимает 5мб, а во временных файлах - два гига, значит, эти два гига очень избыточны. Значит их можно сжать на лету, например до 500 мб. Но как вы заставите Firebird сжимать эти временные таблицы внутри его собственной памяти? Никак. Соответсвенно, пусть пишет их на диск, а драйвер диска пускай жмет записанное.

Где вы возьмете по 2гб на каждого из 50 пользователей?

[identity profile] fraks-nsk.livejournal.com 2013-04-24 12:47 am (UTC)(link)
По идее надо просто переписать запрос что бы группировка была по индексу или что бы при сортировке натуралом было минимум полей, остальные приджойнить потом.

[identity profile] metaclass.livejournal.com 2013-04-24 06:22 am (UTC)(link)
Не, тут конкретно все поля нужны, и индекса нет (входные данные - несколько таблиц), без вариантов.

[identity profile] fraks-nsk.livejournal.com 2013-04-24 06:30 am (UTC)(link)
Скинь мне на мыло DDL и запрос, у и в идеале - чуток данных на которых можно опираться.
Не встречался еще с такой ситуацией когда ничего кроме как пилить сервер сделать нельзя.

[identity profile] metaclass.livejournal.com 2013-04-24 06:38 am (UTC)(link)
Сервер пилить не надо, надо алгоритм расчетов модифицировать.
За данные мне безопасники клиента оторвут голову :)

[identity profile] fraks-nsk.livejournal.com 2013-04-24 06:50 am (UTC)(link)
Реальных данных мне не надо, просто такие что бы были похожи и можно было с тобой получаемые цифры обсуждать.

Алгоритм расчетов - это и есть запрос.
В каких-то случаях его можно размазать и на клиента но если у тебя исходные данные на сервере - то лучше их там и обрабатывать а не таскать по сетке.

[identity profile] metaclass.livejournal.com 2013-04-24 07:08 am (UTC)(link)
В данном случае клиентом будет сервер приложений, живущий рядом с FB.
В общем, там все равно надо переделывать, т.к. количество данных линейно растет со временем, поэтому нужно заменить на хранимые агрегаты и отслеживание изменений по ним.

Конкретно с этим запросом на данный момент ничего не сделаешь - он выгребает и сортирует 2 гб данных из двух таблиц соединенных джоином.

[identity profile] fraks-nsk.livejournal.com 2013-04-24 06:34 am (UTC)(link)
мыло fraks собака sibverk точка ru