Форум: "Базы";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];
ВнизEDBEngineError Найти похожие ветки
← →
Climber © (2006-10-09 06:37) [0]Где фиксить EDBEngineError "Temporary table resourse limit"?.
Спасибо.
← →
Desdechado © (2006-10-09 10:48) [1]Судя по тексту, исчерпан ресурс создания временных таблиц в БДЕ. Либо слишком много открытых запросов одновременно, либо они слишком опухшие.
← →
Climber © (2006-10-09 15:43) [2]это я понял. вот и спрашиваю, может где в настройках БДЕ это можно поправить...
← →
Desdechado © (2006-10-09 15:58) [3]Лечить нужно не симптомы, а болезнь. Т.е. не городить кучу открытых запросов и огромного размера результатов.
С настройками можно поиграться, но это только отсрочит смерть.
BDE Admin - Configuration - System - INIT
+ F1 на каждом параметре
← →
Climber © (2006-10-09 17:45) [4]открытых запросов 2, а огромного размера результата не избежать.. вот и бьюсь..
← →
ЮЮ © (2006-10-10 03:03) [5]Тогда, получается, исчерпан ресурс временной таблицы? :) Но у таблицы то ресурсов - размер файла и количество полей. Но в этом случае и сообщения другие должны быть, ИМХО.
Для начала поставь в запросах WHERE, ограничивающее объем НД. Ошибка исчезает?
← →
Игорь Шевченко © (2006-11-07 12:13) [6]Столкнулся с аналогичной проблемой. Запрос по частям разбивать не хочется, записей в результате запроса больше полумиллиона, запись довольно длинная (~ 40 полей со средней длиной поля порядка 50 символов).
Если кто знает, как побороть, просьба пнуть в нужном направлении. Block Size у драйвера Paradox выставлен по максимуму (в 32К) - на проблему не влияет. У читающей Query выставлено UniDirectional в true, на проблему не влияет.
← →
Desdechado © (2006-11-07 13:05) [7]Если я правильно помню, временные таблицы создаются в том формате, который указан в BDE Admin - Configuration - System - INIT - Default driver
Если проблемы с парадоксовским форматом временных таблиц, можно попробовать dbase. Он не такой капризный, и я его использую для этих целей. Проблем не имел, хотя 40 полей по 50 байтов на поле * 500 тыс записей - не помню таких выборок у себя.
← →
sniknik © (2006-11-07 13:06) [8]114 Temporary table resource limit.
Problem: Getting error "Temporary table resource limit."
When running a query
Versions: All
Possible causes:
* If you"re joining three or more large tables, try to split the query in two
* There"s not enough space on the drive where your private directory is
* There"s not enough space on the drive where your Windows TEMP folder is
* This could be a variation of the "Insufficient disk space." error
* This could be caused by the blocksize for the table being too small.
* This can happen if the resulting answer table will be larger than 512 MB and the query includes sorting and removing duplicates, that is a query with Check. When tables are that large, use CheckPlus to skip the sorting.
← →
Desdechado © (2006-11-07 13:06) [9]> У читающей Query выставлено UniDirectional в true, на проблему не влияет.
И не должно, ибо временный файл создается до того, как результат выборки попадает в квери. А UniDirectional влияет только на буферизацию внутри программы, а не на внешний файл.
← →
sniknik © (2006-11-07 13:09) [10]40*50*500000 - 953мг.
> This can happen if the resulting answer table will be larger than 512 MB ....
← →
Игорь Шевченко © (2006-11-07 13:41) [11]sniknik © (07.11.06 13:06) [8]
База данных из откуда производится выборка - Interbase (Firebird). Если BDE под результат каждого запроса создает парадоксовскую таблицу, то я не совсем понимаю.
Почему не хочу разбивать запрос - запрос служит источником для перегрузки в другой формат и городить огород в данном случае не представляется целесообразным.
> * If you"re joining three or more large tables, try to split
> the query in two
Нет, таблица одна.
> * There"s not enough space on the drive where your private
> directory is
Навалом спейса. 17 гигабайт минимум.
> * There"s not enough space on the drive where your Windows
> TEMP folder is
Навалом спейса.
> * This could be a variation of the "Insufficient disk space.
> " error
Во-первых спейса навалом, во-вторых от сообщения об ошибке одидаются не вариации на тему а точное указание ейной (ошибки) причины.
> * This could be caused by the blocksize for the table being
> too small.
Blocksize менялся с 2048 до 32768 - эффект от изменения BlockSize не замечен.
> * This can happen if the resulting answer table will be
> larger than 512 MB and the query includes sorting and removing
> duplicates, that is a query with Check. When tables are
> that large, use CheckPlus to skip the sorting.
Сортировки нету.
Запрос выглядит как
select
Field1,
Field2,
Field3,
Field4,
.... далее со всеми остановками до станции Можайск
from
Table1
where
Field3 <> someliteral;
Desdechado © (07.11.06 13:06) [9]
> И не должно, ибо временный файл создается до того, как результат
> выборки попадает в квери. А UniDirectional влияет только
> на буферизацию внутри программы, а не на внешний файл.
С этого места пожалуйста подробнее - что за внешний файл, когда содается, где про это написано, как избавиться ?
← →
Desdechado © (2006-11-07 13:53) [12]> что за внешний файл, когда содается, где про это написано, как избавиться ?
Дык, БДЕ при выполнении запросов практически всегда (кроме очень мелких результатов) сбрасывает результаты на диск в Session.PrivateDir. Причем, как я писал в Desdechado © (07.11.06 13:05) [7], в формате default driver.
Избавиться от этих файлов, имхо, невозможно. А вот форматом можно попробовать поиграться.
← →
Anatoly Podgoretsky © (2006-11-07 14:01) [13]> Игорь Шевченко (07.11.2006 13:41:11) [11]
> Если BDE под результат каждого запроса создает парадоксовскую таблицу
Не обязательно, зависит от драйвера по умолчанию, и временные таблицы часто создаются для формирования результата, так же как и в других СУБД, просто БДЕ имеет сильные ограничения на размер и другие вещи, все таки он ориентирован на FAT и разработан ой как давно.
> Навалом спейса. 17 гигабайт минимум.
Не играет роли, ограничение на файлы идет по ДОСу
> С этого места пожалуйста подробнее - что за внешний файл, когда содается, где про это написано, как избавиться ?
Никак, принципы работы, UniDirectional тут не причем, в случае UniDirectional такой файл всегда создается. При том создается не один файл, создается в папке PrivateDir
Попробуй сменить драйвер по умолчанию на dBase может поможет, все таки более простой и экономный формат, особенно dBase VII.
← →
Jeer © (2006-11-07 14:02) [14]
> Игорь Шевченко © (07.11.06 13:41) [11]
> База данных из откуда производится выборка - Interbase (Firebird).
> Если BDE под результат каждого запроса
Зачем тут BDE ?
Почему бы ODBC, например, не использовать ?
← →
Игорь Шевченко © (2006-11-07 14:07) [15]Desdechado © (07.11.06 13:53) [12]
Попробовал поменять Default Driver с Paradox на Dbase и FoxPro. Результат не изменился ни на йоту. Как застревала на 457856-й записи при последовательном чтении, так и продолжает.
Сокращение количества полей в запросе помогает, но поля-то нужны.
Не хотелось бы отказываться от BDE, может как-то можно полечить...
← →
Desdechado © (2006-11-07 14:14) [16]> Попробовал поменять Default Driver с Paradox на Dbase и FoxPro. Результат не изменился ни на йоту.
После изменения настроек БДЕ нужно перестартовывать приложения, использующие БДЕ, чтобы изменения вступили в силу.
← →
Игорь Шевченко © (2006-11-07 14:22) [17]Jeer © (07.11.06 14:02) [14]
> Зачем тут BDE ?
>
> Почему бы ODBC, например, не использовать ?
Не хотелось бы обсуждать вопрос BDE / не BDE.
В самом последнем случае будут использоваться стандартные компоненты доступа к Interbase, но это приведет к довольно большим изменениям, а это время.
← →
Игорь Шевченко © (2006-11-07 14:23) [18]Desdechado © (07.11.06 14:14) [16]
> После изменения настроек БДЕ нужно перестартовывать приложения,
> использующие БДЕ, чтобы изменения вступили в силу.
Даже если бы ты не написал этой фразы в форуме ее пишет BDE Administrator :)
← →
sniknik © (2006-11-07 14:50) [19]по моему единственный вариант остался - делить запрос на несколько.
а кстати, поля какого типа char(50) или varchar(50)? если это имеет значение для BDE/найтивных драйверов :), там же нет строк с переменной длинной.
может размер им "пооптимизировать"? ;) (ну если в какоето максимум 5 символов пишут, а оно по общему формату = 50... в BDE то сделает во временной по определяемому размеру а не по фактическому... лишние мегабайты)
даже если нельзя менять структуру но можно же
select
CAST(Field1 AS Char(20)), //хотя само поле Char(50), но там всего 20 значимых
CAST(Field2 ...
...
попробовать так.
← →
Anatoly Podgoretsky © (2006-11-07 14:55) [20]> Игорь Шевченко (07.11.2006 14:07:15) [15]
Оно не обязано прислушиваться, особенно раз речь про Interbase, но оно может прислушаться.
Драйвер FoxPro не родной, ограниченый, мне помогала установка драйвера dBase IV после этого у меня стали создаваться _sql....dbf файлы
← →
Desdechado © (2006-11-07 16:18) [21]Обходной маневр, но все же:
можно пропробовать в самом IB создать EXTERNAL TABLE c символьными полями, куда выгрузить внутренним запросом типа INSERT... SELECT... нужные данные. А уж потом играться с текстовиком.
ЗЫ Если создать не символьные поля, то всякие INTEGER будут в бинарном виде туда запиханы.
← →
Игорь Шевченко © (2006-11-07 16:24) [22]sniknik © (07.11.06 14:50) [19]
Вариант - это я IBExpress"ом буду пользоваться, если нету гайки в BDE
glitch=false
Я, собстна, обратился к сообществу с целью поиска той самой гайки.
Запрос разделять я не буду принципиально, объяснять причины этой принципиальности не буду тоже :)
← →
Anatoly Podgoretsky © (2006-11-07 17:03) [23]Трудно найти эту гайку в БДЕ
Не расчитано оно было на это
← →
Игорь Шевченко © (2006-11-09 11:47) [24]На всякий случай, может, кому интересно - у IBExpress обнаружились свои глюки.
Получается, что для последовательного чтения данных большого запроса, возвращающего много некоротких полей, среди которых встречаются BLOB"ы, желательно использовать что-то совсем примитивное, не кэширующее и не буферизующее данные. Например, DbExpress.
← →
Jeer © (2006-11-09 11:55) [25]
> у IBExpress обнаружились свои глюки.
Кто бы сомневался: вся жизнь - борьба с глюками, ладно бы только со своими.:)
IBExpert ?
← →
sniknik © (2006-11-09 12:14) [26]> желательно использовать что-то совсем примитивное, не кэширующее и не буферизующее данные. Например, DbExpress.
попробуй еще ADO ;о)), OLEDB драйвер можно вот этот
http://www.zstyle.com.ua/rus/iboledb_prod.htm
у меня с ним получались довольно большие выборки (обмен), и без всяких проблем насколько помню (параметры записи, и количество строк указать не смогу, не помню).
причем никаких "извращений" типа подбора режима выборки не делал, пользовался по умолчанию клиентским курсором и двунаправленным рекордсетом (все одно все данные мне нужны были на клиенте + отображать в гриде тоже нужно было. т.е. ... ну понятно ;о))
← →
ANB © (2006-11-09 12:24) [27]
> Игорь Шевченко © (09.11.06 11:47) [24]
TOracleQuery (из DOA). К сожалению, это тебе не подойдет, но можно поискать аналоги.
← →
ANB © (2006-11-09 12:33) [28]По аналогии могу предположить, что нужен не наследник TDataSet. Из вкладки InterBase я накопал TIBSQL.
Из dbExpress может подойти TSQLQuery (хоть он и является наследником TDataSource). Ща попробуй выгрести им немелкую таблицу из оракла
← →
Игорь Шевченко © (2006-11-09 12:48) [29]Jeer © (09.11.06 11:55) [25]
sniknik © (09.11.06 12:14) [26]
ANB © (09.11.06 12:33) [28]
У меня задача выгрузить из базы данных в некий (неважно какой) внешний источник все данные. Одним запросом. В таблице базы данных порядка миллиона записей, в каждой записи приличное количество полей.
База данных - Firebird.
Единственное, до чего я не дошел - это до ADO, ну и ладно. Наследник DataSet нужен бо удобно Open, Close, Next, Eof и FieldByName
← →
ANB © (2006-11-09 12:59) [30]
> Игорь Шевченко © (09.11.06 12:48) [29]
Выгружать построчно собираешься ? Или хочешь извратиться с гетерогенным запросом ?
Те компоненты, которые я нарисовал поддерживают методы навигации. Нету только редактирования. А TSQLQuery - однонаправленный (почему я и думаю, что он не кэширует все на клиента). Эта, очепятался я. Наследник он TDataSet.
← →
Anatoly Podgoretsky © (2006-11-09 13:00) [31]> Игорь Шевченко (09.11.2006 12:48:29) [29]
Про АДО могу сказать, что пробовал выгружать 6 миллионов записей в двухнаправленый, локальный курсор, проблем у меня не было, правда и БЛОБ полей тоже. Попробуй, едиственная проблема найти правильный OLE DB провайдер для Интербейс, просто по этому поводу много наслушался нелестных слов.
← →
ANB © (2006-11-09 13:02) [32]TSQLQuery 40 тыщ записей выгреб без напряга. Память практически не уел (во всяком случае она не елась при закачке).
ЗЫ. Мне тоже как то нужно было перекачать пару миллионов записей из оракла в ms sql с обработкой на клиенте. Сначала качал через TOracleDataSet. Он ужрал пройденными записями весь файл подкачки и отвалился таки из-за нехватки памяти. Поменял компонент и все заработало.
← →
ANB © (2006-11-09 13:05) [33]Накопал табличку на 10 лимонов записей. ща ее попробую качнуть
← →
ANB © (2006-11-09 13:09) [34]один лимон прошел. полет нормальный, память не жрет.
← →
ANB © (2006-11-09 13:14) [35]второй лимон прошел. уел лишних 32Кб памяти. возможно из-за того, что я сворачивал/разворачивал окошко.
← →
Anatoly Podgoretsky © (2006-11-09 13:22) [36]> ANB (09.11.2006 13:09:34) [34]
Время тоже сообщи.
Для MS SQL 6 миллионов, несколько секунд, машина не то чтобы слабая, но и не мощная - 512 мб памяти. Сеть 100 мбит
← →
sniknik © (2006-11-09 13:27) [37]ANB
размер записи? без этого тест смысла не имеет.
Игорь Шевченко © (09.11.06 12:48) [29]
> Единственное, до чего я не дошел - это до ADO
самое время попробовать. ;о)) может не дошел как раз до того что бы тебе подошло...
тебе даже писать ничего не надо, скачаешь указанный драйвер, установишь (простая регистрация сом обьекта), я тебе вышлю тестовую программку в ней создашь коннект к база и выполнишь запрос к проблемной таблице...
выполнится значит подходит, ошибка - нет, если не устроит скорость открытия но всетаки открывает значит можно использовать с дополнительными настройками по режиму открытия (у меня локальный/двунаправленный т.е. как я обычно использую)
> FieldByName
вот FieldByName я бы не рекомендовал в длинных циклах использовать, только до, для определения переменных TField, а в цикле уже их. дает небольшую экономию времени.
← →
ANB © (2006-11-09 13:44) [38]Прокачалось 10 лимонов записей. Записи короткие. Качалось долго (минут 15), но это все на локальном оракле + я выводил записи на экран. Проц был ужрат процентов на 90 (где то 50 ужел оракл и 40 - приложение). Память приложение практически не уело, из чего можно сделать вывод, что записи не кэшировались. FB по рукой нету, так бы на родных компонентах потренировался.
← →
ANB © (2006-11-09 13:46) [39]
> Записи короткие
байт 30 в сумме. Однако 10 000 000 * 30 = 300 метров (это без накладных расходов). Приложение как съело 10 метров, так и с ними работало. чуток тока дергалось после каждого лимона.
← →
Игорь Шевченко © (2006-11-09 15:04) [40]ANB © (09.11.06 12:59) [30]
Выгружать построчно, никаких гетерогенных запросов, только сами данные.
sniknik © (09.11.06 13:27) [37]
Anatoly Podgoretsky © (09.11.06 13:00) [31]
> Про АДО могу сказать, что пробовал выгружать 6 миллионов
> записей в двухнаправленый, локальный курсор, проблем у меня
> не было, правда и БЛОБ полей тоже. Попробуй, едиственная
> проблема найти правильный OLE DB провайдер для Интербейс,
> просто по этому поводу много наслушался нелестных слов.
>
До ADO просто руки не дошли.
Провайдер для Firebird где-то валяется, скачанный с IBPhoenix.
Идеальным вариантом, наверное была бы прямая работа с клиентской библиотекой Firebird, поскольку мне требуется двигаться по полученному Resultset"у только вперед, то, что прочитано, сохранять не надо, но читать хотелось бы максимально быстро, без двунаправленности, без сохранения результатов запроса в промежуточный файл, и т.д.
Но для идеального варианта, боюсь, придется много писать, а в особенности с BLOB-полями.
Страницы: 1 2 3 вся ветка
Форум: "Базы";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.052 c