Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Delphi+dbExpress проблема с Refresh (Andrew) 29/10/2006 - 11:43:59
      Re: Delphi+dbExpress проблема с Refresh (WebGirl) 30/10/2006 - 04:41:09
      Re: Delphi+dbExpress проблема с Refresh (Вiталiй) 30/10/2006 - 16:36:00
      Re: Решение проблемы (Andrew) 30/10/2006 - 18:26:12

> Original message text:
> From: Andrew - 29/10/2006 - 11:43:59
> Subject:Delphi+dbExpress проблема с Refresh
> -----------------
> Схема доступа к таблице стандартная TSQLConnection->TSimpleTSimpleDataSet->TDataSource
> Есть обработчик события:
> procedure TDataModule1.SimpleDataSetDetailsAfterPost(DataSet: TDataSet);
> begin
> Self.SimpleDataSetDetails.ApplyUpdates(-1);
> Self.SimpleDataSetDetails.Refresh;
> end;
> При создании новой записи с последующим её сохранением на сервере метод Refresh возвращает набор данных в котором ЕЩЁ НЕТ новой записи. При введении задержки между сохранением набора данных и его обновлением, например:
> ...
> Self.SimpleDataSetDetails.ApplyUpdates(-1);
> Sleep(1000);
> Self.SimpleDataSetDetails.Refresh;
> ...
> Обновленный набор актуален(!).
>
> Вопрос: Почему нарушается логика работы приложения и есть ли решение более надежное, чем задержка?
>
> П.С. Сервер MySQL 5.0.18 установлен на локальной машине, таблица имеет около 100 записей, тип MyISAM.
>


From: Andrew - 30/10/2006 - 18:26:12
Subject:Решение проблемы
-----------------
Самое интересное, что у меня всплыла одна из проблем MyISAM. Вот что по этому поводу пишут в документации по MySQL 4.0:
...
5.1.1. Конструктивные ограничения MySQL/компромиссы

При использовании обработчика таблиц MyISAM MySQL применяет очень быструю блокировку таблиц (несколько потоков чтения/один поток записи). Самая большая проблема при использовании этого типа таблиц возникает в случае непрерывного потока обновлений в сочетании с медленными выборками из одной и той же таблицы. Если эта проблема касается лишь некоторых таблиц, можно использовать вместо них таблицы другого типа. See Глава 7, Типы таблиц MySQL.
...

После того, как я поменял тип таблицы с MyISAM на InnoDB все заработало правильно.
У меня создалось впечатление, что клиентский поток просто вытесняет поток MySQL, который записывает данные на диск, поэтому клиент получает устаревшие данные (процессор то один, а потоков на обработку несколько). Задержка как раз и освобждает процессорное время (похоже на бред :-).
Эх, проверить бы это на многопроцессорной системе или при использовании сетевого соединения между клиентом и сервером.


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
29975



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |