Текущий архив: 2007.02.25;
Скачать: CL | DM;
ВнизInterbase тормозит... почему? Найти похожие ветки
← →
Нож (2007-02-06 09:21) [0]Собственно вопрос. Отчего может тормозить Interbase на локальном компьютере? Метод подключения - localhost:D:\base.gdb NamedPipe, при запросе из IbConsole результат возвращается меньше чем за секунду, в программу ответа ждать приходится секунд 5-6 (50 записей) и 10-12 (больше 100).
Как начинающий базопрограмер никак не могу понять, чего ему от меня надо, чтобы он заработал как следует...
← →
Сергей М. © (2007-02-06 10:21) [1]
> Метод подключения - localhost:D:\base.gdb NamedPipe
Какой же это NamedPipe ? Это TCP/IP-коннект !
При локальном коннекте строка подключения должна выглядеть как D:\base.gdb, при этом используется не TCP/IP и не NamedPipes, а FileMapping
← →
Нож (2007-02-06 10:22) [2]ну я имею в виду что лежит у меня на компе там же где сервер стоит и клиента запускаю с того же компа, но по совету многих пишу localhost:D:\base.gdb :-)
Кстати, с TCP/IP с удалённых машин работать вообще не хочет - Host not found или что-то вроде того...
← →
Сергей М. © (2007-02-06 10:31) [3]
> при запросе из IbConsole результат возвращается меньше чем
> за секунду
А как выглядит строка подключения в IbConsole ?
p.s.
Вместо IBConsole пользуй IBExpert
← →
Desdechado © (2007-02-06 11:42) [4]> При локальном коннекте строка подключения должна выглядеть как D:\base.gdb
Такой вариант допустим, но с категоричным словом должна я категорически не согласен. Предпочтительным является все-таки соединение через TCP\IP. А в случае многопользовательском - это вообще единственный вариант, в т.ч. для программ, находящихся непосредственнона сервере.
> с удалённых машин работать вообще не хочет - Host not found или что-то вроде того...
Желательно это "что-то вроде" привести дословно, чтобы не было ответа "почеши затылок или что-то вроде".
Теперь по сабжу. Ты измеряешь только скорость выполнения запроса или скорость выполнения + доставания всего результата на клиента? Во втором случае время больше. Причем некоторые программы по умолчанию фетчат с сервера только первую порцию данных, необходимую для отображения. А кэширующие компоненты в Дельфи по умолчанию фетчат весь результат. И при большом количестве данных (много строк или строки длинные) разница заметна.
← →
Сергей М. © (2007-02-06 12:11) [5]
> Предпочтительным является все-таки соединение через TCP\IP
Предпочтительным кем ?
То что та или иная версия IB (автор ее умалчивает) может некорретно работать с коннектом по FileMapping (или вообще не работать), еще не говорит о каких-то "предпочтениях" для конкретной ситуации.
ТСР/IP для данного случая - пятое колесо в телеге, лишние "тормоза".
← →
Desdechado © (2007-02-06 13:03) [6]Сергей М. © (06.02.07 12:11) [5]
Ты сам осветил проблемы "с коннектом по FileMapping". Так что лучше избегать проблем, чем лечить их.
А тормозов от TCP\IP на локалхосте я что-то не замечал? хоть пользую егоинтенсивно и очень давно на самых разных версиях. Что я неправильно делаю?
← →
Сергей М. © (2007-02-06 13:27) [7]
> А тормозов от TCP\IP на локалхосте я что-то не замечал?
На конкретной версии сервера ты их может и не замечал. А на некоей другой вполне можешь и заметить, потому что далеко не всякий IB-сервер интерпретирует указание localhost в строке коннекта как неявное задействование FileMapping-режима. И то что "тормозов" ты не замечал, вполне может говорить о работе с сервером, интерпретирующем localhost именно так.
Пока от автора не будет инф-ции о конкретной версии сервера, рассуждать об этом бессмысленно. Я лишь предположил, что речь таки идет о сервере, без проблем работающего с FileMapping, что в условиях локального однопользовательского коннекта всегда эффективней, нежели пайп, NetBios или TCP/IP.
← →
Desdechado © (2007-02-06 14:09) [8]> На конкретной версии сервера ты их может и не замечал.
Я ж сказал в [6], что пользовал много разных версий.
> далеко не всякий IB-сервер интерпретирует указание localhost в строке
> коннекта как неявное задействование FileMapping-режима
Я не знаю ни одной версии, которая localhost интерпретирует как локальное, а не удаленной подключение. Может, я что-то пропустил в документации? Или в цитируемом тезисе закралась логическая ошибка.
← →
Нож © (2007-02-07 11:36) [9]Версия 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;
Что ещё?
← →
Сергей М. © (2007-02-07 11:41) [10]
> Полный путь до базы записан как 192.168.0.20
192.168.0.20 - это не localhost
> Используется NamedPipe режим
Зачем именованому каналу IP-адрес хоста ? Именованые каналы на то и именованые, что при их организации оперируют именами этих каналов, а не чем-то иным.
← →
Нож © (2007-02-07 12:01) [11]Ок, мне это честно не помогло в разборе тормозов...
← →
Сергей М. © (2007-02-07 12:08) [12]Т.е. ты утверждаешь, что выполнение оператора iSQL.ExecQuery длится на порядок дольше, чем если бы тот же запрос был исполнен в консоли ?
← →
Нож © (2007-02-07 12:12) [13]Ага. Отключал вывод в грид, форма показывается быстрее, но всё равно чуть больше 2х секунд. Если делать SQL QUERY из консоли, меньше секунды - и рез-ты у мну.
← →
Сергей М. © (2007-02-07 12:17) [14]
> Если делать SQL QUERY из консоли, меньше секунды - и рез-
> ты у мну.
Неа. Поробуй открыв в консоли этот запрос переместиться в конец НД и удивись - те же грабли по тому же лбу)
← →
Нож © (2007-02-07 12:23) [15]Не понял... объясните :)
← →
Сергей М. © (2007-02-07 12:25) [16]Что не понял-то ?
← →
Нож © (2007-02-07 12:26) [17]Вот я пишу
SELECT * FROM CALLS WHERE "USERID"=21227
секунда не прошла - результаты уже в гриде...
← →
Сергей М. © (2007-02-07 12:31) [18]И сколько этих "результатов" ты видишь ?
Равно ли кол-во этих видимых тобой результатов реальному их кол-ву ?
← →
Нож © (2007-02-07 12:40) [19]По выборке получается 35 результатов, при развёрнутом гриде видно все. Всего в базе 163 записи. При выборке без условия задержка не больше.
← →
Desdechado © (2007-02-07 12:51) [20]Поставь брякпойнт на строку:
iSQL.ExecQuery;
И засеки время ее выполнения.
Остальные строки к выполнению отношения не имеют, но влияют на скоростьпоказа формы и поочей измеряемой тобой чепухи.
← →
Сергей М. © (2007-02-07 12:51) [21]Еще раз - ты утверждаешь, что следующий код
i := 0;
iSQL.ExecQuery;
while not ISQL.Eof do begin
Inc(i);
iSQL.Next;
end;
ShowMessage(IntToStr(i) + " записей в результирующем НД");
выводит на экран фразу "36 записей в результирующем НД", при этом выполняется чуть ли не в 10 раз дольше, нежели выборка и вызуализация того же НД (те же 36 записей) средствами консоли ?
← →
Сергей М. © (2007-02-07 13:01) [22]
> Desdechado © (07.02.07 12:51) [20]
> Остальные строки к выполнению отношения не имеют
Разве TIBSQL фетчит сразу весь результирующий НД ?
← →
Desdechado © (2007-02-07 13:09) [23]> Разве TIBSQL фетчит сразу весь результирующий НД ?
Где я такое говорил?
Я говорил о выполнении, а не о фетче.
← →
Сергей М. © (2007-02-07 13:50) [24]
> Я говорил о выполнении, а не о фетче
А тогда временное сравнение не уместно. То что автор видит в гриде ИБ-консоли - это же результаты выполнения + фетчей.
← →
Desdechado © (2007-02-07 14:03) [25]Консолью не пользуюсь уже лет 8, не помню деталей.
← →
Сергей М. © (2007-02-07 14:38) [26]
> Консолью не пользуюсь
Ну а какая разница, консоль там или эксперт ?
Раз автор увидел в гриде хотя бы одну строку, значит был осуществлен как минимум один фетч из результирующего НД.
Страницы: 1 вся ветка
Текущий архив: 2007.02.25;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.041 c