:: Visual Foxpro, Foxpro for DOS
SQL вопросы по оптимизации
Syberex
Автор

Сообщений: 1432
Откуда: Кострома
Дата регистрации: 19.01.2004
Тут в программе появилось несколько вопросов(сомнений) по SQL

1) Какая будет (и будет ли вообще) оптимизация SELECT-а с условием:
WHERE A.id_order=lc_id_order AND A.type IN (?gn_type1, ?gn_type2)

Я понимаю что первое условие оптимизируемо, второе нет...
Но сначала записи будут отобраны по первому условию,
то есть их совсем немного, а уже из выбранных по второму ...
То есть оптимизация примерно около 90% ;) или нет

2) Как лучше присоединять дополнительные данные? Сразу или после выборки...
Короче, в результате запроса записей выбирается немного (до 10),
и я подумал не писать навороченный запрос с JOIN и все такое, а просто
выбрать данные, сделать пару пустых полей (space(100) as org), а потом просто UPDATE-ом ;)
(Дополнительную таблицу надо открывать в обоих случаях :shuffle

3) При работе с видом с буферизацией, что лучше использовать:
APPEND BLANK и REPLACE или INSERT ?

4) При открытии окон в отдельных сессиях, приходится открывать
множество таблиц в каждой сессии... это как-то необычно...
Хочется знать, сильно ли это нагружает компьютер, винду, процессор?
Вообщем как влияет на требования к системе и производительность...

А то получается это как множество пользователей в одной проге работают,
причем пользователь сам решит сколько ему окон открыть и держать на экране,
а если попробовать представить сколько алиасов во всех сессиях открыто - даже страшно становится

Все ...




------------------
Ratings: 0 negative/0 positive
Re: SQL вопросы по оптимизации
Syberex
Автор

Сообщений: 1432
Откуда: Кострома
Дата регистрации: 19.01.2004
дополнительно к 4

5) Также при использовании сессий, в главной сессий обычно открываю все таблицы,
они используются в методах главных объектов (поиски всяких реквизитов, имен, наименований и т.д.),
эти методы вызываются во всех формах и отчетах где надо...

Может лучше не держать таблицы открытыми все время, а открывать и закрывать прямо в методах?
Уменьшится ли повреждаемость таблиц?
Сильно ли замедлится работа?

***
Написал в этом форуме, потому как перешел на 9 Beta и
хочется услышать и небольшой комментарий и от Алексея из MSFT
Заранее спасибо!




------------------
Ratings: 0 negative/0 positive
Re: SQL вопросы по оптимизации
Владимир Максимов

Сообщений: 14100
Откуда: Москва
Дата регистрации: 02.09.2000
Ну, особого смысла задавать эти вопросы в конфе по VFP9 нет. Не думаю, что здесь что-то принципиально изменилось

Цитата:
1) Какая будет (и будет ли вообще) оптимизация SELECT-а с условием:
WHERE A.id_order=lc_id_order AND A.type IN (?gn_type1, ?gn_type2)

Я понимаю что первое условие оптимизируемо, второе нет... Но сначала записи будут отобраны по первому условию, то есть их совсем немного, а уже из выбранных по второму ... То есть оптимизация примерно около 90% или нет
Собственно механизм работы Rushmore-оптимизации тебе никто не раскажет. Это коммерческая тайна. Но по имеющимся сведениям именно так этот механизм и работает:

-) По индексам делает выборку оптимизируемой части запроса
-) Результат скачивается на клиента
-) По этой предварительной выборке делается окончательная выборка с неоптимизируемой частю запроса

Цитата:
2) Как лучше присоединять дополнительные данные? Сразу или после выборки...
Короче, в результате запроса записей выбирается немного (до 10), и я подумал не писать навороченный запрос с JOIN и все такое, а просто
выбрать данные, сделать пару пустых полей (space(100) as org), а потом просто UPDATE-ом (Дополнительную таблицу надо открывать в обоих случаях
На подобные вопросы нет однозначного ответа. Слишком много факторов. Единственный критерий - это практика. Я бы сказал так: делай запросы по JOIN, а если это приведет к тормозам, тогда поробуй поэкспериментировать с UPDATE. Но далеко не факт, что это ускорит выполнение запроса.

Цитата:
3) При работе с видом с буферизацией, что лучше использовать:
APPEND BLANK и REPLACE или INSERT ?
Собственно, не должно быть никакой разницы. Однако с командой INSERT-SQL в более ранних версих были кое-какие глюки. Но вроде бы они исправлены.

Кроме того, следует учитывать тот факт, что если ты будешь делать добавление вида INSERT ... SELECT ..., то надо бы проверить, берет в этом случае SELECT данные из буфера или напрямую из исходной таблицы. Я как-то еще не проверял

Цитата:
4) При открытии окон в отдельных сессиях, приходится открывать множество таблиц в каждой сессии... это как-то необычно...
Хочется знать, сильно ли это нагружает компьютер, винду, процессор? Вообщем как влияет на требования к системе и производительность...
Да, вобщем-то, практически никак. В этом смысле FoxPro ведет себя достаточно "интелектуально".

Цитата:
А то получается это как множество пользователей в одной проге работают,
Нет. Это не так. Это тебе так кажется. В реальности, повторное открытие таблиц в одной проге отличается от открытия нескольких прог в плане распредедения ресурсов. Более экономно.

Цитата:
причем пользователь сам решит сколько ему окон открыть и держать на экране, а если попробовать представить сколько алиасов во всех сессиях открыто - даже страшно становится
А ты не бойся ;) Попробуй подсчитать: вряд ли пользователь откроет больше 10 окон за раз. С этой кучей очень неудобно разбираться. Для одной формы вряд ли нужно более 20...30 таблиц. Значит, как правило работа идет приблизительно с 200...300 рабочими областями. Чего же здесь ужасного?

Цитата:
5) Также при использовании сессий, в главной сессий обычно открываю все таблицы, они используются в методах главных объектов (поиски всяких реквизитов, имен, наименований и т.д.), эти методы вызываются во всех формах и отчетах где надо...
Я как-то слабо представляю себе приложение, которое работает со всеми таблицами одновременно. Как правило, работа идет с каким-то набором таблиц.

Кроме того, когда ты работаешь в Private DataSession для того, чтобы увидеть таблицы открытые в другой DataSession необходимо организовывать переключение между рабочими областями исходя из предположения, что содержимое таблиц в разных DataSession синхронизировано. Это предусмотрено в твоей программе? В смысле переключение и синхронизация?

Цитата:
Может лучше не держать таблицы открытыми все время, а открывать и закрывать прямо в методах?
Это зависит от конкретной задачи. Кроме того, возможно таблицы и так открываются каждый раз заново, просто ты это не замечаешь. Например, при переключении в дургую DataSession таблицы уже не видны, но команда SELECT-SQL автоматически открывает таблицы источники. Закрытие DataSession приводит к автоматическому закрытию этих таблиц.

Цитата:
Уменьшится ли повреждаемость таблиц?
Теоретически. Если таблицы действительно закрыты и не открыты в других DataSession, то такая таблица не будет повреждена в случае проблем с питанием или связью. Однако критичным, с точки зрения возможного повреждения таблиц, является не факт ее открытия, а момент модификации содержимого. Т.е. надо стремиться не к уменьшению времени открытия таблицы, а к уменьшению времени модификации данных. Обычно стратегия в этом случае такая: пользователь корректирует не сами исходные данные, а некоторую их копию (буфер). Для сброса изменений в исходную таблицу запускается специальная процедура в работу которой пользователь никак не может вмешаться (никаких диалогов с пользователем!). Если сброс не удался - откат в исходное состояние и только потом запрос к пользователю "Что делать?"

Цитата:
Сильно ли замедлится работа?
Опять же зависит от конкретной задачи. Точнее, от того как именно ты открываешь таблицы. Но не думаю, что это как-то принципиально повлияет на скорость.




------------------
Ratings: 0 negative/0 positive
Re: SQL вопросы по оптимизации
Syberex
Автор

Сообщений: 1432
Откуда: Кострома
Дата регистрации: 19.01.2004
Спасибо ;), стало уверенней

Цитата:
Кроме того, следует учитывать тот факт, что если ты будешь делать добавление вида INSERT ... SELECT ..., то надо бы проверить, берет в этом случае SELECT данные из буфера или напрямую из исходной таблицы. Я как-то еще не проверял
Вроде читая о новом в 9-ке видел что там можно указать брать-небрать ;)
Мнеже все как то REPLACE ближе

Цитата:
Кроме того, когда ты работаешь в Private DataSession для того, чтобы увидеть таблицы открытые в другой DataSession необходимо организовывать переключение между рабочими областями исходя из предположения, что содержимое таблиц в разных DataSession синхронизировано. Это предусмотрено в твоей программе? В смысле переключение и синхронизация?
Главные объекты создаются в загорузочном файле в начале (тоесть в Default сессии)
и тутже открывается весь набор таблиц, а закрывается при выходе из программы
Соответственно главные объекты работаю в той сессии, в которой создавались
и этой синхронизацией занимается сам Фокс - я ему не мешаю ;)




------------------
Ratings: 0 negative/0 positive
Re: SQL вопросы по оптимизации
Aleksey Tsingauz [MSFT]
Цитата:
1) Какая будет (и будет ли вообще) оптимизация SELECT-а с условием:
WHERE A.id_order=lc_id_order AND A.type IN (?gn_type1, ?gn_type2)

Я понимаю что первое условие оптимизируемо, второе нет...
Но сначала записи будут отобраны по первому условию,
то есть их совсем немного, а уже из выбранных по второму ...
То есть оптимизация примерно около 90% ;) или нет

Оба этих условия оптимизируемы, а уж какой выигрыш от оптимизации зависит от данных.

Цитата:
2) Как лучше присоединять дополнительные данные? Сразу или после выборки...
Короче, в результате запроса записей выбирается немного (до 10),
и я подумал не писать навороченный запрос с JOIN и все такое, а просто
выбрать данные, сделать пару пустых полей (space(100) as org), а потом просто UPDATE-ом ;)
(Дополнительную таблицу надо открывать в обоих случаях :shuffle

Надо пробовать, выбирать все сразу может оказаться значительно быстрее если используется самый оптимальный порядок JOIN. Разбивая запрос на два, этого порядка можно никогда не достичь. В любом случае, один запрос почти всегда можно настроить так, что он будет работать не медленнее чем если разбить его на два и более.

Цитата:
3) При работе с видом с буферизацией, что лучше использовать:
APPEND BLANK и REPLACE или INSERT ?

Мне не известны особые преимущества одного метода по сравнению с другим.

Цитата:
4) При открытии окон в отдельных сессиях, приходится открывать
множество таблиц в каждой сессии... это как-то необычно...
Хочется знать, сильно ли это нагружает компьютер, винду, процессор?
Вообщем как влияет на требования к системе и производительность...

А то получается это как множество пользователей в одной проге работают,
причем пользователь сам решит сколько ему окон открыть и держать на экране,
а если попробовать представить сколько алиасов во всех сессиях открыто - даже страшно становится

Несмотря на количество сессий, каждый файл открывается один раз и кэш на него один на все сессии. Каждый дополнительный курсор (рабочая область) требует дополнительной памяти, но немного. Каждая сессия требует дополнительной памяти, опять же немного. Таблицы надо открывать SHARED, это может потребовать дополнительных ресурсов от операционной системы, VFP будет тратить время на блокировки.

Цитата:
5) Также при использовании сессий, в главной сессий обычно открываю все таблицы,
они используются в методах главных объектов (поиски всяких реквизитов, имен, наименований и т.д.),
эти методы вызываются во всех формах и отчетах где надо...

Может лучше не держать таблицы открытыми все время, а открывать и закрывать прямо в методах?
Уменьшится ли повреждаемость таблиц?
Сильно ли замедлится работа?
Открытие таблицы операция довольно дорогая с точки зрения производительности. Для борьбы с повреждаемостью должно быть достаточно периодически сбрасывать буферы (FLUSH).

Aleksey Tsingauz
Visual FoxPro Dev Team

Ratings: 0 negative/0 positive
Re: SQL вопросы по оптимизации
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Цитата:
Оба этих условия оптимизируемы, а уж какой выигрыш от оптимизации
зависит от данных.
Как я понимаю IN раскладывается в серию (A=... OR A=... OR A=...)
что и будет оптимизируемо...
Цитата:
Надо пробовать, выбирать все сразу может оказаться значительно
быстрее если
используется самый оптимальный порядок JOIN. Разбивая запрос на два, этого
порядка можно никогда не достичь. В любом случае, один запрос почти всегда
можно настроить так, что он будет работать не медленнее чем если разбить его
на два и более.
Ну с новыми возможностями подзапросов в части FROM -
возможно что таки да, но вот без этого... Коррелированный подзапрос IMHO
всегда будет медленнее (особенно при приличном общем числе записей в
"главном" запросе) чем аналог с 2-мя запросами, или запросом + подзапрос в
части FROM.
Цитата:
3) Мне не известны особые преимущества одного метода по сравнению с
другим.
Это именно при использовании буферизации, как я понимаю? Ибо
иначе получается 2 блокировки вместо одной - сначала для вставки, потом для
Replace... Да и существеннейшее значение имеет организация ограничений на
таблицу. Те-же PK и ValidationRule просто таки могут не позволить вставки
"пустой" записи... Конечно при работе с самой таблицей, а не с
представлением.
Цитата:
Несмотря на количество сессий, каждый файл открывается один раз и кэш
на него один на все сессии
Угу, что выливается в кой какие
"особенности", типа открытия первого курсора в режиме shared и попытки
открытия второго в Exclusive, или неприятностей с транзакциями и временными
(неструктурными) индексами даже созданными в другой сессии. Кстати всё хотел
написать, да никак не доходили руки - наконец-то в VFP9 пофиксили
некорректную работу REFRESH-а табличных кэшей - когда сразу после открытия
нового курсора к уже давно открытой таблице исчисление периода "запрета
рефреша" начиналось с максимального значения - т.е. непосредственно после
открытия нельзя было получить новые (с диска) данные - пока не истечёт
интервал SET REFRESH .., N Очень приятно что таки решили наконец эту
проблему
Цитата:
Для борьбы с повреждаемостью должно быть достаточно периодически
сбрасывать буферы (FLUSH).
Ну с "новым" FLUSH это наверняка должно
помочь Как я понимаю повреждение возникает если из кэша ОС данные
попадают в файл только частично - но соответственно если кэш пуст (данные
уже записаны), то повреждения уже не страшны - т.е. даже при аварийном
выходе из программы, и даже при крахе ОС файлы остануться целыми. А вот
"поймать" такой момент когда сам фокс находится в середине операции
добавления записи (между физическим расширением файла, записью туда новых
данных и инкрементацией счётчика в заголовке до принудительного сброса
буферов) IMHO надо иметь большое везение

P.S. Кстати меня всегда интересовал вопрос - почему в состав Tools не
включили хотя-бы примитивного DBFFix-ера - "лечащего" счётчик записей и
размер dbf-файла для "подпорченных" DBF-ов. Это политическое решение (может
быть тайный сговор с производителями утилит восстановления ), или просто
руки ни у кого не дошли до этого (IMHO даже самой примитивной программки на
20-30 строк было бы вполне достаточно для большинства случаев)?




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: SQL вопросы по оптимизации
Владимир Максимов

Сообщений: 14100
Откуда: Москва
Дата регистрации: 02.09.2000
Исключитально ради точности
Цитата:
Цитата:
Несмотря на количество сессий, каждый файл открывается один раз и кэш
на него один на все сессии
Угу, что выливается в кой какие
"особенности", типа открытия первого курсора в режиме shared и попытки
открытия второго в Exclusive
Значение настройки SET EXCLUSIVE по умолчанию отличаются при DEFAULT и PRIVATE DataSession.

Default DataSession - ON
Private DataSession - OFF




------------------
Ratings: 0 negative/0 positive
Re: SQL вопросы по оптимизации
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Я не про то:
USE tt SHARED IN 0
? ISEXCLUSIVE("tt")
USE tt EXCLUSIVE AGAIN ALIAS tt2 IN 0
? ISEXCLUSIVE("tt2")
И ни ответа ни привета - на EXCLUSIVE даже не ругнётся Ну в разных
датасессиях абсолютно аналогично - только что алиасы можно не задавать.




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: SQL вопросы по оптимизации
Владимир Максимов

Сообщений: 14100
Откуда: Москва
Дата регистрации: 02.09.2000
Ну, я так долго могу куски HELP-а приводить

USE ... AGAIN

AGAIN

Issue USE with the table name and the AGAIN clause, and specify a different work area with the IN clause.
When you open a table again in another work area, the table in the new work area takes on the attributes of the table in the original work area. For example, if a table is opened for read-only or exclusive access and is opened again in another work area, the table is opened for read-only or exclusive access in the new work area.

Т.е. в данном случае все синтаксически корректно (поэтому никаких сообщений и нет), просто AGAIN имеет более высокий приоритет по сравнению с EXCLUSIVE.

Если таблица уже была открыта ранее, до будет использованы настройки ранее открытой таблицы, если нет, то вместо AGAIN будет использован EXCLUSIVE.

Ведь тебя же не напрягает команда:

CLOSE ALL
USE tt SHARED AGAIN

Хотя, опция AGAIN вроде бы бессмыссленна, поскольку нет открытых таблиц.




------------------
Ratings: 0 negative/0 positive
Re: SQL вопросы по оптимизации
Равиль

Сообщений: 6555
Откуда: Уфа
Дата регистрации: 01.08.2003
Интересно было читать, спасибо всем участникам, потому что есть один вопрос для меня не ясный
- синхронизация в различных датасессиях (DS). Честно говоря, я реально не использовал Private DS именно по этой причине, а открывал нужные таблицы повторно.
Может быть не прав, но заметил следующее:
Если таблица открыта повторно (AGAIN), то после сброса буфера (TableUpdate) в одной области, приходится делать считывание (TableRevert) в других областях этой же таблицы. Для этого держу таблицу согласования с соответствующими именами (ALIASes), не полагаясь на Refresh (если он вообще здесь уместен).
Если файл реально открывается один раз и файловый (системный) кэш один для всех алиасов, а буферы разные, то получается, что сброс реально идет сначала в файловый кэш, а он уже по своим законам сбрасывается на диск. Но это хорошо, если быть уверенным в моем случае, что и TableRevert считывает с файлового кэша, а не с диска.
Может все это бред (как обычно), но хочется развеять сомнения




------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: SQL вопросы по оптимизации
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Владимир, я про это самое и говорил - что таблица имеет реально всего 1 кэш
и что из этого вытекает... Кстати я там немного соврал - несмотря на то что
открытие таблицы в разных датасессиях и является в какой-то степени аналогом
AGAIN, но всё-же поведение отличается: Для Exclusive просто блокируется
открытие в другой датасессии, а для NOUPDATE/ISREADONLY - в иной датасессии
этот режим игнорируется - т.е. насмотря на то что изначально таблица и была
открыта как NOUPDATE, но в другой датасессии её вполне можно открывать как
редактируемую.
Ну да это реально мелочи - с свободным индексом и транзакцией (которая из-за
этого индекса не может быть открыта) положение похуже получается...




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: SQL вопросы по оптимизации
Syberex
Автор

Сообщений: 1432
Откуда: Кострома
Дата регистрации: 19.01.2004
Цитата:
Оба этих условия оптимизируемы, а уж какой выигрыш от оптимизации зависит от данных.
О, это очень положительная новость! IN () уже потребовался во многих запросах ;)
(особенно где идет выбор разных типов документов)

Цитата:
Надо пробовать, выбирать все сразу может оказаться значительно быстрее
если используется самый оптимальный порядок JOIN.
А как добиться этого оптимального порядка?
Например, сначала при-JOIN-ить таблицы с небольшим количеством записей, а затем более крупные
или наоборот, или еще как...

Цитата:
Открытие таблицы операция довольно дорогая с точки зрения производительности.
Значит буду и дальше считать, что иду по правильному пути ;)

Цитата:
Для борьбы с повреждаемостью должно быть достаточно периодически сбрасывать буферы (FLUSH).
Ясно. Можно даже сделать автосохранение минут так через 10-15 ;)
А что там за "новый" FLUSH?




------------------
Ratings: 0 negative/0 positive
Re: SQL вопросы по оптимизации
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Цитата:
Можно даже сделать автосохранение минут так через 10-15 ;)
В
каком сиысле автосохранение? TableUpdate() что-ли принудительно? Так это не
есть хорошо. Или именно "удостовериться что то что я сохранил реально ушло
на диск"? Если второе, а как раз для него и нужет FLUSH, то делать такое
через 10 минут IMHO совершенно бессмысленно. Нужно иметь ну очень
криво настроенную ОС (клиента или сервер) чтобы он за столько времени не мог
записать данные из кэша на диск...
Цитата:
А что там за "новый" FLUSH?
Почитай... Он теперь по идее
будет гарантировать выполнение операции записи (физического сброса файлового
кэша ОС на диск). Т.е. как раз то для чего он и предназначался когда-то




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: SQL вопросы по оптимизации
Syberex
Автор

Сообщений: 1432
Откуда: Кострома
Дата регистрации: 19.01.2004
А когда он этого не делал? В какой версии?

Значит автосохранение глупая идея?
Обычно я навешивал FLUSH на кнопочку сохранить...




------------------
Ratings: 0 negative/0 positive
Re: SQL вопросы по оптимизации
PaulWist

Сообщений: 14621
Дата регистрации: 01.04.2004
Господа.
Хотел бы вернуться к FLUSH, что то у меня получается каша в голове, объясните для тупых в каком случае применять эту команду, а то получается какой-то нелогизм между Begin_Commit_Rollback_Trans
c TableUpdate() и FLUSH (которая является не функцией с возвратом статуса выполнения, а командой - статус выполнения которой надо ещё обработать ).




------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: SQL вопросы по оптимизации
Владимир Максимов

Сообщений: 14100
Откуда: Москва
Дата регистрации: 02.09.2000
Когда ты читаешь/пишешь данные из таблицы, то тебе только кажется, что ты читаешь/пишешь напрямую из/в файл. На самом деле, данные перекачиваются через целую последовательность различных буферов.

Это значит, что когда ты даешь, например, команду REPLACE, то изменения попадают не сразу в таблицу, а сначала сбрасываются в некий системный буфер (имеется в виду буфер операционной системы. FoxPro тут уже не при чем). Процессом сброса изменения из этого системного буфера в собственно файл управляет уже операционная система. Это происходит не мгновенно, а спустя некий промежуток времени, интервал которого зависит от очень многих причин. Если в этот момент произойдет сбой питания, то измененные данные не попадут в таблицу, хотя FoxPro уже закончил с ними работу.

Команда FLUSH заставляет операционную систему выполнить сброс этого буфера немедленно.

Нужно тебе такое или нет - решай сам.




------------------
Ratings: 0 negative/0 positive
Re: SQL вопросы по оптимизации
PaulWist

Сообщений: 14621
Дата регистрации: 01.04.2004
Спасибо Владимир, разжевал .

Для случаев (Fopen, Fwrite) понятно.

Расскажу как понял для классического случая.

Begin Trans
If not Tableupdate(...)
Rollback
else
End Trans &&Commit
Flash
endif

хотя в хелпе написано:

Цитата:
If you specify cFileSpec, only changes to the specified file are saved unless cFileSpec is the name of a table (.dbf) file in which case FLUSH applies to the table memo (.fpt) file and all open indexes for that table, even if the table is open in another data session.

те помимо моей воли сбросятся все изменения во всех сессиях.
Если выдать без опций то тоже сбросятся все изменения в текущей сессии, хотя может быть этого и не надо.
Наверное Flush не применимо к нашему случаю с транзакциями.




------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: SQL вопросы по оптимизации
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Нет, ты опять путаешь буфер фокса, и буфер (кэш) ОС - то что у тебя в
"других сессиях" находится в буфере (т.е. не сохранено по TableUpdate()) там
и останется, и никуда оно не запишется. А запишутся только те изменения,
которые ты уже "сохранил" из буфера в таблицу. Они и так запишется, но
возможно что через некоторый промежуток времени (когда ОС сочтёт необходимым
сделать сброс - обычно это происходит очень быстро после того как ты
"записал" данные в таблицу, но может быть отложено - из-за массы
причин - перегрузка дисковой подсистемы кучей операций чтения/записи,
перегрузка CPU "тяжёлым" системным кодом -типа форматирования дискетки в
Win9x В случае сети ещё куча разных факторов.)




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: SQL вопросы по оптимизации
PaulWist

Сообщений: 14621
Дата регистрации: 01.04.2004
Всё въехал, не с первого раза, но понял и по экспериментировал.

Реэюме - End Trans и следующая команда Flush, правда если разорвать соединение между этими командами, то Flush не дает ошибки - вот такие пироги , те даже в этом случае нет гарантии в сохранении данных




------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: SQL вопросы по оптимизации
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
100% гарантии ты не добьёшься никогда, и это нормально. Повышать надёжность
коечно стоит, но и делать так чтобы программа не ломалась совершенно, если
вдруг обнаружит подпорченный файл тоже надо




------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 20 Alsim  (Гостей: 19)

© 2000-2024 Fox Club 
Яндекс.Метрика