powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Почему разная скорость запроса из IBExpert и из программы?
33 сообщений из 33, показаны все 2 страниц
Почему разная скорость запроса из IBExpert и из программы?
    #39517964
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, помогите разобраться?

Вот такой незамысловатый запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select tc.ID,

(with N as (
  select NAME
    from
    TFIOS t inner join SPFIOS s on s.ID=t.IDFIO
  where t.IDCAT = tc.ID and t.idkind = 1
  order by NAME)
select list(NAME, ', ')
from N) as FIOS
from TCATALOG tc order by tc.ID



Из IBExpert выполняется отлично, все данные за несколько секунд.

Сбацал все это в поток в Делфи, вот так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
procedure TFillUpFIOsThread.Execute;
var D: TpFIBDataset;
  RecC: Integer;
begin
  inherited;
  try
    LaDB := TFIBDatabase.Create(nil);
    LaTRN := TFIBTransaction.Create(nil);

    LaDB.DefaultTransaction := LaTRN;

    D := TpFIBDataSet.Create(LaDB);
    D.Database := LaDB;
    D.Transaction := LaTRN;

    LaDB.LibraryName := DM.FIBDB.LibraryName;
    LaDB.UseLoginPrompt := False;
    LaDB.DatabaseName := DM.FIBDB.DatabaseName;
    LaDB.DBParams := DM.FIBDB.DBParams;
    LaDB.SQLDialect := DM.FIBDB.SQLDialect;
    LaDB.DefaultTransaction := LaTRN;
    LaTRN.DefaultDatabase := LaDB;
    LaTRN.TRParams := DM.TRNRead.TRParams;

    LaDB.Connected := True;

    with D do
    begin
      SelectSQL.Text := 'select count(ID) from TCATALOG';
      Open;
      RecC := Fields[0].AsInteger;
      Close; SelectSQL.Clear;
//      SelectSQL.Text := 'select c.ID, (SELECT FIOS FROM CONSTRUCTFIOSLIST(c.ID)) as AUTHLIST from TCATALOG c order by c.ID';
      SelectSQL.Add('select c.ID,');
      SelectSQL.Add('(with N as (');
      SelectSQL.Add('  select NAME');
      SelectSQL.Add('    from');
      SelectSQL.Add('    TFIOS t inner join SPFIOS s on s.ID=t.IDFIO');
      SelectSQL.Add('  where t.IDCAT = c.ID and t.idkind = 1');
      SelectSQL.Add('  order by NAME)');
      SelectSQL.Add('select list(NAME, '', '')');
      SelectSQL.Add('from N) as AUTHLIST');
      SelectSQL.Add('from TCATALOG c '); //order by c.ID
      Open;
      while not EOF do
      begin
        if Terminated then Exit;
        //mutex? ahz
        MainForm.FIOsList.Add(Fields[0].AsInteger, Fields[1].AsString);
        if RecNo mod 1000 = 0 then
        begin
          PBPos := Round(RecNo / RecC * 100);
          Synchronize(MainForm.DrawPBPos);
        end;
        Next;
      end;
      Close;
    end;

  finally
    FreeAndNil(D);
    FreeAndNil(LaTRN);
    FreeAndNil(LaDB);
    Synchronize(MainForm.HidePB);

    if not Terminated then
      FreeAndNil(MainForm.FillUpFIOsThread);
  end;
end;



скорость на пару порядков медленнее, чем из IBE, почему?
Есть процедура, делающая почти то же самое (заремаренная строчка). Если выгружать через нее, то скорость нормальная и из Делфи. Но хочется понять, почему запрос-то из программы так медленно работает?

Спасибо!
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39517980
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Devillio,

в IBExpert кнопочку FetchAll пробовал нажать?
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39517984
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис, конечно ))
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518009
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Devillio, может посмотрим на план?
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518017
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev, это в IBExpert

План
PLAN SORT (JOIN (N T INDEX (TFIOS_IDX_COMMON), N S INDEX (PK_SPFIOS)))
PLAN (TC ORDER PK_TCATALOG)

------ Информация о производительности ------
Время подготовки запроса = 15ms
Время выполнения запроса = 16ms
Среднее время на получение одной записи = 0,55 ms

Как в делфи посмотреть - не знаю :(
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518025
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А точно запрос тормозит, а не заполнение FIOsList?
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518028
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Exteris, есть процедура (заремаренная "CONSTRUCTFIOSLIST"), она собирает такой же список фамилий, как и запрос, только "перебором". Вот если выполнять ее, то она тоже работает быстро (из программы). Ну может чуть медленнее, чем запрос через List в IBE.
Т.о. разница только в работе самого запроса, делфийская составляющая, как мне кажется, работает правильно.
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518059
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если запрос выполняется несколько секунд, то нахрена вся эта возня с тредами, ждалками и т.п.
Вот я разносил по тредам сборы отчетов, которые идут от 5 минут и дольше.

DevillioНо хочется понять, почему запрос-то из программы так медленно работает?Трассировку включи (предполагаю, что ФБ не ниже 2.5)
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518064
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Devillio> Т.о. разница только в работе самого запроса, делфийская
Devillio> составляющая, как мне кажется, работает правильно.

А замеры что показывают? Если всё это из потока вынести то же самое?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518078
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DevillioВремя подготовки запроса = 15ms
Время выполнения запроса = 16ms
сильно сомневаюсь, что эти данные получены при FetchAll (кнопочка такая с ДВУМЯ треугольниками).
В первую очередь надо
- вытащить код из thread, и оформить его в тестовом приложении по кнопке
- замерить время полного выполнения, потом закомментировать FIOsList, и померять еще раз.

p.s. Как-то раз столкнулся с тем, что очень медленно грузились данные из текстового файла. Оказалось, что виноват TStringList. Пришлось переделать обработку на обычный textfile.
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518081
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DevillioТ.о. разница только в работе самого запроса, делфийская составляющая, как мне
кажется
, работает правильно.

Ты наивен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518117
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

TStringList - вообще жутко тормозная вещь. Что, в общем, ппонятно - если посмотреть на его весьма больше список методов, свойства и даже событий.

Жаль в ранних Delphi не было TList<string>
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518122
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сравнение с IBE сильно не честное

Devillio
Код: pascal
1.
   LaDB.Connected := True;



Вот этой дополнительной паузы у IBE нет.

Devillio
Код: pascal
1.
      SelectSQL.Text := 'select count(ID) from TCATALOG';



И этой нет. А это потенциально - считывание ВСЕЙ таблицы с диска и сборка мусора по ней.

Devillio
Код: pascal
1.
          Synchronize(MainForm.DrawPBPos);



И этой - нет.

Devillio
Код: pascal
1.
    Synchronize(MainForm.HidePB);



И этой - нет.


Devillio
Код: pascal
1.
2.
3.
4.
  finally
    FreeAndNil(D);
    FreeAndNil(LaTRN);
    FreeAndNil(LaDB);



А вот здесь ты просто выпрашиваешь access violation

Devillio
Код: pascal
1.
2.
3.
 
      FreeAndNil(MainForm.FillUpFIOsThread);
  end;



А здесь вообще тихий ужас и таймаут неопределенной длительности.
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518133
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch> LaDB.Connected := True;
> Вот этой дополнительной паузы у IBE нет.
> А вот здесь ты просто выпрашиваешь access violation

Желаю чтобы все! (с)

Человек же русским по белому говорит, что
с процедурой у него всё нормально работает.
Тут выяснять надо, где и кто/что кому врёт,
а ты ему про перламутровые пуговицы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518138
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю всех за варианты и советы!!
Arioch, работает же, никаких violation уже с год у кучки народа. Просто ни разу. Т.е. с порядка нескольких десятков тысяч запусков.

если изменить вот так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
      SelectSQL.Text := 'select c.ID, (SELECT FIOS FROM CONSTRUCTFIOSLIST(c.ID)) as AUTHLIST from TCATALOG c order by c.ID';
//      SelectSQL.Add('select c.ID,');
//      SelectSQL.Add('(with N as (');
//      SelectSQL.Add('  select NAME');
//      SelectSQL.Add('    from');
//      SelectSQL.Add('    TFIOS t inner join SPFIOS s on s.ID=t.IDFIO');
//      SelectSQL.Add('  where t.IDCAT = c.ID and t.idkind = 1');
//      SelectSQL.Add('  order by NAME)');
//      SelectSQL.Add('select list(NAME, '', '')');
//      SelectSQL.Add('from N) as AUTHLIST');
//      SelectSQL.Add('from TCATALOG c '); //order by c.ID


То все летает почти так же, как и из IBExpert.
CONSTRUCTFIOSLIST делает ровно то же самое, что и этот запрос с list, только без list, через перебор записей (через list в IBE чуть быстрее).

Т.о. вывод напрашивается - дельфийская составляющая, очень похоже, что ни при чем. То есть, естественно, при чем, но я имею ввиду весь орнамент, который Arioch выделил - он не при чем.

Никаких StringList там нет. Там TDictionary(Integer, String)
Зачем выделено в поток? Программа для библиотеки. Библиографы (их много) делают различные выборки постоянно. От пары-тройки публикаций до тысяч. Программа, получив один раз при запуске (в потоке, чтобы не было задержек запуска) списки авторов для всех публикаций, при запросах выборок очень быстро работает. Списки просто рисуются в OnGetDataText. Предыдущая версия собирала списки при каждом запросе, разница очень заметна.
Я тупо не знал про list, когда делал ))) недавно вот узнал, хотел "оптимизировать", а оно вононоче ))
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518140
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам, вот!! Спасибо ))) Да, так и есть
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518149
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Devillio> Программа, получив один раз при запуске (в потоке, чтобы не было задержек запуска) списки авторов для всех публикаций, при запросах выборок очень быстро работает.

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

Сначала поток, потом предварительный запрос к
TCATALOG (просто замени на число), потом всё
остальное по одному - пока не поймаешь разницу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518188
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Devillio,

к слову, про LIST
https://www.ibase.ru/dbgrowth/
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518218
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv, благодарю за наводку!

Исправил так:
SelectSQL.Add('select cast(list(NAME, '', '') as VARCHAR(4000))'); (4000 - просто что взбрело в голову, 2000 - не прошло, есть публикации где авторы не вместились о.о)

Все полетело, прям заметно ускорилось относительно скорости варианта с процедурой.
Что-то с блобами. Интересно, почему тот запрос без cast в IBE работает быстро
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518241
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если бы дело было с БЛОБами, то медленно было бы и с IBE.

Или у тебя IBE "на сервере", а поток - на клиенте "за тридевять земель"?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518254
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам, нет, конечно. И клиент, и IBE за тридевять земель.
Нет-нет, именно с блобами. Видите, если сделать на сервере в запросе cast и данные пойдут как строка - все хорошо.
Причем, при получении результата запроса с колонкой bloba не только безумно медленно приходят списки авторов в потоке, но и весь клиент явно работает тяжело - дергается как-то, медленно реагирует на мышь, комбобоксы видно как прорисовываются при открытии. А если запрос идет со строчкой - все как обычно, легко и пушисто.
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518268
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DevillioArioch, работает же, никаких violation уже с год у кучки народа.

Привычка плохая. С этими объектами в этих условиях работает.
С другими объектами или даже с другой библиотекой - может перестать.
А у тебя такого кода будет по всей программе распихано, ищи потом где именно и почему именно поехало.

Ну хотя, если вовремя уйдешь на лучшее место, то это будут уже не твои проблемы

Devillioс порядка нескольких десятков тысяч

"select * from table" тоже по первому времени оооочень хорошо работает.
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518271
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DevillioИнтересно, почему тот запрос без cast в IBE работает быстро

а ты уверен, что он реально сами блобы вычитывает? Я вот думаю, что нет - зачем ему это делать?
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518399
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochблобы вычитывает? Я вот думаю, что нет - зачем ему это делать?
а вот да. компоненты могут вытаскивать блобы по мере чтения записей, как это BDE делает. А могут не вытаскивать.
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518436
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochkdv,

TStringList - вообще жутко тормозная вещь. Что, в общем, ппонятно - если посмотреть на его весьма больше список методов, свойства и даже событий.

Жаль в ранних Delphi не было TList<string>

Мнэээ... TStrings?

Кстати. Будучи дремучим склеротиком и не заглядывая в Delphi c 26 мая, засомневался в наличии буквы s на хвосте. Не поленился запустить, набрать слово и нажать F1. Вылез хелп по MS Windows и стал объяснять
____________________________________________________________
Почему не удается получить справку по этой программе?

Справка для этой программы была создана в формате справки Windows, который зависит от компонента, не входящего в данную версию Windows. Для просмотра справки, созданной в формате справки Windows, можно загрузить специальную программу.

Дополнительные сведения см. на веб-сайте справки и поддержки Майкрософт.
______________________________________________________________

Поубывав бы...
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518532
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкаДополнительные сведения см. на веб-сайте справки и поддержки Майкрософт.
______________________________________________________________

Поубывав бы...

Дедусь, а ты https://support.microsoft.com/ru-ru/help/917607/error-opening-help-in-windows-based-programs-feature-not-included-or-h сделай и будет тебе счастье.
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518551
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Счастье" будет скорее, если он на эту
чепуху вообще время тратить не будет.

Если уж чем-то техническим заниматься,
чтобы руки/голову почесать - лучше уж
тогда пару статеек написать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518563
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкаМнэээ... TStrings?
да пофиг. Это был пример того, что удобный в использовании код внезапно может оказаться причиной основных тормозов приложения.
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518564
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам, да там на пару минут. Вообще это лечится копированием одного файла из Windows XP.
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518567
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вообще-то знаю, задолго до твоей ссылки.
И он сам, конечно, нашёл бы решение, если бы хотел.
Но ему нефиг такой фигнёй маяться, и правильно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518600
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GallemarСтарый плюшевый мишкаДополнительные сведения см. на веб-сайте справки и поддержки Майкрософт.
______________________________________________________________

Поубывав бы...

Дедусь, а ты https://support.microsoft.com/ru-ru/help/917607/error-opening-help-in-windows-based-programs-feature-not-included-or-h сделай и будет тебе счастье.

Заклинание сработало, спасибо.
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518602
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам"Счастье" будет скорее, если он на эту
чепуху вообще время тратить не будет.

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


Неправ. Мало ли, на работе вылезет какой мой косяк, с которым сами не разберутся, позвонят. Придётся лезть. Инструмент должен быть в рабочем состоянии. Дельфи, FB, сорцы и базу без данных на момент ухода я установил себе на домашний. А статьи - помилуй, я не понимаю 80% кода, проблемы которого здесь обсуждаются, слов таких не знаю. Какие, в пень, статьи. Мне больше слушать и меньше трындеть полагается.
...
Рейтинг: 0 / 0
Почему разная скорость запроса из IBExpert и из программы?
    #39518607
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С> А статьи - помилуй, я не понимаю 80% кода, проблемы
С> которого здесь обсуждаются, слов таких не знаю.

Так я не про новомодное, а про те же хранимые агрегаты.
В одну статью, может, не уместишься, а вот пару статей
с конкретными примерами было бы неплохо почитать,
тем более, что у тебя вон и формулировки замечательные
были (типа что можно хранить, что нельзя - я, например,
совсем иначе хранил), и даже готовые БД и исходники с
примерами скопипастены.

На эту тему (тем паче в примерах с FB) инфы очень мало.
ДС как-то создал тут тему, так так даже обсуждения как
такового не получилось.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Почему разная скорость запроса из IBExpert и из программы?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]