Firebird Documentation IndexFirebird 2.5 リリースノート → Firebirdエンジンの変更
Firebird Home Firebird Home Prev: その他の新機能Firebird Documentation IndexUp: Firebird 2.5 リリースノートNext: スレッドセーフ・クライアント・ライブラリ

Firebirdエンジンの変更

Table of Contents

新しいスレッド・アーキテクチャ
スレッドセーフ・クライアント・ライブラリ
改善点

このリリースの主な目的は、マルチプロセッサのハードウェアが持つ対称型マルチプロセッシング(SMP)の性能を活用するため、Firebirdのスレッド・アーキテクチャをリファクタリングすることでした。これにより、複数のデータベースが同時にアクセスされるようなスーパーサーバーのスケーラビリティに著しい効果が得られます。しかし、その重要な成果は、Firebird 3に向けて開発中の、きめ細かなマルチスレッディングを支える“スーパークラシックサーバー”モデルの登場です。

新しいスレッド・アーキテクチャ

Dmitry Yemanov

Vladyslav Khorsun

Alex Peshkov

さらに

Nickolay Samofatov

Roman Simakov

スーパーサーバーでは、新しいアーキテクチャの大きな利点として次の二点が挙げられます:

  1. 複数データベース環境では、各データベースに対するスーパーサーバーのスレッドが、利用可能なプロセッサに均等に割り当てられます。

    Note

    デフォルトのCpuAffinity設定では、スーパーサーバーはシングルプロセッサにバインドされたままです。複数のデータベースを活用する際にこの改善の恩恵を受けるには、firebird.confの設定を変更する必要があります。

  2. SMPハードウェア上では、単一のデータベースを利用する場合でも、スケーリングのわずかな改善が認められるはずです。

クラシックサーバーでは、さらに顕著な効果が得られます:

  1. クラシックサーバーがマルチスレッド化できるようになりました。1プロセスに1ワーカースレッドというモデルは従来通りですが、非同期のシャットダウン、スイープ、ロックマネージャとのプロセス間通信など並行したタスクの処理に追加のスレッドを利用できるようになりました。

  2. POSIX版では、クラシックサーバーでも、以前のようにフォークしたプロセスではなく、スレッドでサービスを運用できるようになりました。

    Note

    Windows版のクラシックサーバーでは、サービスはバージョン2.1ですでにスレッド化されていました。

  3. エンベデッドライブラリ—POSIX版ではlibfbembed.so、Windows版ではfbembed.dll—は、マルチスレッドに対応し、スレッドセーフとなっています。そのため、これらはマルチスレッドアプリケーションから利用できます。

  4. テストでは、このバージョンのクラシックサーバーのパフォーマンスは以前のバージョンに比べて相当速くなることが示されています。

スーパークラシックサーバー

この、クラシックサーバーのマルチスレッド・モードは、単一のサーバー・プロセス内で—割り当て中またはプーリング中—の複数のワーカースレッドを処理する能力から、“スーパークラシックサーバー”と名づけられています。通常の機能については全てクラシックサーバーと共通していますが、二三の相違点があります:

  • どのプラットフォーム上でも、サーバーエンジンの安全かつ完全なシャットダウンが可能です。

  • あるTPCベンチマークでは、クラシックサーバーを15〜20%ほど上回るパフォーマンスを示しています。

  • カーネル・リソースの使用量が少なくなります(メモリ使用は減りませんが)。

  • スーパークラシックサーバーのプロセスがクラッシュした場合、全ての接続が道連れになります。

  • アタッチメント/アクティブユーザーのリストを取得できないなど、クラシックサーバー用サービスAPIに見られる制限は、スーパークラシックサーバーには適用されません。

  • POSIX版のスーパークラシックサーバーが[x]inetdを必要としません。

エンベデッドサーバーに関する注意

  • WindowsのDLLライブラリであるエンベデッドサーバーfbembed.dllが、以前のスーバーサーバーではなく、スーパークラシックサーバーを利用するようになり、このモデルをPOSIX上のスーパークラシックサーバーへのローカル接続に統合します。以前には単一のアプリケーション空間への接続を制限していたデータベースのファイルロックが、異なるエンベデッドサーバー・モジュールから同じデータベースへの同時アクセスを可能にするグローバルロックテーブルに置き換えられました。アプリケーションの同時デバッグやgbakgstatのようなネイティブのユーティリティ・ツールの利用を容易にします。

  • 単一のアタッチメント・ハンドルが同時スレッドに共有されるようになりました。(トラッカー・リファレンス CORE-2498 A. dos Santos Fernandes)。

使用上の注意

Windows版

Windows版では、同じfb_inet_server.exeバイナリが、スイッチの設定によって、クラシックサーバーとスーパークラシックサーバー、いずれの作業モードをも提供します。デフォルトはクラシックサーバー・モードです。

スーパークラシック・モードをサービスとして利用するには、次のように、コマンドラインでinstsvc.exe-m[ulti-threaded]スイッチを付けます。

instsvc install -multithreaded
            

スーパークラシックサーバーをアプリケーションとして運用したい場合は、次のようにします。

fb_inet_server -a -m
            
POSIX版の新バイナリ

POSIX版では、スーパークラシックサーバー・モデルとして新しいバイナリfb_smp_serverが提供されました。これにはネットワークリスナーが含まれているため、アタッチメント・リクエストに関してfbserverと同様に働き、[x]inetdを必要としません。

fb_smp_serverが使用するマルチスレッド・エンジンは、OSRI要請に従い、libfbembed.soとなっています。クラシックサーバーのパッケージにはfbguard(Guardian)も含まれます。これは、スーパークラシックサーバーのインストールの際に、fbserverではなくfb_smp_serverを開始します。スーパーサーバー・モデルがGuardianと一緒にインストールされた際に行われることと同様です。

Important

従来のクラシックサーバーの運用中にはfbguardを使用しないで下さい。

Prev: その他の新機能Firebird Documentation IndexUp: Firebird 2.5 リリースノートNext: スレッドセーフ・クライアント・ライブラリ
Firebird Documentation IndexFirebird 2.5 リリースノート → Firebirdエンジンの変更