Firebird Documentation IndexFirebird 2.5 リリースノートFirebirdエンジンの変更 → 改善点
Firebird Home Firebird Home Prev: スレッドセーフ・クライアント・ライブラリFirebird Documentation IndexUp: Firebirdエンジンの変更Next: Firebird APIとODSの変更

改善点

クラシックサーバーで接続の切れたクライアントの即時検出
最適化
64bitサーバーでのキャッシュサイズ制限の拡大
デフォルトでのデータベースの配置
Windows版エンベデッドエンジン向けDLLのロード
大きな外部テーブルのサポートが有効に
データベースの統計が64bit値で適切に動作するように
UDFのセーフガード
診断
メタデータの改善

実装された改善点は以下の通り:

クラシックサーバーで接続の切れたクライアントの即時検出

Vladyslav Khorsun

クラシックサーバーが、クライアントの切断によって壊れたサーバーのプロセスを、すぐに検出できるようになりました。これに対し、未完了の活動を終了させたり、アクティブなトランザクションをロールバックしたり、ネットワークの接続を閉じたりといった対応をします。

トラッカー・リファレンス CORE-818

最適化

重要な最適化は以下の通り:

データの取得

Dmitry Yemanov

最適化により、どのフィールドもアクセスされていないテーブルについて、データ取得のパフォーマンスが改善されました。これは、例えば、SELECT COUNT(*)型のクエリに適用されます。

トラッカー・リファレンス CORE-1598

BLOBメモリの使用法

Adriano dos Santos Fernandes

最適化により、それぞれの一時的なBLOBに割り当てる際に生成された、<ページサイズ>バイトのメモリ消費を避けることができます。

トラッカー・リファレンス CORE-1658

更新パフォーマンスの改善

V. Khorsun

この改善の狙いは、“careful write”による更新手続きの際にエンジンが優先的に行う書き込みの量を減らすことでした。従来の手続きでは、大規模な更新、特に同一のトランザクションで同一のレコードへの複数回の更新を行う“updates-in-place”のパフォーマンスに目立った影響が出ていました。最悪の場合には、更新の際に生成された全ての単一の新しいレコードのバージョンのために、ディスクにページが書き込まれることもありました。

内部で何が起きているのかについての簡単な技術的解説は、トラッカー・リファレンス (CORE-2672)を参照して下さい。

この解決策では、正しい優先順位を維持するためレコードの新バージョンと旧バージョンとが置かれたページ間で起きる循環参照から、書き込み操作を保護することに関わるプロセスで多大な時間を要する可能性があったという事態に対処しています。

64bitサーバーでのキャッシュサイズ制限の拡大

V. Khorsun

トラッカー・リファレンス CORE-1687

以前の64bit版Firebirdサーバーでは、64bitアドレス空間の恩恵が受けられず、データベースのキャッシュを2GB(16K * 128K)以上に設定することができませんでした。この問題は今回のバージョンで修正されました。64bit版Firebirdでは、リソースが利用可能な場合、RAM内に5〜10GBのデータベースに完全に対応できる十分な大きさのキャッシュを設定することが可能になりました。

Firebirdのキャッシングは、ファイルシステムのキャッシュから多くの恩恵を受けることができますが、このことは、主に読み取りに負荷がかかる高スループット・システムにとって、おそらく重要な機能となっています。x64版Firebirdサーバーでのキャッシュの理論上の上限は2^31 -1(2,147,483,647)ページとなっています。

デフォルトでのデータベースの配置

A. Peshkov

トラッカー・リファレンス CORE-1643

設定パラメータDatabaseAccessに、さらに多くの“意味”が付け加えられました。特に指定がない場合、エンジンは、“Restrict”リスト内のDatabaseAccessで最初に登録された配置場所を、新規にデータベースを作成する際や、接続パラメータによってエイリアスもフルパスも指定されていないデータベースを見つけるための、デフォルトの配置として受け取ります。

この探索ロジックは、RestrictリストからExternalFileAccessパラメータに渡されて、外部テーブルを見つけるために使われるのと同様のものです。すなわち、

  1. Restrctリスト内の全てのディレクトリが最初に探索されます。

  2. 指定されたデータベースが見つからない場合:

    • CREATE DATABASEが含まれる場合、Restrictリスト内の最初の配置場所が使われます。

    • そうでない場合、アタッチは期待通りには行なわれません。

注意 :: 現在の作業ディレクトリ

この機能は、直接ローカル接続するために指定されたデータベース・ファイルの暗黙の配置場所として現在の作業ディレクトリを使用することを禁ずるものではありません。これらの場合には、従来とまったく同様に、Y-valveがパス解決を処理します。

データベースがどこに“ある”のか確かめる方法がないからといって、リモート・サブシステムを介して稼働中のスタンドアロンのサーバーが、パスの記述がないデータベース・ファイル名を使って接続しようとするというのは、まずありえない状況ですが、推奨されません。例えば、Windows版では、こうした状況での現在の作業ディレクトリは%system%となります。

Windows版エンベデッドエンジン向けDLLのロード

Adriano dos Santos Fernandes

アプリケーション構成のインストール時に、いわゆる“DLL地獄”に陥った場合に共通して起こる問題を避けるため、Windows版エンベデッドエンジン向けのルート決定メカニズムが変更されました。以前には、ユーザーアプリケーションのメインの実行ファイルを含むディレクトリが暗黙のルートディレクトリとなっていました。今後は、リネームされたfbembed.dllライブラリが置かれているディレクトリとなります。

トラッカー・リファレンス CORE-1814

大きな外部テーブルのサポートが有効に

Vlad Khorsun

Firebirdの以前のバージョンでは、外部テーブルを使用する際に32bit I/Oを使っていたため、外部ファイルのサイズは2GB未満に制限されていましたが、64bit I/Oがサポートされるファイルシステム上では、外部テーブルメカニズムがこれを利用するよう拡張されたことで、2GBの制限は事実上撤廃されました。

トラッカー・リファレンス CORE-2492

データベースの統計が64bit値で適切に動作するように

V. Khorsun

A. Peshkov

トラッカー・リファレンス CORE-2619

Firebirdの以前のバージョンでは、メモリその他の統計が64bit値を適切に処理していませんでした。このイシューには二つの要素があります:

  1. エンジンが統計に64bit整数を使えるように、AtomicCounterの内部が変更されました。

  2. isqlおよびqliのツールを64bit値に見合った動作をするよう改良する必要がありました。

古いクライアントとの非互換性

32bitのツールが64bitのサーバーで正しく動作するため、いくつかの新しい内部API機能(struct perf64perf64_xxx)を導入し、またそれらを使用するisqlqliを変更する必要がありました。このことは、バージョン2.5のisqlqliのプログラムが古いFirebirdクライアントとの互換性を持たないことを意味します。

UDFのセーフガード

Adriano dos Santos Fernandes

トラッカー・リファレンス CORE-1937

Firebirdサーバーがアクセスしているのと同じランタイムによって割り当てられていないポインタを返すような文字列UDFが書かれている場合、その宣言中のFREE_ITキーワードの存在が、メモリを汚染し、サーバーをクラッシュさせます。そのような異常なUDFに対するセーフガードとして、エンジンは…

  1. そのようなUDFを検出し、例外をスローします。

  2. エンベデッド版を含む全てのサーバー・モデルで、更新されたib_utilライブラリがパスの中に存在するか否かに依存します。

診断

トランザクションの診断

Claudio Valderrama

TPBの内容に不正がある場合の診断とエラーレポートが改善されました。新たなTPB検証ロジックは、以下のものをリジェクトします:

  • 同じカテゴリの中で明らかに矛盾するオプション。例えば、一緒に指定された{WAIT}{NOWAIT}、あるいは、{READ COMMITTED}{SNAPSHOT}、あるいは、{READ ONLY}{WRITE}

  • 無意味なオプション。例えば、SNAPSHOT分離モードに指定された[NO] RECORD VERSION

  • テーブル予約オプションの誤った命令。例えば、{READ <TABLE> PROTECTED}と間違えて{PROTECTED READ <TABLE>}

トラッカー・リファレンス CORE-1600

アクセス権のエラーメッセージ

Alex Peshkov

カラムに対するアクセス権の例外が起きた時、テーブル名とカラム名の両方が報告されるようになりました。

トラッカー・リファレンス CORE-1234

メッセージの改善

V. Khorsun

トラッカー・リファレンス CORE-2587

エンジンがWindowsの他のセッションで別のエンジンのプロセスによってすでにマッピングされた共有メモリを作成できない場合の診断メッセージが、少しだけユーザーフレンドリーになりました。従来は次のようなメッセージでした:


The requested operation cannot be performed on a file with a user-mapped section open.(要求された操作はユーザーマップセクションで開いたファイルでは実行できません。)
          

これが、次のようなメッセージとなります:


Database is probably already opened by another engine instance in another Windows session.(データベースはおそらく他のWindowsセッションの他のエンジンのインスタンスによりすでに開かれています。)
    

メタデータの改善

キャラクタ・セットをデフォルトのコレーションに保存

Adriano dos Santos Fernandes

システムテーブルRDB$CHARACTER_SETS内のRDB$DEFAULT_COLLATE_NAMEの現在の値がバックアップ/リストアのサイクルの中で維持されるように改善されました。このカスタマイズのためのメカニズムが新しいALTER CHARACTER SETコマンドです。

トラッカー・リファレンス CORE-789

Prev: スレッドセーフ・クライアント・ライブラリFirebird Documentation IndexUp: Firebirdエンジンの変更Next: Firebird APIとODSの変更
Firebird Documentation IndexFirebird 2.5 リリースノートFirebirdエンジンの変更 → 改善点