ここでは、データベース内のローがディスクに保存される方法について説明します。
新しいローは、データベース・ファイルのページ・サイズよりも小さい場合、常に単一のページに保管されます。現在のページに新しいローを保存する十分な空き領域がない場合、SQL Anywhere はローを新しいページに書き込みます。たとえば、新しいローが 600 バイトの領域を必要とするときに、ページの一部が埋まっていて 500 バイトしか使用できない場合、SQL Anywhere は新しいページにローを配置します。
ディスク上のテーブル・ページがさらに連続するように、SQL Anywhere はテーブル・ページを 8 ページのブロック単位で割り付けます。たとえば、1 ページの割り付けが必要な場合は、8 ページを割り付け、必要な 1 ページをブロックに挿入してから、ブロックの残りの 7 ページを埋めます。また、空きページ・ビットマップを使用して、DB 領域内で連続するページ・ブロックを検索します。次に、64 KB のグループを読み込み、ビットマップを使用して関連ページを検索し、逐次スキャンを実行します。このため、逐次スキャンの効率が高まります。
SQL Anywhere はページの領域を検索し、受け取った順序でローを挿入します。それぞれのローを 1 ページに割り当てますが、テーブル内で選択したロケーションは、ローが挿入された順序と一致しない場合があります。たとえば、データベース・サーバは、長いローを隣接して保管するためにページを新しくする必要があることがあります。次のローが短い場合、そのローは前のページの空いているロケーションに配置されます。
すべてのテーブルのローには順序が付いていません。ローを受け取ったり処理したりする順序が重要である場合、SELECT 文で ORDER BY 句を使用し、結果に順序を付けます。テーブル内のローの順序に依存するアプリケーションは、警告なしに失敗することがあります。
テーブルのローを特定の順序にすることが頻繁に必要になる場合は、クエリの ORDER BY 句で指定したカラムにインデックスを作成することを検討してください。
デフォルトでは、SQL Anywhere は、ローを挿入する場合は、必ずローを作成時の値で表すために必要な領域だけを予約します。NULL 値、またはテキスト文字列などの拡張する可能性のあるフィールドを格納するための追加領域は予約しません。
SQL Anywhere に対して、テーブルの作成時に PCTFREE オプションを使用して領域を予約するよう強制できます。詳細については、CREATE TABLE 文を参照してください。
一度ページ上にホーム位置が割り当てられると、ローは決してそのページから移動しません。更新によりローのいずれかの値が変更され、割り当てられているページに適合しなくなると、ローは分割され、追加情報が別のページに挿入されます。
この特性、特にローの挿入時に SQL Anywhere が追加領域を許可しない点には、注意が必要です。たとえば、大量の空のローを 1 つのテーブルに挿入して、UPDATE 文を使用して一度に 1 カラムずつ値を入力するとします。この結果、1 つのローにあるほとんどすべての値は別々のページに保存されます。1 つのローからすべての値を取り出すために、データベース・サーバは複数のディスク・ページを読み込まなければならない場合があります。この簡単な操作にかなりの時間がかかることになります。
新しいローへのデータ配置を挿入時に行うことを検討してください。ローは一度挿入されれば、データを保持するのに十分な領域を確保します。
データベースにローを挿入してから削除すると、SQL Anywhere はローが使用していた領域を自動的に再利用します。したがって、SQL Anywhere は別のローが以前に使用していた領域に新しいローを挿入します。
また、各ページの空き領域のレコードを保持しています。新しいローを挿入するよう要求すると、Adaptive Server Anywhere は、まず既存のページの領域のレコードを検索します。既存のページで十分な領域を見つけると、新しいローをそのページに配置し、必要であればそのページの内容を再編成します。見つけられない場合には、新しいページを開始します。
いくつかのローを削除し、空き領域を使用できる程度の小さなローを新しく挿入しなかった場合、時間の経過とともにデータベース内の情報がまばらになることがあります。その場合は、テーブルを再ロードするか、REORGANIZE TABLE 文を使用してテーブルの断片化を解除します。
詳細については、REORGANIZE TABLE 文を参照してください。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |