キャッシュによる高速化
インメモリDBによる高速化
第1回では、データベースを高速化するための方法として、主にハードウエアを増強する手法について紹介しました。ハードウエアの増強においてはアプリケーションの改修が不要であることが多く、データベースやOSの設定を変更するだけでその恩恵にあずかれるため、ボトルネックが明確であればとても有効な手段となります。
では、ハードウエアの増強では対応しきれないような、高レスポンスタイムや高トランザクションを求められるシステムに対応するためには、どうすればよいのでしょうか?今回は、その解となる、キャッシュ技術を用いたデータベースの高速化について紹介します。
データをキャッシュさせて高速化を図る手法として採用が増えているのが、インメモリDBです。インメモリDBについては、昨年の連載「性能検証!インメモリDB」(http://www.thinkit.co.jp/article/96/3/)の中で、Oracle TimesTen製品について紹介しました。ではなぜインメモリDBは高速化を実現できるのか、簡単におさらいしておきましょう。
- データ、索引、一時データのすべてがメモリ上に存在
- メモリアクセスのみを前提としたアーキテクチャーのため、CPUを効率的に使用
- メモリアクセスに最適な索引を採用
インメモリDBが求められている背景や適用例などについては、過去の連載を参照してください。今回は、2009年8月にリリースされたTimesTen 11gの新機能である「Oracle Databaseとの互換性向上」と「データキャッシュの強化」を取り上げます。この2つの新機能について、アーキテクチャーを簡単におさらいしながら過去のバージョンでの課題を洗い出し、高速化を実現しながらどのような新機能が追加されたのかを説明していきたいと思います。
OracleDBとの互換性を向上
まず1つ目の、Oracle Databaseとの互換性向上からみていきましょう。
TimesTen(を開発した米TimesTen社)は、2005年に米Oracle社に買収されました。このため、買収後にリリースされた製品では、Oracle Databaseとの親和性を高めるため、Oracle SQL関数やデータ型のサポートが進められてきました。そして今回リリースされた11gでは、Oracle Database独自のインターフェースであるPL/SQL(ストアド・プロシージャの開発などに用いられるSQLベースの手続き型言語)、Pro*C(SQL埋め込みC言語)、OCI(Oracle Call Interface)がサポートされています。
図1は、Oracle Databaseアプリケーションの移行方法について、旧リリースであるバージョン7と新版リリースである11gを比較したものです。旧バージョンではPL/SQL内のロジックをアプリケーションの修正によって補う必要がありましたが、11gではPL/SQLを使用したTimesTenへの高速アクセスが可能となりました。
もっとも、一部TimesTenでは対応していないパッケージがあることや、SQLからPL/SQLファンクションの呼び出しができないなど、PL/SQLのTimesTen上での実行にはいくつか留意点もあります。こうした互換性を調べる便利なツールが製品に付属していますので、事前に影響度を確認することは可能です。
その他のOracle製品との互換性強化としては、クラスタソフトであるOracle Clusterwareとの統合が可能になりました。Oracle ClusterwareからTimesTenリソースの監視や管理を行ったり、自動フェールオーバーまで実行することができます。これまでは、フェールオーバーを自動化させるにはサードパーティー製のクラスタソフトが必要であっただけに、Oracle Databaseユーザーにとっては選択肢が広がったといえます。