データベースのページ・サイズが大きすぎる場合の 解決策とパフォーマンスの問題
概要:データベース・サーバでは、データベース・サーバで実行中のすべてのデータベースで最大のページ・サイズ以上のページ・サイズを使用する必要があります。それよりも小さいサイズを使用すると、”Page size too big” というエラー・メッセージが表示されます。
Adaptive Server Anywhere (SQL Anywhere)でのデータベース・サーバのページ・サイズとデータベースのページ・サイズの関係についての一般的な規則は、次のとおりです。
データベース・サーバでは、データベース・サーバで実行中のすべてのデータベースで最大のページ・サイズ以上のページ・サイズを使用する必要があります。
データベースをデータベース・サーバと同時に起動した場合は、データベース・サーバのページ・サイズは正しく設定されます。ただし、データベース・サーバで実行中のデータベースで最大のページ・サイズよりも大きなページ・サイズを指定して他のデータベースを動的に起動しようとすると、”Page size too big” エラー・メッセージが表示されます。
デフォルトでは、データベースは 1024 バイトのページ・サイズで作成されます (注意:Adaptive Server Anywhere (SQL Anywhere)6.0.3 以降では、デフォルトのページ・サイズは 2048 バイトです)。
解決策 1
特定のデータベース・サーバでどのデータベースが実行されているかを先に特定できる場合は、それらのデータベースで最大のページ・サイズにデータベース・サーバのページ・サイズを設定します。
例:
db1.db、db2.db、db3.db という 3 つのデータベースが named.db1 というサーバのドライブ C;\ にあり、ページ・サイズがそれぞれ 1024、1024、2048 であるとします。
次のコマンドは、いずれもデータベース・サーバ名 db1 のページサイズを 2048 バイトに設定します。
データベース・サーバの名前は、-n スイッチを使用してデータベース・サーバを明示的に指定していない場合は、最初に起動したデータベースと同じ名前になります。データベース・サーバのページ・サイズは、同時に起動したデータベースで最大のページ・サイズに設定します
dbsrv6 c:\db1.db c:\db2.db c:\db3.db
データベース・サーバのページ・サイズは、-gp スイッチをデータベース・サーバの起動コマンドで使用して明示的に 2048 バイトに設定します。
dbsrv6 -gp 2048 c:\db1.db c:\db2.db c:\db3.db
データベース・サーバのページ・サイズは、-gp スイッチをデータベース・サーバの起動コマンドで使用して明示的に 2048 バイトに設定します。データベース (db1) のページ・サイズは、この場合も 1024 バイトです。すべてのデータベース・サーバのページの半分は空白のままになります。
dbsrv6 -gp 2048 -n db1
データベース・サーバの名前は、データベースの指定前に、-n スイッチをデータベース・サーバの起動コマンドで使用して明示的に設定します。c:\db3.db のページ・サイズは 2048 バイトであるため、ページ・サイズは 2048 に設定されます。
dbsrv6 -n db1 c:\db3.db
DBINFO ユーティリティを使用して、データベースのページ・サイズを検証できます。
例:
dbinfo -c “uid=dba;pwd=sql;dbf=c:\db1.db”
解決策 2
データベースのページ・サイズを変更するには、異なるページ・サイズのデータベースを新しく作成し、元のデータベースをアンロードし、新しいページ・サイズの新しいデータベースに再ロードします。
例:
db1.db、db2.db、db3.dbという3つのデータベース名がdb1という named.db1 というサーバのドライブ C;\ にあり、ページ・サイズがそれぞれ 1024、1024、2048 であるとします。また、何らかの理由で、これらのデータベースでページ・サイズを 2048 バイトに統一するとします。db3.db の変更は不要です。db1.db と db2.db については、次のように操作します。このとき、c:\unload ディレクトリが存在するとします。
新しいページ・サイズの新しいデータベースを作成します。
dbinit -p 2048 c:\db1new.db
古いデータベースをアンロードします。
dbunload -c “uid=dba;pwd=sql;dbf=c:\db1.db” -r c:\reload.sql c:\unload
古いデータベースを新しいデータベースにリロードします。
isql -c “uid=dba;pwd=sql;dbf=c:\db1new.db” read c:\reload.sql
c:\db2.db に対して上記の手順を繰り返します。
パフォーマンスの問題
1 つのデータベース・サーバのページに格納できるのは、最大でも 1 つのデータベース・ページです。一方のページ・サイズが 4K、もう一方のページ・サイズが 1K の 2 つのデータベースを起動すると、データベース・サーバは 4K のページ・サイズを使用します。したがって、1K のデータベース・ページはデータベース・サーバのページの 4 分の 1 だけを使用します。データベース・ページのサイズが 512 バイトの場合は、1024 バイトのすべてのキャッシュ・ページの少なくとも半分が無駄になります。上位互換性のため 512 バイトのページ・サイズはサポートされていますが、上記の理由のため、使用はお勧めしません。