Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
2-1169036841
root
2007-01-17 15:27
2007.02.04
Как узнать под каким пользователем загруженна программа


2-1168999667
DmitrichJ
2007-01-17 05:07
2007.02.04
Ну слишком медленный StringGrid. Что делать?


2-1169105268
s
2007-01-18 10:27
2007.02.04
PChar


2-1168947031
Barma
2007-01-16 14:30
2007.02.04
StringGrid


2-1168951673
RomanH
2007-01-16 15:47
2007.02.04
Fast Report для FIBPlus





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский