Форум: "Базы";
Текущий архив: 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