Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.17;
Скачать: CL | DM;

Вниз

хм.. неустойчивый коннект..   Найти похожие ветки 

 
Avgust   (2006-07-10 16:30) [0]

MySQLDAC Trial v2.5.2 (9982) + Delphi 6

var
 insert : string;
begin
MyDb.Connected := true;
insert := "INSERT test(test) value(";
...

for i := 0 to 10000 do
 begin  
  MyQuery.SQL.Clear;
  MyQuery.Close;
  MyQuery.SQL.Add( " LOCK TABLES del WRITE; " + insert + IntToStr( i )   "); UNLOCK TABLES; " );
  try
   MQ.ExecSQL;
  except
   Showmessage("упс касой!");
  end;
end;
...
end;
 

собственно в среднем пишет около 3-5 тысяч записей и каннект с базай рвётся... как это отлавить, занова подключится и продолжить?... или может быть знает кто как вылечить незаплонированный дисконнект... (считаю что MySQLDAC сам отваливается... хатя может и ошибаюсь.. но как проверить кто точно рвёт связь?)

спасибо.


 
Avgust   (2006-07-10 16:32) [1]

упс.. немнока скасячил... везде считать имя таблицы test


 
Desdechado ©   (2006-07-10 16:35) [2]

А где находится сервер?


 
Avgust   (2006-07-10 16:39) [3]


> А где находится сервер?

localhost... а планируется Lan


 
sniknik ©   (2006-07-10 16:50) [4]

> как это отлавить
для начала прочитать реальную ошибку... а не прятать ее за невразумительной лабудой.

ну и использовать параметры, и избавиться за счет этого от изменения запроса на каждый цикл...

и... (вот тут возможно неточно) делать все в транзакции, и коммитить ее на каждые пару-тройку тыс. записей... (в IB это вроде помогало, читал про аналогичное, для других серверов не видел)


 
Johnmen ©   (2006-07-10 16:57) [5]

>Avgust   (10.07.06 16:30)

Проведи такой эксперимент: в цикл вставь Sleep(300).
О результатах доложи! :)


 
Desdechado ©   (2006-07-10 17:08) [6]

а для чего блокировка-разблокировка таблиц на каждой записи?


 
Avgust   (2006-07-11 07:00) [7]


>  в транзакции, и коммитить ее на каждые пару-тройку тыс.
>  записей


реальная ошибка нет коннекта к баззе.. тобишь был, был.. и пропал.


> для начала прочитать реальную ошибку... а не прятать ее
> за невразумительной лабудой.


незнаю как в мускуле это делается.. доки не очень раскрытые попадаются.. в основном синтакс..


> Проведи такой эксперимент: в цикл вставь Sleep(300).
> О результатах доложи! :)


упс... и дале при Sleep(10) всё ок... но если меньше 10 то Error.. что бы ето значило?... ктото гдета неуспевает?.. или ктото слишком таропится?..


 
sniknik ©   (2006-07-11 08:42) [8]

> незнаю как в мускуле это делается..
при чем здесь мускул? тебе в дельфи нормальную обработку ексепта предлагают сделать...вместо "Showmessage("упс касой!");"

> ктото гдета неуспевает?
сервер похоже. и похоже, что и параметры предлагаемые, выполнение будет тогда только одного запроса с изменением только данных в параметре, вместо потока отдельных запросов моглибы разгрузить сервер, и транзакции время от времени завершающиеся помогли бы (просто на коммите бы ожидало завершения записи предыдущего).
но тут еще вопрос, транзакции в мускуле нововведенные, а версия сервера неуказана... (возможно твой их просто не поддерживает)

ну и действительно, а нафига блокировки на каждую запись? без этого нельзя? если можно то это тоже разгрузит сервер от ненужной работы, а будет ему полегче может и будет успевать...

> или ктото слишком таропится?..
вот это вряд ли, у тебя и так с пересоставлением запроса в цикле написано, это самый медленный вариант. и потом mssql к примеру в аналогичном и больше "проглатывал" не морщась (100 тыс. делал, тестовое заполнение базы случайными данными.)


 
sniknik ©   (2006-07-11 08:52) [9]

упс. пропустил...
а то что запрос составляется в MyQuery а выполняется из MQ это тоже так и надо? странный код.


 
Johnmen ©   (2006-07-11 10:27) [10]


> упс... и дале при Sleep(10) всё ок... но если меньше 10
> то Error.. что бы ето значило?... ктото гдета неуспевает?
> .. или ктото слишком таропится?..


Это известное явление, связанное с тем, что винда на машине, где работает MySQL сервер, не успевает освобождать потоки для коннектов, порождаемых каждым выполнением запроса.
Следует обратить внимание на KeepConnection, AutoClone и CloneConnection.
Есть подозрение, что AutoClone стоИт в True...


 
Avgust   (2006-07-12 05:13) [11]


> ну и действительно, а нафига блокировки на каждую запись?
>  без этого нельзя? если можно то это тоже разгрузит сервер
> от ненужной работы, а будет ему полегче может и будет успевать.
> ..


это уже как поиск был... в мануале мускула сказано что при блоке таблице выполянется этуляция транзакции.. собственно можно и до цикла и в read блокировать... приведённый код сдесь ни есть true :)


> > незнаю как в мускуле это делается..
> при чем здесь мускул? тебе в дельфи нормальную обработку
> ексепта предлагают сделать...вместо "Showmessage("упс касой!
> ");"


а блин пропётся с цитатой.. я имел введу про транзакции.. тоесть я вроде знаю что это и за чем.. ну а как всегда на примере это лучше.. а в доках по мускулу очень слабо это описано..


> ...а то что запрос составляется в MyQuery а выполняется из
> MQ это тоже так и надо? странный код


OK.. спасибо за раскрытый ответ.. я начинающий самаучка :) а этот код от руки и на память писал.. для себя обычно называю коротко, тоесть MQ = MyQuery.. здесь MyQuery для ясности.. :)  ну и таблици обычно называю "del" тобишь удалить её надо тестовая она :).


> Следует обратить внимание на KeepConnection, AutoClone и
> CloneConnection.
> Есть подозрение, что AutoClone стоИт в True...

ок спасибо.. проверю отпишу.


 
Avgust   (2006-07-12 06:30) [12]


> > Следует обратить внимание на KeepConnection, AutoClone
> и
> > CloneConnection.
> > Есть подозрение, что AutoClone стоИт в True...
>
> ок спасибо.. проверю отпишу.


KeepConnection = true

AutoClone - нет такова
CloneConnection - тоже нет...


 
Avgust   (2006-07-12 12:01) [13]

всё разабрался.. всем спасибо за помощь!

PS. сейчас формирую запрос а потом его заношу в таблицу... причина оказалась в постаянном  LOCK UNLOCK.. что давала очень сильную нагрузку... плюс постоянно новые запись и формирования.
сейчас сначала формирую запрос при помощи цикла... ( обсуждение for, while... итд.. тема другова форума ) записывая его в ZaprosString а далее:

MyQuery.SQL.Add( " LOCK TABLES del WRITE; " + ZapString + " UNLOCK TABLES; " );
 try
  MyQuery.ExecSQL;
 except
  Showmessage("упс касой!");
 end;


проблем не наблюдается.

Спасибо!



Страницы: 1 вся ветка

Текущий архив: 2006.09.17;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.065 c
15-1156235492
buka
2006-08-22 12:31
2006.09.17
Ася, шрифты, ворд...


3-1152610011
Asail
2006-07-11 13:26
2006.09.17
Проблемма с тригером в IB.


1-1154708929
ancot
2006-08-04 20:28
2006.09.17
TFrame TAction и ShorCut


2-1156628488
vain
2006-08-27 01:41
2006.09.17
column в ListView


10-1123495556
Nick Denry
2005-08-08 14:05
2006.09.17
Можно ли средсвами TMediaPLayer