Вы можете ускорить выполнение предложений Update и Delete с помощью:

Добавление Timestamps (Меток времени)

Вы можете улучшить производительность при обновлении, вставке или удалении данных в удаленной таблицу, которая может содержать множество полей добавлением в нее поля timestamp, если сервер обеспечивает тип поля Timestamp.

Присутствие поля типа timestamp в удаленной таблице позволяет вам использовать Visual FoxPro SQL WhereType опцию обновления DB_KEYANDTIMESTAMP. Эта опция снижает время обработки, так как Visual FoxPro будет сравнивать только два поля в вашем представлении, ключевое поле и поле timestamp, с аналогичными в удаленной таблице для определения конфликтов обновления. Сравнением двух полей в противоположность сравнению всех обновляемых полей (с опцией DB_KEYANDUPDATABLE) или всех изменяемых полей (с опцией DB_KEYANDMODIFIED), опция DB_KEYANDTIMESTAMP снижает время, которое затрачивается на обновление удаленных данных. Для получения информации об опцих WhereType смотрите описание Управление обновлениями с использованием представлений.

NoteЗамечание

Опция DB_KEYANDTIMESTAMP сравнимает ключевое поле и поле timestamp только в том случае, когда удаленная таблица содержит поле timestamp. Если вы используете опцию DB_KEYANDTIMESTAMP на удаленной таблице, которая не содержит поля timestamp, Visual FoxPro будет сравнивать только ключевые поля.

Мастер переноса - Upsizing Wizard - может автоматически добавить поля timestamp, как соответствующие таблицам, которые вы экспортируете. Для получения более подробной информации смотритре раздел "Колонки Timestamp" в  Перенос баз днных Visual FoxPro на серверные базы данных.

NoteСовет

Если вы делаете что-то, что изменяет структуру базовой таблицы представления, например добавляете поле timestamp, вам может потребоваться пересоздать представление. Поля в определении представления хранятся в базе данных и любые изменения в базовых таблицах представления после использования представления, не отразятся в определении представления до тех пор, пока вы не пересоздадите его заново.

Исключение мемо-полей из опции обновления WHERE

Когда это возможно, вы можете повысить скорость обновления, предотвратив сравнение мемо-полей представления (поля типа Memo, General или Picture) с парными полями в базовой таблице. По умолчанию, свойство CompareMemo установлено в true (.T.), что автоматически включает мемо-поля в опции SQL WHERE, генерируемой при создании обновляемого представления. Вы можете установить свойство CompareMemo в false (.F.) для исключения мемо-полей из SQL WHERE.

Использование транзакций

Для оптимальной производительности используйте ручные транзакции и управляйте ими сами. Режим ручной транзакции позволяет вам управлять процессом, когда вы передаете группу транзакций, что позволяет серверу быстро обработать большее количество предложений.

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

вы можете улучшить производительность в режиме автоматической транзакции с помощью увеличения значения свойства представления или курсора BatchUpdateCount. Когда вы используете большое значение для BatchUpdateCount, многжество предложений обновления упаковываются в одно предложение обновления, которое затем заключается в одну транзакцию. Однако, если любое предложение в пакете не пройдет, то откатывается весь пакет.

NoteСовет

Свойство BatchUpdateCount не поддерживается некоторыми серверами; вы должны протестировать это свойство для каждого удаленного сервера, вовлеченного в ваше приложение до его использования.

Использование хранимых процедур сервера

Вы можете создать на сервере хранимые процедуры, которые предварительно компилируются и поэтому исполняются очень быстро. Вы можете исполнять хранимые процедуры, посылать параметры со сквозными запросами (SQL pass-through) и переместить дополнительную обработку на сервер, если это подходит для вашего приложения.

Например, вы можете пожелать собирать вводы пользователя локально, а затем исполнять сквозной запрос SQL pass-through для посылки данных на сервер, вызвав подходящую хранимую процедуру. Что сделать это, вам может потребоваться создать форму для локального курсора или массив для сбора данных и, затем, написать код, который сконструируем команды SQLEXEC( ) с использование имени хранимой процедуры и обеспечиваемых параметров. Вы одлжны, затем, добавить этот код в событеи Click командной кнопки с заголовком "OK" или "Commit." Когда пользователь щелкнет по кнопке, то будет запущена команда SQLEXEC( ). Использование хранимых процедур на удаленном сервере для обновления удаленных данных может  быть более эффективным, так как хранимые процедуры компилируются на сервере.

Пакетные обновления

Если ваше приложение обновляет целый ряд записей, вы можете пожелать посылать обновления пакетами, так как они обслуживаются более эффективно и сетью, и сервером. Предложения Update или Insert собираются в пакет до посылки их на сервер, в соответствии со значением свойства представления BatchUpdateCount. Значением по умолчанию является единица, что означает, что каждая запись посылается на сервер с предложением обновления. Вы можете снизить нагрузку сети увеличением значения пакета множественных обновлений в предложении.

NoteСовет

Свойство BatchUpdateCount  не поддерживается некоторыми серверами; вы должны протестировать это свойство для каждого удаленного сервера, вовлеченного в ваше приложение до его использования.

Для более эффективного использования этой возможности, соединение предстваления должно быть установлено в режим буферирования 5, для опитимистического буферирования таблицы, а изменения, в идеале, должны быть ограничены теми же самыми полями в каждой строке курсора. Вы можете использовать функцию DBSETPROP( ) для установки свойства BatchUpdateCount в определении представления; для изменения значения активного курсора, используйте CURSORSETPROP( ).

Оптимизация производительности обновлений и удалений

Вы можете использовать приведенные ниже руководства для установки свойств представления и соединения для оптимизации производительности обновлений и удалений. Свойство BatchSize вашего представления оказывает наибольшее влияние на производительность.

 
Объект Свойство Установка Замечания

View

BatchUpdateCount

10 – 30 строк

Установите большее значение для небольших по размеру обновлений 1. Установка повышает производительность до 50%. По умолчанию равна 1.

Connection

Asynchronous

(.F.)

Используйте синхронные соединения для увеличения производительности до 50%, до тех пор, пока вы не пожелаете иметь возможность прекратить исполнение SQL предложений, исполняемых на сервере. По умолчанию устанавливается в синхронный режим.

Connection

WaitTime

N/A

Для увеличения производительности в асинхронном режиме, используйте укороченное время ожидания; для снижения нагрузки на сеть увеличтьте время ожидания.

Connection

PacketSize

4K to 12K

Незначительно влияет на производительность.

1 Ваши лучшие значения будут зависеть, кроме того, и от скорости вашего сервера.

Реальная производительность в высшей мере зависит от конфигурации вашей системы и требований приложения.

Смотрите также