Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.044 c
15-1170296895
Дом
2007-02-01 05:28
2007.02.25
Нет ли какого нибудь устройства, чтоб подключать к компу и управл


15-1170395300
ZeroDivide
2007-02-02 08:48
2007.02.25
Какую стоит брать видяху под AGP: 7600GS или 1650Pro=1600XT?


1-1167208489
Yozch1
2006-12-27 11:34
2007.02.25
цвет хидера в VTV


2-1170964857
Footballer
2007-02-08 23:00
2007.02.25
RichEdit


2-1170556818
Riply
2007-02-04 05:40
2007.02.25
Обращение к свойству класса после вызова Destroy.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский