Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.54 MB
Время: 0.034 c
9-1144573893
ArtemESC
2006-04-09 13:11
2007.02.25
Реализация 3D движка


15-1170214820
Slider007
2007-01-31 06:40
2007.02.25
С днем рождения ! 31 января


2-1170584865
FIL-23
2007-02-04 13:27
2007.02.25
поставить курсор в мемо на первую позицию (линию)


15-1169788536
MBo
2007-01-26 08:15
2007.02.25
Пятничные задачки. Вася Пупкин пока отдыхает ;)


6-1158311999
KyRo
2006-09-15 13:19
2007.02.25
Проблема с инди фтп