Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];

Вниз

Ibase тормоза   Найти похожие ветки 

 
SasaR   (2004-01-19 17:54) [0]

Не сказал бы, что процедура моя возвращает много данных (20 -30 тыс.строк), но несколько первых тысяч видны в гриде, но при попытке "ехать" вниз или в цикле while not eof do Next сильнейшие тормоза, длящиеся часами...
Что я такого наделал (в смысле может совершил к-ть распространённую ошибку ?)
Как избежать подобного ?


 
Term   (2004-01-19 17:57) [1]

а скоко тогда по твоему много данных???
20-30 млн.?

к тому же чтобы ответить на твой вопрос слишком мало сведений представил


 
SasaR   (2004-01-19 18:09) [2]

есть процедура, в ней делается запрос по "здоровенной" таблице.
Результаты выполнения этой процедуры я вижу сразу, но если я не дай бог нажму в гриде Ctrl-End (в конец) или в цикле захочу пробежаться по данным запроса (напр. чтобы экспортировать в Excel) всё замерзает на часы. В конце-концов в лучш. случае через пару часов пропадают песочные часы и можно свободно лазить по гриду вверх-вниз.
Каким образом тогда Ibase отдает записи в клиентское приложение ?
Частями ? Как это контролировать (типа OnAfterFethRecord есть ли такое)
Пользую FIBDataSet....
Заранее спасибо....


 
}|{yk   (2004-01-19 18:51) [3]

А индексы сделать слабо?


 
jack128   (2004-01-19 19:04) [4]


> Результаты выполнения этой процедуры я вижу сразу
Значит сама процедура отрабатывает быстро.

> но если я не дай бог нажму в гриде Ctrl-End (в конец) или
> в цикле захочу пробежаться по данным запроса (напр. чтобы
> экспортировать в Excel) всё замерзает на часы.
Вывод - очень долгий фетч. Либо данных ОЧЕНЬ много(гораздо больше, чем несколько тысяч записей), либо очень тонкий канал связи(модем???)


 
Desdechado   (2004-01-19 19:55) [5]

20-30 тыс записей для нормальной работы на клиенте не очень-то и нужны. Обычно 100-200 записей уже не в состоянии человек воспринять сразу.
А тормоза оттого, что идет закачка этих данных на клиент. Сервер-то их отделяет быстро, но затолкать их на клиент ему тяжело. Причины: тонкий канал (не пропускает много сразу) или слабый клиент (не может принять то, что сервер готов дать и канал - пропустить).
Рекомендую обходиться без таких выборок. А если хочешь делать экспорт, то делай это в пакетном режиме (без отображения), на однонаправленных курсорах и фоновой задачей.


 
Desdechado   (2004-01-19 20:21) [6]

да, если у тебя строки по 50-100 полей и с блобами, то вообще дрова :)


 
SasaR   (2004-01-20 10:39) [7]

To Desdechado - сервер IB6.0 здесь же, на моей машине, клиентской. Полей - понты. Должно получится ~30 тыс строк из таблицы в 80 тыс.Такое впечатление (прокручиваю в гриде), что сервер отфетчил ~50 записей и замер на 30 сек. кручу вниз - опять 30 сек и т.д... Может где не там suspend ставлю ?
На клиенте делаю фетч в однонаправленном-"невизуальном" TFIBquery ("зелёненкий") в MemoryDataSet из Rx-ов. Внутри цикла - Application.ProcessMessages....
Вы это имели ввиду ?
Кстати запрос там типа "поле <> 9"... может быстрее будет поле in [....] ?


 
Danilka   (2004-01-20 10:49) [8]

А зачем в гриде столько записей?
30тыс записей, это примерно 500 листов формата А4, то-есть юзеру чтива не на одну неделю.
Ненадо работать с клиент-сервером также как и с файл-сервером, всегда можно уточнить запрос, чтобы он вернул не тысячи/мильены записей, а 100-200, тем более, что на самом деле из этих 100-200 записей юзеру реально надо не больше 10-и.


 
Academic   (2004-01-20 10:50) [9]

Оцени скорость работы своей процедуры в стандартном iSQL
InterBase.


 
Sergey13   (2004-01-20 10:54) [10]

Я бы пошел по такому пути:
1. Ответил бы на вопрос - 30000 записей сразу надо? Сомнительно чтой то шибко.
2. Если ответ на вопрос 1 - все таки "Да", то вылизывать процедуру на предмет оптимизации. Например, на поле которое <>9 индекс есть?

>может быстрее будет поле in [....] ?
Вряд ли.


 
Term   (2004-01-20 10:59) [11]

а и зачем для такой задачи писать ХП, если из 80тыс, вибирается 30тыш, попробуй сделать тоже самое запросом, создай индексы, может так скорость увеличится, да и кому надо 30000 записей в Excel, тут тормоза будут еще большие!!!


 
Danilka   (2004-01-20 11:05) [12]


> [10] Sergey13 © (20.01.04 10:54)
> 2. Если ответ на вопрос 1 - все таки "Да",

А есть какой-нибудь пример, когда ответ на вопрос 1 - все таки "Да"? Что-то не могу представить.


 
Danilka   (2004-01-20 11:06) [13]

в догонку: репликация и т.д. в качестве примера не предлагать, только такие примеры, где все это хозяйство вываливается в грид. :))


 
Term   (2004-01-20 11:09) [14]


> А есть какой-нибудь пример, когда ответ на вопрос 1 - все
> таки "Да"? Что-то не могу представить

А может автору имеет смысл просветить нас насчёт предметной области??? я чтото за всю жизнь юзеру 30тыш строк за раз в грид не выдавал, и никакой даже самый извращенный и злобный юзер такого не просил :)))


 
Desdechado   (2004-01-20 11:11) [15]

MemoryDataSet тормознутый на таких объемах. Что, напрямую из TFIBquery слабо сделать экспорт?


 
SasaR   (2004-01-20 11:15) [16]

Я пользую IBExpert. Тормоза - в его гриде :))
Такие же тормоза в моей клиентской программе (там нет грида), но есть фетч, как я выше описал :) Столько данных мне не нужно в гриде, но нужно периодически импортировать их в Эксель.
Индексы есть (IBExpert пишет "не натурал" и всё не красненькое).
Процедура разбита на 4-участка:
Курсоры по:
1. select поля from store where (CROSS_CLI=9)and(CLARICHEV is not null)

2. select поля from store where (CROSS_CLI<>9)and(TOV_COD is not null)

3. select поля from store where ((cross_cli=9)and(clarichev is null))or((cross_cli<>9)and(tov_cod is null))

4. select count(*) from store where (CROSS_CLI is null)
Работало такое сутками.
Тогда я таблицу store дублировал 4-е раза под каждый из случаев
И теперь 2-й запрос(вернее там FOR select CROSS_CLI, TOV_COD from store_2 group by CROSS_CLI, TOV_COD
into :out_cross_cli, :out_tov_cod
do... дальше еще всякие вычисления) фетчит всё такими дикими рывками. Хотя в остальных всех всё плавно, довольно быстро, хотя используются подобные запросы (group by)... может потому, что в первом случае group by по 9-ке и чему угодно, а во втором разные комбинации....


 
Sergey13   (2004-01-20 11:16) [17]

2Danilka © (20.01.04 11:05) [12]
>А есть какой-нибудь пример, когда ответ на вопрос 1 - все таки "Да"? Что-то не могу представить.
Ты меня спрашиваешь?
Я могу предположить только отчет. Но в грид... Это за рамками моего понимания. 8-)


 
Карелин Артем   (2004-01-20 11:16) [18]

Только не надо насчет медленного вывода в ексель!! У меня вывод 60 000 записей 20 полей идет 5 минут. Это при том, что набор данных однонаправленный и занимает в памяти полгига.


 
Term   (2004-01-20 11:19) [19]


> Только не надо насчет медленного вывода в ексель!! У меня
> вывод 60 000 записей 20 полей идет 5 минут. Это при том,
> что набор данных однонаправленный и занимает в памяти полгига.


а ты какими компонентами пользуешся???


 
Карелин Артем   (2004-01-20 11:24) [20]

Term © (20.01.04 11:19) [19]
Ловкость рук и немного OLE. Стукнись в асю - покажу. Но не сегодня.


 
SasaR   (2004-01-20 11:25) [21]

To Term и мне интересно...
Кстати Автор выражает всем благодарность и посыпает голову песком. Проблема была в лишнем индексе по ненужным в данном случае полям и его Ibase брал первым.... Каюсь :))


 
Карелин Артем   (2004-01-20 11:28) [22]

В программулине от EMS есть возможность просмотра плана. Без плана жить нельзя :)


 
Term   (2004-01-20 11:34) [23]


> 2 Карелин Артем © (20.01.04 11:24) [20]

ну я тоже в принципе OLE использую, и макросы которые в экселе создаются, применяю к делфовым COM-объектам... или может у тебя комп навороченный судя по этому:

> и занимает в памяти полгига

у меня оперативы существенно меньше, или ты по другому делаеш, тогда хоть в общих чертах просвети


 
Danilka   (2004-01-20 11:40) [24]

Есть FlexCel - компонент, который умеет сам "рисовать" экселевские файлы на основе шаблонов, без ОЛЕ, по-идее, должно быть быстрее и менее прожорливо, чем через ОЛЕ.
До версии 2.5.3 он шел бесплатно с исходниками, сечай его прибрала к рукам TMS Group и он стал платным, могу выслать версию 2.5.3


 
Term   (2004-01-20 11:49) [25]


> 2 Danilka ©

Вышли плиз... :)))


 
Danilka   (2004-01-20 11:54) [26]

[25] Term © (20.01.04 11:49)
Ушло на почту в анкете.


 
Term   (2004-01-20 12:08) [27]


> Danilka © (20.01.04 11:54) [26]
> [25] Term © (20.01.04 11:49)
> Ушло на почту в анкете.

Спасибо скачал :)))



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.008 c
14-29528
Ega23
2004-01-20 14:59
2004.02.10
Есть такая немецкая команда Rage


3-29213
nomad
2004-01-19 18:31
2004.02.10
процедура в Oracle


4-29658
Doomin
2003-12-05 11:08
2004.02.10
замена ввода в консольном приложении


6-29508
zioza
2003-12-04 09:28
2004.02.10
Помогите разобраться в кодировке при получении письма


14-29549
sad
2004-01-21 08:17
2004.02.10
Lazarus.Win32..Компонент для работы с Interbase Firebird.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский