![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Interbase тормозит... почему? [D7, WinXP]
Нож © (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.