Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Interbase тормозит... почему? [D7, WinXP]


Страницы:   1 2

Нож ©   (2007-02-06 09:21:00) 

Собственно вопрос. Отчего может тормозить Interbase на локальном компьютере? Метод подключения - localhost:D:\base.gdb NamedPipe, при запросе из IbConsole результат возвращается меньше чем за секунду, в программу ответа ждать приходится секунд 5-6 (50 записей) и 10-12 (больше 100).

Как начинающий базопрограмер никак не могу понять, чего ему от меня надо, чтобы он заработал как следует...


Сергей М.   (2007-02-07 14:38:00) [1]


> Консолью не пользуюсь


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


Desdechado   (2007-02-07 14:03:00) [2]

Консолью не пользуюсь уже лет 8, не помню деталей.


Сергей М.   (2007-02-07 13:50:00) [3]


> Я говорил о выполнении, а не о фетче


А тогда временное сравнение не уместно. То что автор видит в гриде ИБ-консоли - это же результаты выполнения + фетчей.


Desdechado   (2007-02-07 13:09:00) [4]

> Разве TIBSQL фетчит сразу весь результирующий НД ?
Где я такое говорил?
Я говорил о выполнении, а не о фетче.


Сергей М.   (2007-02-07 13:01:00) [5]


> Desdechado ©   (07.02.07 12:51) [20]


> Остальные строки к выполнению отношения не имеют


Разве TIBSQL фетчит сразу весь результирующий НД ?


Сергей М.   (2007-02-07 12:51:00) [6]

Еще раз - ты утверждаешь, что следующий код

i := 0;
iSQL.ExecQuery;
while not ISQL.Eof do begin
Inc(i);
iSQL.Next;
end;
ShowMessage(IntToStr(i) + ' записей в результирующем НД');


выводит на экран фразу '36 записей в результирующем НД', при этом выполняется чуть ли не в 10 раз дольше, нежели выборка и вызуализация того жеНД (те же 36 записей) средствами консоли ?


Desdechado   (2007-02-07 12:51:00) [7]

Поставь брякпойнт на строку:
iSQL.ExecQuery;
И засеки время ее выполнения.
Остальные строки к выполнению отношения не имеют, но влияют на скоростьпоказа формы и поочей измеряемой тобой чепухи.


Нож   (2007-02-07 12:40:00) [8]

По выборке получается 35 результатов, при развёрнутом гриде видно все. Всего в базе 163 записи. При выборке без условия задержка не больше.


Сергей М.   (2007-02-07 12:31:00) [9]

И сколько этих "результатов" ты видишь ?
Равно ли кол-во этих видимыхтобой результатов реальному их кол-ву ?


Нож   (2007-02-07 12:26:00) [10]

Вот я пишу

SELECT * FROM CALLS WHERE "USERID"=21227

секунда не прошла - результаты уже в гриде...


Сергей М.   (2007-02-07 12:25:00) [11]

Что не понял-то ?


Нож   (2007-02-07 12:23:00) [12]

Не понял... объясните :)


Сергей М.   (2007-02-07 12:17:00) [13]


> Если делать SQL QUERY из консоли, меньше секунды - и рез-
> ты у мну.


Неа. Поробуй открыв в консоли этот запрос переместиться в конец НД и удивись - те же грабли по тому же лбу)


Нож   (2007-02-07 12:12:00) [14]

Ага. Отключал вывод в грид, форма показывается быстрее, но всё равно чуть больше 2х секунд. Если делать SQL QUERY из консоли, меньше секунды - и рез-ты у мну.


Сергей М.   (2007-02-07 12:08:00) [15]

Т.е. ты утверждаешь, что выполнение оператора iSQL.ExecQuery длится на порядок дольше, чем если бы тот же запрос был исполнен в консоли ?


Нож   (2007-02-07 12:01:00) [16]

Ок, мне это честно не помогло в разборе тормозов...


Сергей М.   (2007-02-07 11:41:00) [17]


> Полный путь до базы записан как 192.168.0.20


192.168.0.20 - это не localhost


> Используется NamedPipe режим


Зачем именованому каналу IP-адрес хоста ? Именованые каналы на то и именованые, что при их организации оперируют именамиэтих каналов, а не чем-то иным.


Нож   (2007-02-07 11:36:00) [18]

Версия IB 7.1
Полный путь до базы записан как 192.168.0.20:D:\База\СУБД\DBLIST.IB
Используется NamedPipe режим (через TCP/IP ошибка - Host not found)
Используется BDS 2006 без обновлений Architect

Запрос, который тормозит:


   iSQL := TIbSQL.Create(nil);
   iTrn := TIbTransaction.Create(nil);
   try
     iSQL.Database := dmGlobal.ibDatabase;
     iSQL.Transaction := iTrn;
     iTrn.DefaultDatabase := iSQL.Database;
     iTrn.StartTransaction;
     iSQL.GoToFirstRecordOnExecute := True;
     iSQL.SQL.Clear;
     Tmp[20] := 'SELECT * FROM CALLS WHERE ("USERID"='+IntToStr(Login.ID)+')';
     if rbOnlyDone.Checked then Tmp[20] := Tmp[20] +
     ' AND ("DONE"=True)';
     if rbOnlyNotDone.Checked then Tmp[20] := Tmp[20] +
     ' AND ("DONE"=False)';
     if CheckBox1.Checked then Tmp[20] := Tmp[20] +
     ' AND ("NEXTDATE"='+''''+DateToStr(Date)+''''+')';      
     iSQL.SQL.Text := Tmp[20]+ ' ORDER BY "NEXTDATE" DESC';
     try
       iSQL.Prepare;
     except
     end;
     if iSQL.Prepared then begin
       try
         iSQL.ExecQuery;
         sgCallreport.Hide;
         Panel2.Show;
         while not ISQL.Eof do with iSQL.Current do begin
           Tmp[15] := iSQL.Current.ByName('ID').AsString+'|'+(GetOrganization(ByName('ORGID').AsInteger)
           .ByName('ORGNAME').AsString);
           if (Tmp[15]='') then Tmp[15] := 'Предприятие не найдено';

           Row := RowCount-1;
           Cells[1, Row] := Tmp[15];
           RowCount := RowCount + 1;

           Cells[2, Row] := ByName('DATE').AsString;
           Cells[3, Row] := ByName('NEXTDATE').AsString;
           Cells[4, Row] := ByName('SKEM').AsString;
           Cells[5, Row] := ByName('PROJECT').AsString;
           Cells[6, Row] := iif(ByName('DONE').AsBoolean, 'Да', 'Нет');
           iSQL.Next;
         end;
         Panel2.Hide;
         sgCallReport.Show;
       except
       end;
     end;
   finally
     iTrn.Commit;
     iSQL.Free;
     iTrn.Free;
     SetColWidhts(sgCallReport);
     if sgCallReport.Cells[1, sgCallReport.RowCount-1]='' then
       sgCallReport.RowCount := sgCallReport.RowCount-1;
   end;


Что ещё?


Desdechado   (2007-02-06 14:09:00) [19]

> На конкретной версии сервера ты их может и не замечал.
Я ж сказал в [6], что пользовал много разных версий.

> далеко не всякий IB-сервер интерпретирует указание localhost в строке
> коннекта как неявное задействование FileMapping-режима
Я не знаю ни одной версии, которая localhost интерпретирует как локальное, а не удаленной подключение. Может, я что-то пропустил в документации? Или в цитируемом тезисе закралась логическая ошибка.


Сергей М.   (2007-02-06 13:27:00) [20]


> А тормозов от TCP\IP на локалхосте я что-то не замечал?


На конкретной версии сервера ты их может и не замечал. А на некоей другой вполне можешь и заметить, потому что далеко не всякий IB-сервер интерпретирует указание localhost в строке коннекта как неявное задействование FileMapping-режима. И то что "тормозов" ты не замечал, вполне может говорить о работе с сервером, интерпретирующем localhost именно так.

Пока от автора не будет инф-ции о конкретной версии сервера, рассуждать об этом бессмысленно. Я лишь предположил, что речь таки идет о сервере, без проблем работающего с FileMapping, что в условиях локального однопользовательского коннекта всегда эффективней, нежели пайп, NetBios или TCP/IP.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо