Firebird Documentation Index → Firebird 2.5 リリースノート → Firebirdエンジンの変更 |
Table of Contents
このリリースの主な目的は、マルチプロセッサのハードウェアが持つ対称型マルチプロセッシング(SMP)の性能を活用するため、Firebirdのスレッド・アーキテクチャをリファクタリングすることでした。これにより、複数のデータベースが同時にアクセスされるようなスーパーサーバーのスケーラビリティに著しい効果が得られます。しかし、その重要な成果は、Firebird 3に向けて開発中の、きめ細かなマルチスレッディングを支える“スーパークラシックサーバー”モデルの登場です。
スーパーサーバーでは、新しいアーキテクチャの大きな利点として次の二点が挙げられます:
複数データベース環境では、各データベースに対するスーパーサーバーのスレッドが、利用可能なプロセッサに均等に割り当てられます。
デフォルトのCpuAffinity設定では、スーパーサーバーはシングルプロセッサにバインドされたままです。複数のデータベースを活用する際にこの改善の恩恵を受けるには、firebird.conf
の設定を変更する必要があります。
SMPハードウェア上では、単一のデータベースを利用する場合でも、スケーリングのわずかな改善が認められるはずです。
クラシックサーバーでは、さらに顕著な効果が得られます:
クラシックサーバーがマルチスレッド化できるようになりました。1プロセスに1ワーカースレッドというモデルは従来通りですが、非同期のシャットダウン、スイープ、ロックマネージャとのプロセス間通信など並行したタスクの処理に追加のスレッドを利用できるようになりました。
POSIX版では、クラシックサーバーでも、以前のようにフォークしたプロセスではなく、スレッドでサービスを運用できるようになりました。
Windows版のクラシックサーバーでは、サービスはバージョン2.1ですでにスレッド化されていました。
エンベデッドライブラリ—POSIX版ではlibfbembed.so、Windows版ではfbembed.dll—は、マルチスレッドに対応し、スレッドセーフとなっています。そのため、これらはマルチスレッドアプリケーションから利用できます。
テストでは、このバージョンのクラシックサーバーのパフォーマンスは以前のバージョンに比べて相当速くなることが示されています。
この、クラシックサーバーのマルチスレッド・モードは、単一のサーバー・プロセス内で—割り当て中またはプーリング中—の複数のワーカースレッドを処理する能力から、“スーパークラシックサーバー”と名づけられています。通常の機能については全てクラシックサーバーと共通していますが、二三の相違点があります:
どのプラットフォーム上でも、サーバーエンジンの安全かつ完全なシャットダウンが可能です。
あるTPCベンチマークでは、クラシックサーバーを15〜20%ほど上回るパフォーマンスを示しています。
カーネル・リソースの使用量が少なくなります(メモリ使用は減りませんが)。
スーパークラシックサーバーのプロセスがクラッシュした場合、全ての接続が道連れになります。
アタッチメント/アクティブユーザーのリストを取得できないなど、クラシックサーバー用サービスAPIに見られる制限は、スーパークラシックサーバーには適用されません。
POSIX版のスーパークラシックサーバーが[x]inetdを必要としません。
WindowsのDLLライブラリであるエンベデッドサーバーfbembed.dllが、以前のスーバーサーバーではなく、スーパークラシックサーバーを利用するようになり、このモデルをPOSIX上のスーパークラシックサーバーへのローカル接続に統合します。以前には単一のアプリケーション空間への接続を制限していたデータベースのファイルロックが、異なるエンベデッドサーバー・モジュールから同じデータベースへの同時アクセスを可能にするグローバルロックテーブルに置き換えられました。アプリケーションの同時デバッグやgbakやgstatのようなネイティブのユーティリティ・ツールの利用を容易にします。
単一のアタッチメント・ハンドルが同時スレッドに共有されるようになりました。(トラッカー・リファレンス CORE-2498 A. dos Santos Fernandes)。
Windows版では、同じfb_inet_server.exe
バイナリが、スイッチの設定によって、クラシックサーバーとスーパークラシックサーバー、いずれの作業モードをも提供します。デフォルトはクラシックサーバー・モードです。
スーパークラシック・モードをサービスとして利用するには、次のように、コマンドラインでinstsvc.exeに-m[ulti-threaded]
スイッチを付けます。
instsvc install -multithreaded
スーパークラシックサーバーをアプリケーションとして運用したい場合は、次のようにします。
fb_inet_server -a -m
POSIX版では、スーパークラシックサーバー・モデルとして新しいバイナリfb_smp_server
が提供されました。これにはネットワークリスナーが含まれているため、アタッチメント・リクエストに関してfbserver
と同様に働き、[x]inetdを必要としません。
fb_smp_server
が使用するマルチスレッド・エンジンは、OSRI要請に従い、libfbembed.so
となっています。クラシックサーバーのパッケージにはfbguard
(Guardian)も含まれます。これは、スーパークラシックサーバーのインストールの際に、fbserver
ではなくfb_smp_server
を開始します。スーパーサーバー・モデルがGuardianと一緒にインストールされた際に行われることと同様です。
従来のクラシックサーバーの運用中にはfbguard
を使用しないで下さい。
Firebird Documentation Index → Firebird 2.5 リリースノート → Firebirdエンジンの変更 |