Поделиться через


Функция JetDefragment

Применимо к: Windows | Windows Server

Функция JetDefragment

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

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

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

Эта операция отличается от JetCompact , которая делает копию базы данных только для чтения в весьма оптимальной форме.

    JET_ERR JET_API JetDefragment(
      __in          JET_SESID sesid,
      __in          JET_DBID dbid,
      __in          JET_PCSTR szTableName,
      __out_opt     unsigned long* pcPasses,
      __out_opt     unsigned long* pcSeconds,
      __in          JET_GRBIT grbit
    );

Параметры

sesid

Сеанс, используемый для этого вызова.

dbid

База данных, которая будет дефрагментирована.

szTableName

Неиспользуемый параметр. Дефрагментация выполняется для всей базы данных, описанной заданным идентификатором базы данных.

pc Pass

При запуске задачи дефрагментации в сети этот входной параметр задает максимальное число проходов дефрагментации. При остановке задачи дефрагментации в сети для этого выходного буфера устанавливается количество выполненных проходов.

Если для этого параметра задано значение NULL, количество проходов дефрагментации в сети не ограничено.

pcSeconds

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

Если для этого параметра задано значение NULL или если pcSeconds указывает на отрицательное значение, максимальное время дефрагментации не ограничено.

grbit

Группа битов, задающая ноль или несколько следующих параметров.

Значение

Значение

JET_bitDefragmentAvailSpaceTreesOnly

Дефрагментирует доступную часть пространства при выделении пространства базы данных ESE. Пространство базы данных делится на два типа: собственное и доступное пространство. Собственное пространство выделяется для таблицы или индекса, а доступное пространство готово для использования в таблице или индексе соответственно. Доступное пространство является гораздо более динамичным в поведении и требует дефрагментации в режиме on-line больше, чем собственного пространства, таблицы или индексных данных.

JET_bitDefragmentBatchStart

Запускает новую задачу дефрагментации.

JET_bitDefragmentBatchStop

Останавливает задачу дефрагментации.

Возвращаемое значение

Эта функция возвращает тип данных JET_ERR с одним из следующих кодов возврата. Дополнительные сведения о возможных ошибках ESE см. в разделах Ошибки подсистемы расширяемого хранилища и Параметры обработки ошибок.

Код возврата

Описание

JET_errSuccess

Операция выполнена успешно.

JET_errClientRequestToStopJetService

Невозможно выполнить операцию, так как все действия экземпляра, связанного с сеансом, прекратились в результате вызова JetStopService.

JET_errDatabaseFileReadOnly

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

JET_errDistributedTransactionAlreadyPreparedToCommit

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

JET_errInstanceUnavailable

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

JET_errInvalidDatabaseId

Данный идентификатор базы данных не соответствует известной базе данных в экземпляре .

JET_errNotInitialized

Невозможно выполнить операцию, так как экземпляр, связанный с сеансом, еще не инициализирован.

JET_errRestoreInProgress

Невозможно выполнить операцию, так как операция восстановления выполняется в экземпляре, связанном с сеансом.

JET_errSessionSharingViolation

Один и тот же сеанс нельзя использовать для нескольких потоков одновременно. Эта ошибка будет возвращена только в Windows XP и более поздних выпусках.

JET_errTermInProgress

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

JET_errTransReadOnly

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

JET_errVersionStoreOutOfMemory

Эта ошибка возникает, если настроенного размера хранилища версий недостаточно для хранения всех невыполненных обновлений.

JET_wrnDefragAlreadyRunning

Параметр JET_bitDefragmentBatchStart передан, но задача дефрагментации уже выполняет дефрагментацию в заданной базе данных.

JET_wrnDefragNotRunning

Параметр JET_bitDefragmentBatchStop передан, но в настоящее время задача дефрагментации не выполняется.

При успешном выполнении запрошенного действия либо запуска задачи дефрагментации для заданных данных с заданными параметрами, либо выполняется действие остановки существующей задачи дефрагментации.

При сбое запрошенное действие запуска или остановки задания дефрагментации в сети не выполняется. Другие побочные эффекты не возникают.

Комментарии

Дефрагментация в сети управляется как параметром параметра, так и этим API. Значение системного параметра по умолчанию — JET_OnlineDefragAll. Это означает, что дефрагментация включена для всех поддерживаемых структур данных. Однако с помощью JetSetSystemParameter можно отключить дефрагментацию в сети или выборочно включить ее только для деревьев пространства базы данных, только баз данных, только потоковой передачи файлов или любого сочетания этих параметров. Если для параметра системы для дефрагментации в сети задан устаревший параметр, JetDefragment будет обрабатывать этот параметр как JET_OnlineDefragAll.

Для каждой базы данных может выполняться не более одной задачи. Задача выполняется как поток в процессе размещения ESE.

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

Требования

Требование Значение

Клиент

Требуется Windows Vista, Windows XP или Windows 2000 Professional.

Сервер

Требуется Windows Server 2008, Windows Server 2003 или Windows 2000 Server.

Верхняя часть

Объявлено в Esent.h.

Библиотека

Используйте ESENT.lib.

DLL

Требуется ESENT.dll.

Юникод

Реализовано как JetDefragmentW (Юникод) и JetDefragmentA (ANSI).

См. также:

JET_ERR
JET_SESID
JetCompact
JetDefragment2
JetSetSystemParameter
JetStopService