Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
блокировка
|
|||
|---|---|---|---|
|
#18+
Есть проект VFP8.0+MS SQL Server В проекте есть режим опроса, т.е. в этом режиме записывается большое количество данных в remote view, ну и потом они сами скидываются на сервер. Если в момент записи данных другой пользователь делает выборку из задействованных таблиц, то все виснет(( Пока вижу только один выход на время опроса отключать всех пользователей от этих таблиц или от всей БД. Как это сделать из фокса? У меня такой вариант: перед записью данных запускать какую нибудь процедуру на сервере которая будет оповещать всех пользователей что БД будет использоваться в однопользовательском режиме и ждать минут 10, ну или если все отключаться раньше, тогда прерывать ожидание. Как будет выглядеть эта процедурка пока не знаю, но это в общем то надо спрашивать в другом форуме. Хотя буду рад ответам и здесь)) А вопрос собственно такой: подскажите есть ли другие выходы из сложившейся ситуации?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2004, 11:22 |
|
||
|
блокировка
|
|||
|---|---|---|---|
|
#18+
Наводящие вопросы 1. RemoteView построен на скольких таблицах 2. Какая буферизация используется 3. Какие настройки Transactions,QueryTimeOut,ConnectTimeOut для соединения 4. Какие хинты используются для выборки из этой таблицы другими юзерами 5. Как и где организован TableUpdate() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2004, 12:57 |
|
||
|
блокировка
|
|||
|---|---|---|---|
|
#18+
попробую ответить: 1) remote view постороены каждое на одной таблице 2) режим буферизации установлен по умолчанию 3) в соединении Automatic Transaction, connection timeout 4 sec, query timeout 0(но скорей всего в дальнейшем его ограничу), 3) > Какие хинты используются для выборки из этой таблицы другими юзерами Не понял вопрос, поясните если можно 4) TableUpdate в большенстве своем происходит автоматически, в некоторых местах я делаю его вручную. В данном случае обновление данных после записи в remote view происходит путем закрытия и заново открытия проекта: ****Закрытие БД для записи новых данных из буфера**** SQLDISCONNECT(handle) close tables all close databases ****Открытие БД заново******************************* OPEN DATABASE uz handle=SQLConnect("Upsize2") Пробовал просто делать tableupdate() на нужные таблицы, но это почему то было очень долго, а такой вариант отрабатывает много быстрее. Сейчас мне нужно уйти все ответы посмотрю в понедельник. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2004, 16:01 |
|
||
|
блокировка
|
|||
|---|---|---|---|
|
#18+
Hi lesha_spb! Дам совершенно бесполезный совет - переходи на Oracle :) Там нету блокировок в смысле MS SQL и потому из таблицы можно тягать данные даже если она ЦЕЛИКОМ обновляется в другой сессии :) Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2004, 01:52 |
|
||
|
блокировка
|
|||
|---|---|---|---|
|
#18+
lesha_spbЕсть проект VFP8.0+MS SQL Server Если в момент записи данных другой пользователь делает выборку из задействованных таблиц, то все виснет В "штатном" (по умолчанию) режиме изоляции в момент обращения к какой-либо странице для чтения данных в запрос MS SQL блокирует эту страницу. Т.е. никакие операции по модификации этой странице недопустимы, пока не будет снята с нее блокировка. Вообще-то, при грамотной организации работы с MS SQL таких ситуаций должно быть крайне мало. Имею в виду ситуацию одновременного обращения к одной и той же странице данных. Сам MS SQL прекрасно "разруливает" такие конфликты. Просто ждет некоторое время пока заблокированная страница не освободится. Видимо, у тебя или установлено очень маленькое время ожидания, или не очень грамотно спроектирована как сама база данных, так и организована работа с базой. Тебе нужно в первую очередь посмотреть план запросов, которые ты посылаешь в MS SQL на предмет их оптимизации (это можно сделать в специальной программе Query Analayzer поставляемой с MS SQL). Крайне нежелательно, чтобы для выполнения запросов применялось сканирование таблицы. Нужны соответсвующие индексы. Кроме того, в MS SQL можно менять режимы блокировки данных в процессе работы. В глобальном масштабе это делается через настройку уровней изоляции (" Isolation Levels "). Т.е. надо на сервер послать примерно такую команду SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED Более "точечно", это делается через так называемые "хинты" (hint) в каждом конкретном запросе. Что-то вроде SELECT * FROM MyTable with (nolock) Здесь хинт (nolock) соответсвует настройке уровня изоляции READ UNCOMMITTED, но только для данного запроса. Даный уровень изоляции называют режимом "грязного чтения". В процессе выполнения такого запроса старницы данных не блокируются, но если в момент выполнения запроса другой пользователь вносит в эти же данные какие-то изменения, то запрос не ждет окончания этих изменений, а читает те данные, которые были до начала внесения изменений. Т.е. читает "грязные" (старые) данные. Если актуальность данных не имеет принципиального значения, то следует пользоваться таким хинтом. Хотя, его использование чревато ошибкой 601 (чтение удаленных записей) Глобальная настройка уровня изоляции действует только в пределах одного коннекта. По умолчанию, настроен уровень изоляции READ COMMITTED. Впрочем, об уровне изоляции и хинтах лучше спросить на форуме по MS SQL на данном сайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2004, 15:15 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32791853&tid=1595361]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 352ms |

| 0 / 0 |
