次の方法で共有


JetDefragment 関数

適用対象: Windows |Windows Server

JetDefragment 関数

JetDefragment 関数は、データベース内のデータorganizationを向上させるデータベース最適化タスクを開始および停止します。 これは、データベース内でより効率的に既存のディスク割り当てを使用して、データベースの増加を制限するために行われます。 また、データがより緊密にパックされるようにすることで、ワーキング セットを削減することもできます。 最後に、より優れたデータ organizationを使用して一般的な操作を高速化することで、アプリケーションのパフォーマンスを向上させることができます。

データベースの最適化はオンライン操作であり、クエリ操作やデータ更新などの通常のデータベース アクティビティを中断しません。 JetDefragment では、既存のすべてのデータのコピーも作成されません。 代わりに、データベースを最適化します。 最後に、 JetDefragment は再利用のために内部データベース領域を回復しますが、オペレーティング システム のファイル システムに余分な領域を解放しません。

結果として得られるデータの形式ははるかに効率的ですが、一般的には最適ではありません。 最適化は、既に論理的に削除されたデータを含む再利用のためにデータベース ページを解放することに限定されます。 最適化により、1 つのページに収まる場合に 2 つのページのデータを組み合わせることによって、場合によってはデータベース ページを再利用することもできます。

この操作は、読み取り専用データベースのコピーを最適な形式にする 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

未使用のパラメーター。 最適化は、指定されたデータベース ID によって記述されたデータベース全体に対して実行されます。

pcPasses

オンライン最適化タスクを開始するときに、この入力パラメーターは最適化パスの最大数を設定します。 オンライン最適化タスクを停止すると、この出力バッファーは実行されたパスの数に設定されます。

このパラメーターが NULL に設定されている場合、オンライン最適化パスの数は無制限です。

pcSeconds

オンライン最適化タスクを開始するときに、この入力パラメーターは最適化の最大時間を設定します。 オンライン最適化タスクを停止すると、この出力バッファーは最適化に使用される時間の長さに設定されます。

このパラメーターが NULL に設定されている場合、または pcSeconds が負の値を指している場合、最適化の最大時間は無制限です。

grbit

次のオプションの 0 個以上を指定するビットのグループ。

説明

JET_bitDefragmentAvailSpaceTreesOnly

ESE データベース領域の割り当ての使用可能な領域を最適化します。 データベース領域は、所有領域と使用可能な領域の 2 種類に分かれています。 所有領域はテーブルまたはインデックスに割り当てられますが、使用可能な領域はそれぞれテーブルまたはインデックス内で使用できます。 使用可能な領域は、動作においてはるかに動的であり、所有されているスペースやテーブルまたはインデックス データよりも、オンラインでの最適化が必要です。

JET_bitDefragmentBatchStart

新しい最適化タスクを開始します。

JET_bitDefragmentBatchStop

最適化タスクを停止します。

戻り値

この関数は、次のいずれかの戻りコードを 使用して、JET_ERR データ型を返します。 考えられる ESE エラーの詳細については、「 拡張ストレージ エンジン エラーエラー処理パラメーター」を参照してください。

リターン コード

説明

JET_errSuccess

操作は正常に完了しました。

JET_errClientRequestToStopJetService

JetStopService の呼び出しの結果、セッションに関連付けられたインスタンスのすべてのアクティビティが停止したため、操作を完了できません。

JET_errDatabaseFileReadOnly

最適化のために選択されたデータベースは読み取り専用であり、最適化を含め、どのような方法でも更新することはできません。

JET_errDistributedTransactionAlreadyPreparedToCommit

指定されたセッションはコミットの準備が整っており、現在のトランザクションがコミットまたはロールバックされるまで、新しい更新を開始することはできません。

JET_errInstanceUnavailable

セッションに関連付けられているインスタンスで、そのデータの整合性を保護するためにすべてのデータへのアクセスを取り消す必要がある致命的なエラーが発生したため、操作を完了できません。 このエラーは、Windows XP 以降のリリースでのみ返されます。

JET_errInvalidDatabaseId

指定されたデータベース ID が、インスタンス内の既知のデータベースと一致しません。

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として扱います。

データベースごとに最大で 1 つのタスクを実行できます。 タスクは、ESE をホストするプロセスでスレッドとして実行されます。

最適化タスクによって独自のセッションが割り当てられるため、最適化タスクの続行中に、オンライン最適化タスクの開始に使用されるセッションをデータベース操作に使用できます。 指定されたセッションは、タスク開始セッションに関連付けられているアクセス許可をチェックするためにのみ使用され、実際には最適化操作自体には使用されません。

要件

要件

Client

Windows Vista、Windows XP、または Windows 2000 Professional が必要です。

[サーバー]

Windows Server 2008、Windows Server 2003、または Windows 2000 Server が必要です。

Header

Esent.h で宣言されています。

Library

ESENT.lib を使用します。

[DLL]

ESENT.dllが必要です。

Unicode

JetDefragmentW (Unicode) および JetDefragmentA (ANSI) として実装されます。

参照

JET_ERR
JET_SESID
JetCompact
JetDefragment2
JetSetSystemParameter
JetStopService