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] artureg.livejournal.com 2013-04-23 10:30 am (UTC)(link)
выкинь Firebird :)

[identity profile] metaclass.livejournal.com 2013-04-23 10:36 am (UTC)(link)
Не на этом проекте.
А вот новые надо переселять.

[identity profile] denisioru.livejournal.com 2013-04-23 10:55 am (UTC)(link)
Предрекаю padded строковые данные до своей максимальной длины. А зачем временный файл на 5 МБ данных?

[identity profile] metaclass.livejournal.com 2013-04-23 11:12 am (UTC)(link)
Я посчитал со строками до максимума - 188 байт.
28 мб - это в памяти в rbtree держать надо, а не в i/o в 2гб файл долбится.


[identity profile] falcrum.livejournal.com 2013-04-23 10:59 am (UTC)(link)
Загляни. Разница на три порядка как-то внушает...

[identity profile] metaclass.livejournal.com 2013-04-23 11:15 am (UTC)(link)
Файл временный, самоуничтожается даже если процесс снять. И доступа к нему нет.

[identity profile] volodymir-k.livejournal.com 2013-04-23 11:49 am (UTC)(link)
на нтфс запретите юзеру удаление файлов в каталоге + убить процесс в середине (вариант: в процесс эксплорер есть "шушпенд")

есть флаг DELETE_ON_EXIT для временных, может хендлаться по-всякому

может файловые права и не помогут -- тогда только хардкор

[identity profile] gineer.livejournal.com 2013-04-23 12:01 pm (UTC)(link)
угу... винхексом, да самый дамп ФС :)

[identity profile] metaclass.livejournal.com 2013-04-23 12:05 pm (UTC)(link)
Я подумывал подкрутить флаг в исходниках и пересобрать, благо, собирается оно без проблем сейчас.
Неизвестно, что будет быстрее - то ли так, то ли поставить на виртуалку и выключить ее до фетча записей.

[identity profile] vp.livejournal.com 2013-04-23 11:17 am (UTC)(link)
какая-то натуральная чернь :(

[identity profile] theiced.livejournal.com 2013-04-23 11:20 am (UTC)(link)
ребе, это закон природы же. если на входе чернь то дальше ещё больше черни.

[identity profile] mipa.livejournal.com 2013-04-23 11:43 am (UTC)(link)
Этот файл создается как временный скорее всего (FILE_ATTRIBUTE_TEMPORARY), т.е. никакого IO с диском нет пока хватает памяти.

[identity profile] metaclass.livejournal.com 2013-04-23 11:57 am (UTC)(link)
Да, он такой, но памяти ему не хватает.
При наличии памяти проще было бы отдать ее самому FB, чтобы он вообще на диск не лез.

[identity profile] fraks-nsk.livejournal.com 2013-04-23 04:03 pm (UTC)(link)
Про файлы сортировки можно поискать на sql.ru или спросить у hvlad там же.
На сколько я в курсе в файлах сортировки пишутся все поля во всю декларируемую ширину и все поля участвующие в select.
Или попробовать переписать запрос что бы сортировка была либо раньше линковки большинства полей либо после всех условий ограничения.

[identity profile] metaclass.livejournal.com 2013-04-23 04:20 pm (UTC)(link)
С Владом Хорсуном у меня расхождения во взглядах на тему новомодных лямбда функций :)

[identity profile] fraks-nsk.livejournal.com 2013-04-23 04:06 pm (UTC)(link)
Йоу, я понял.
У тебя сортировка идет натуралом а условия ограничения накладываются после нее.
Тот результат который ты в CSV пишешь и то что во временном файле - это совсем разные вещи.
Кстати во временном файле там не CSV там скорее на DBF похоже, по крайней мере в том что касается строковых полей.

[identity profile] metaclass.livejournal.com 2013-04-23 04:19 pm (UTC)(link)
PLAN SORT (JOIN (ACCNTTRANS INDEX (IDX_ACCTRNS_DATETIME_DEPT), ACCNTTRANSHALFS INDEX (FK_ACCTRNSHALF_ACCNT_XMLOBJ_ID)))

Во временном файле там временные данные сортировщика, причем сортируются данные прошедшие через условие.

[identity profile] fraks-nsk.livejournal.com 2013-04-23 04:07 pm (UTC)(link)
Запрос, DDL и план покажи.

[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