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

Date: 2013-04-23 10:30 am (UTC)
From: [identity profile] artureg.livejournal.com
выкинь Firebird :)

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 6th, 2025 06:26 am
Powered by Dreamwidth Studios