Mobile Link 同期のスループットを最大限にするには、複数の同期が同時に発生し、効率よく実行することが重要になります。複数の同時同期を有効にするため、Mobile Link ではさまざまなタスク用にデータベース・ワーカ・スレッドのプールを用意しています。そのうちの 1 つは、ネットワークからのアップロード・データの読み込みとそのアンパック専用です。「データベース・ワーカ・スレッド」と呼ばれる別のスレッド・プールは、統合データベースへのアップロードの適用と統合データベースからダウンロードするデータのフェッチに使用されます。また別のデータベース・ワーカ・スレッドのプールは、ダウンロード・データのパックとリモート・データベースへの送信専用です。各データベース・ワーカ・スレッドは、同期スクリプトを使い、統合データベースへの単一の接続を使用して、変更の適用とフェッチを行います。
最も重要な要因は、同期スクリプトでのデータベース競合を避けることです。複数のクライアントがデータベースを使用する他の場合と同様、クライアントがデータベースに同時にアクセスするときには、データベース競合を最小限にします。同期のたびに修正が必要なデータベースのローがあると、競合の発生率が高くなります。たとえば、あるローのカウンタを増分するスクリプトがある場合、カウンタを更新することがボトルネックになる可能性があります。
同期要求は (-sm オプションで指定された制限数まで) 受け付けられ、アップロードされたデータの読み込みとアンパックが行われて、データベース・ワーカ・スレッドで使用できるようになります。データベース・ワーカ・スレッドの数より同期の数が多い場合は、超過分はキューに追加されて、データベース・ワーカ・スレッドに空きが出るのを待機します。
データベース・ワーカ・スレッド数と接続数は制御できますが、Mobile Link は、1 つのデータベース・ワーカ・スレッドに最低 1 つの接続があることを常に確認します。データベース・ワーカ・スレッドよりも多くの接続がある場合、余分な接続はアイドル状態です。スクリプト・バージョンが複数ある場合には、後述するように、余分な接続が役に立つこともあります。
同期スクリプトで発生する競合以外に、同期スループットの最も重要な要因になるのがデータベース・ワーカ・スレッド数です。データベース・ワーカ・スレッド数は、統合データベースで同時に進行する同期の数を制御します。
最適なデータベース・ワーカ・スレッド数を判別するにはテストが不可欠です。
データベース・ワーカ・スレッドの数を増やすと、統合データベースにアクセスできる同期の重複を多くしたり、スループットを向上させたりすることができます。その反面、重複する同期の間でリソースやデータベースの競合が増えて、1 つの同期にかかる時間も長くなります。データベース・ワーカ・スレッドの数が増えると、1 つの同期の時間が長くなるというデメリットがあるので、同時同期をより多く実行することが重要になります。また、さらにデータベース・ワーカ・スレッドを追加すると、スループットが低下します。使用する環境に最も適したデータベース・ワーカ・スレッド数を決定するには実験が必要ですが、次の情報も参考になります。
パフォーマンス・テストで、最高のアップロード・スループットは、データベース・ワーカ・スレッド数が比較的少ないときに発生することがわかりました。ほとんどの場合、3 ~ 10 のデータベース・ワーカ・スレッドが最適でした。統合データベース、データ容量、データベース・スキーマ、同期スクリプトの複雑さ、使用したハードウェアなどの要因によって結果は変動します。ボトルネックの一般的な原因は、統合データベース内でアップロード・スクリプトの SQL を同時に実行するデータベース・ワーカ・スレッド間の競合です。
ブロッキング・ダウンロード確認を使用するダウンロードに最適なデータベース・ワーカ・スレッド数は、クライアントから Mobile Link への帯域幅とクライアントの処理速度によって異なります。処理速度の遅いクライアントで、最適なダウンロード・パフォーマンスを得るには、より多くのデータベース・ワーカ・スレッドが必要です。これは、アップロードと比較すると、ダウンロードでは、より多くのクライアント処理が必要になる一方、それほど多くの統合データベース処理を必要としないからです。ブロッキング・ダウンロード確認を使用している場合、データベース・ワーカ・スレッドは、リモート・データベースでダウンロードの適用が完了するまでブロックします。非ブロッキング・ダウンロード確認では、ワーカをより多くする必要はありません。
ダウンロード確認を使用していない場合 (デフォルト)、別のスレッドでダウンロードを送信している間に特定のデータベース・ワーカ・スレッドで同期を処理できるので、クライアントから Mobile Link への帯域幅の影響が小さくなります。したがって、データベース・ワーカ・スレッド数は重要ではありません。
データベース・ワーカ・スレッド数よりも多くのダウンロードを同時に送信できます。ダウンロードのパフォーマンスを最適化するには、これらのダウンロードのバッファ用の RAM が Mobile Link サーバに十分にあることが重要です。RAM が十分になかった場合、ダウンロードはディスクにページングされるので、ダウンロードのパフォーマンスが低下する可能性があります。Mobile Link サーバのメモリ・キャッシュ・サイズを指定するには、-cm オプションを使用します。
-cm オプションを参照してください。
Mobile Link サーバでディスクへのページングが開始されたら (同時に処理されるダウンロードが多すぎる場合など)、-sm オプションを使用して、データベース・ワーカ・スレッドの数を減らすか、アクティブに処理される同期の合計数を制限することを検討してください。
-sm オプションを参照してください。
ダウンロード確認をオフ (デフォルト) のままにしておくと、ダウンロードに使用できるデータベース・ワーカ・スレッドの最適数が少なくなります。これは、データベース・ワーカ・スレッドがクライアントによるダウンロードの適用を待つ必要がないからです。
SendDownloadACK (sa) 拡張オプションを参照してください。
ダウンロード確認を使用する場合、パフォーマンスは、(ブロッキング・ダウンロード確認ではなく) 非ブロッキング・ダウンロード確認を使用した方が優れています。非ブロッキング確認モードでは、リモート・データベースがダウンロードを適用しているときに、サーバはデータベース・ワーカ・スレッドを再利用します。つまり、データベース・ワーカ・スレッドの数を増やす必要がないため、より高いパフォーマンスを得ることができます。
ダウンロードとアップロードの最高のスループットを得るために、Mobile Link には 2 つのオプションが用意されています。1 つは、ダウンロードを最適化するデータベース・ワーカ・スレッドの総数を指定するオプションです。もう 1 つは、アップロードを同時に適用できる数を制限して、アップロードのスループットを最適にするオプションです。
-w オプションは、データベース・ワーカ・スレッドの総数を制御します。デフォルトは 5 です。
-wu オプションは、アップロードを同時に統合データベースに適用できるデータベース・ワーカ・スレッド数を制限します。デフォルトでは、すべてのデータベース・ワーカ・スレッドがアップロードを同時に適用できますが、この場合、統合データベースで重大な競合が発生します。-wu オプションを使用すると、この競合を軽減すると同時に、多数のデータベース・ワーカ・スレッドでダウンロード・データのフェッチを最適化できます。-wu オプションは、その数値がデータベース・ワーカ・スレッドの合計数未満の場合にだけ有効です。
Mobile Link では、データベースの接続はデータベース・ワーカ・スレッドごとに作成されます。-cn オプションを使用すると、Mobile Link に対してデータベース接続のより大きなプールを作成するように指定できますが、Mobile Link が接続を閉じるか、異なるスクリプト・バージョンを使用する必要がないかぎり、余分な接続はアイドル状態です。
Mobile Link がデータベース接続を閉じ、新しい接続を開く場合が 2 つあります。1 つはエラーが発生した場合です。もう 1 つは、クライアントがある同期スクリプト・バージョンを要求し、現在使用されている接続の中にその同期バージョンを利用できる接続がない場合です。
それぞれのデータベース接続はスクリプト・バージョンと関連付けられています。バージョンを変更するには、接続を閉じて再度開いてください。
定常的に複数のスクリプト・バージョンを使用するのであれば、接続数を増やすことで Mobile Link での接続開閉要求を減らすことができます。同期に使用する接続数が、データベース・ワーカ・スレッド数とスクリプト・バージョン数の積になる場合は、接続数を増やす必要はありません。
次のコマンド・ラインには、2 つのスクリプト・バージョンに対して Mobile Link を調整する例が示されています。
mlsrv11 -c "dsn=SQL Anywhere 11 Demo" -w 5 -cn 10 |
同期に使用するデータベース接続の最大数は、スクリプト・バージョン数とデータベース・ワーカ・スレッド数の積です。したがって、-cn を 10 に設定することで、データベース接続が不必要に閉じられたり開かれたりすることを排除できます。
-cn オプションを参照してください。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |