Update в ADO не успевает обновить BLOB(?)
От: Аноним  
Дата: 16.05.08 09:15
Оценка:
Проблема: нашими тестировщиками замечено, что если сразу после сохранения BLOBa (AppendChunk() + Update()) приложение слетает по какой-то внутренней ошибке, то BLOB не сохраняется. Причем, такое случается не всегда, а только при полной загрузке процессора. Похоже, что не сбрасываются какие-то кэши на внутренних потоках ADO, хотя соединение открывается не в асинхронном режиме. Пробовал проверять состояние рекордсета через ADODB::_IRecordset::GetState() — после Update() флаг adStateExecuting не установлен. Короче, проблема . Может, кто что посоветует?
Re: Update в ADO не успевает обновить BLOB(?)
От: pkarklin  
Дата: 16.05.08 09:58
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Проблема: нашими тестировщиками замечено, что если сразу после сохранения BLOBa (AppendChunk() + Update()) приложение слетает по какой-то внутренней ошибке, то BLOB не сохраняется. Причем, такое случается не всегда, а только при полной загрузке процессора. Похоже, что не сбрасываются какие-то кэши на внутренних потоках ADO, хотя соединение открывается не в асинхронном режиме. Пробовал проверять состояние рекордсета через ADODB::_IRecordset::GetState() — после Update() флаг adStateExecuting не установлен. Короче, проблема . Может, кто что посоветует?


М.б. приложене слетает, не закрыв транзакцию?! Проверьте профайлером, что ухоит на сервер.
Re[2]: Update в ADO не успевает обновить BLOB(?)
От: Аноним  
Дата: 16.05.08 10:15
Оценка:
Здравствуйте, pkarklin, Вы писали:

P>М.б. приложене слетает, не закрыв транзакцию?! Проверьте профайлером, что ухоит на сервер.


Забыл сообщить одну деталь: сохраняю в базу MS Jet (Access), профайлером не посмотришь. Сохранение выполняется без использования транзакций. И еще: вылет приложения, о котором идет речь, не связан с обращением к ADO. Можно, например, просто бросить и не поймать ислючение сразу после Update(). После чего обнаруживаем, что BLOB до базы не дошел.
Re[3]: Update в ADO не успевает обновить BLOB(?)
От: wildwind Россия  
Дата: 17.05.08 18:05
Оценка:
Здравствуйте, Аноним, Вы писали:

P>>М.б. приложене слетает, не закрыв транзакцию?! Проверьте профайлером, что ухоит на сервер.


А>Забыл сообщить одну деталь: сохраняю в базу MS Jet (Access), профайлером не посмотришь.

Важная деталь!

А>Сохранение выполняется без использования транзакций.


В этом случае по умолчанию работает автокоммит, то есть каждый запрос в своей транзакции. Если я правильно помню, в последних версиях Jet коммит по умолчанию асинхронный, то есть внутрение буфера страниц не сразу сбрасываются в файл БД. В в этом случае падение приложения до момента полной записи изменений приведет к потере данных. Связь с высокой загрузкой процессора можно предположительно объяснить тем, что сброс буферов происходит в отдельном потоке с низким приоритетом (возможно это касается только BLOB-ов).
Re[4]: Update в ADO не успевает обновить BLOB(?)
От: vasdm Беларусь  
Дата: 20.05.08 11:24
Оценка:
W>В этом случае по умолчанию работает автокоммит, то есть каждый запрос в своей транзакции. Если я правильно помню, в последних версиях Jet коммит по умолчанию асинхронный, то есть внутрение буфера страниц не сразу сбрасываются в файл БД. В в этом случае падение приложения до момента полной записи изменений приведет к потере данных. Связь с высокой загрузкой процессора можно предположительно объяснить тем, что сброс буферов происходит в отдельном потоке с низким приоритетом (возможно это касается только BLOB-ов).

Спасибо за информацию, теперь многое проясняется. Рецептов лечения, как я понимаю, нет? Можно хотя бы установить момент, когда сброс завершен?
Re[5]: Update в ADO не успевает обновить BLOB(?)
От: vasdm Беларусь  
Дата: 20.05.08 11:32
Оценка:
W>Если я правильно помню, в последних версиях Jet коммит по умолчанию асинхронный.

Можно ли изменить режим коммита на синхронный?
Re[6]: Update в ADO не успевает обновить BLOB(?)
От: wildwind Россия  
Дата: 21.05.08 10:52
Оценка:
Здравствуйте, vasdm, Вы писали:

V>Можно ли изменить режим коммита на синхронный?


Можно, и режим, и задержку, и много других параметров, которые описаны в документации.
Re[7]: Update в ADO не успевает обновить BLOB(?)
От: vasdm Беларусь  
Дата: 21.05.08 13:58
Оценка:
W>Можно, и режим, и задержку, и много других параметров, которые описаны в документации.

Спасибо, нашел.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.