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

Вниз

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

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

Наверх





Память: 0.48 MB
Время: 0.038 c
15-1156395719
Ega23
2006-08-24 09:01
2006.09.17
С Днём рождения! 24 августа


1-1154779923
flaxe
2006-08-05 16:12
2006.09.17
Set of 0.255


6-1146013749
tigra
2006-04-26 05:09
2006.09.17
TIdAttachment


15-1156170789
Карелин Артем
2006-08-21 18:33
2006.09.17
Намудрил блин с настройками синезуба...


6-1146415451
CyMKuH
2006-04-30 20:44
2006.09.17
IP & Internet





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский