Oracle TimesTenとは?インメモリデータベースの概要・仕組み・活用法を徹底解説
Oracle TimesTenは、Oracleデータベースのパフォーマンスを劇的に向上させる可能性を秘めたインメモリデータベース製品です。
メモリ最適化されているだけでなく、高いスループット、耐久性、スケーラビリティを実現しながら、最小限のレスポンスタイムを提供します。特に、パフォーマンスへの依存度が極めて高いミッションクリティカルなアプリケーションに適しています。従来型のデータベースとは異なり、TimesTenはデータ全体をRAM上に配置することで高い効率性を実現します。
TimesTenの歴史
- 1994年にHP Labsで開発
- HPのOpenCallソリューションに組み込まれる
- 1996年にVC出資のスタートアップ企業として独立
- 本番環境で数千社の顧客が利用
- 2005年にOracle Corporationが買収
- 2005年以降、6.0、7.0、11gR2、18c Release 1の主要バージョンをリリース
Oracle TimesTenの概要
Oracle TimesTen In-Memory Databaseは、永続性と高可用性を備えたインメモリ型のリレーショナルデータベース管理システム(RDBMS)です。カリフォルニア州パロアルトにあるHewlett-Packard研究所で設計・実装され、1996年に独立系スタートアップ企業となり、2005年にOracle Corporationによって買収されました。
TimesTenデータベースは高い永続性と可用性を持ち、インメモリデータベースとして非常に低いレイテンシと高いスループットを提供します。さらに、JDBCやODBCといった標準的なリレーショナルデータベースAPIにも対応しています。
TimesTenは、スタンドアロンのインメモリデータベースとしてだけでなく、Oracle Database自身を含む他のリレーショナルデータベースのキャッシュとしても利用できます。金融トレーディングや通信課金システムなど、膨大なトランザクションが発生するOLTPアプリケーションで広く採用されています。
TimesTenがディスクにデータを保存する仕組み
各TimesTenデータストアには、必ず2つのチェックポイントファイルが存在します。チェックポイントはデフォルトで10分ごとに実行され、ダーティなメモリページを一方のチェックポイントファイルへ書き込み、次回のチェックポイントではもう一方のファイルを使用します。書き込みトランザクションはまずメモリ内バッファに格納され、その後ログファイルへフラッシュされます。
トランザクションロギングの2つの方式
1. バッファードロギング(Buffered Logging)
速度:高速 / 耐久性:良好
トランザクションはまずメモリ内のログバッファに保存されます。バッファが満杯になると、バックグラウンドでディスクへフラッシュされます。処理は非常に高速(5,000 TPS以上)ですが、バッファのフラッシュ前にクラッシュが発生すると、トランザクションが失われる可能性がわずかにあります。ログバッファのサイズは利用者が設定できます。
2. デュラブルコミット(Durable Commit)
速度:低速 / 耐久性:優秀
すべてのトランザクションが即座にディスクへフラッシュされます。速度はディスク装置の性能に依存しますが、全トランザクションがディスクに保存されるため、耐久性は非常に高いのが特徴です。
SQL関数ttDurableCommit()を呼び出すことで、いつでもバッファードロギングからデュラブルコミットへ切り替えられます。このように、実行時に耐久性とパフォーマンスを柔軟に制御できる点は、従来のRDBMSにはない大きなメリットです。
大幅なレスポンスタイム改善:In-Memory Database Cache+Oracle Database
Oracle Databaseのレスポンスタイムの相当部分は、クライアント・サーバー間の接続やネットワーク往復に起因します。しかし、アプリケーションがメモリ上のTimesTenデータベースへ直接接続する場合、これらのオーバーヘッドは発生しません。あるベンチマークでは、7種類のトランザクションタイプそれぞれについて平均レスポンスタイムが測定されており、データをTimesTen IMDBにキャッシュした場合(赤いバー)は、アプリケーションのデータベース操作が大幅に高速化されることが示されています。なお、アプリケーションはTCP/IPクライアント/サーバー経由でもTimesTenに接続可能です。
TimesTenデータベースの作成方法
DSNの定義
- DataStore属性:データベースのチェックポイントファイルのディレクトリ名を指定します。
例:DataStore=/data/TTDEMO/TTDEMO-DSN1/TTDEMO-DSN1 - LogDir属性:トランザクションログファイルの保存先ディレクトリ名を指定します。トランザクションログには、各データベース更新、コミット、ロールバックのログレコードが記録されます。
- DatabaseCharacterSet属性:データを格納する際の文字セットを指定します。
データベースのメモリ領域
メモリは論理的に2つの領域に分割されます。
- 永続領域(Permanent Region)
- PermSize DSN属性で割り当てサイズを設定
- テーブルやインデックスなど、永続的なデータベース要素を格納
- チェックポイント操作時にディスクへ書き込まれる
- 一時領域(Temporary Region)
- TempSize DSN属性で割り当てサイズを設定
- ステートメント実行時に生成される一時データを格納(一時テーブル、中間結果セットなど)
データベースの自動作成と接続
インスタンス管理者がデータベースへ接続すると、データベースは自動的に作成されます。
$ttisql <DSN名>
ttisqlユーティリティはサーバーDSNへ直接接続し、ttIsqlCSユーティリティはTimesTenクライアントDSNへ接続します。
$ttisql connStr "DSN=TTDEMO-DSN1;UID=timesten;pwd=timesten"
RAMポリシー
RAMポリシーは、データベースをいつメモリへロードし、いつアンロードするかを決定します。
- inUse:使用中のときだけメモリに保持する(デフォルトポリシー)
- always:常にメモリに常駐させる
- manual:手動でロード/アンロードする
インメモリデータベースキャッシュ(IMDB Cache)
アプリケーション層でのOracleデータベース表のキャッシュ
- 個別のテーブルや関連テーブルをキャッシュできる
- 全行・全列、またはそのサブセットをキャッシュできる
読み取り専用および更新可能なキャッシュデータベース
- 通常のSQLデータベーステーブルのようにアクセスできる
- 結合・検索、挿入・更新・削除が可能
自動データ同期
- TimesTenからOracleへ同期
- OracleからTimesTenへ同期
Oracle IMDBキャッシュの詳細
キャッシュグループとは?
Oracle Database内のテーブルに対応付けて、TimesTenデータベース内に作成されたキャッシュテーブルの集合です。
読み取り専用キャッシュグループ
読み取り操作はTimesTen上で実行されます。書き込み操作はOracleへパススルーされ、その結果が自動的にTimesTenへ反映(リフレッシュ)されます。
OracleのCache Connect機能を利用すると、Oracleデータベースの一部をTimesTenにキャッシュし、頻繁にアクセスされるデータへのレスポンスタイムとスループットを向上させることができます。
- テーブル全体、行のサブセット、列のサブセットのいずれもキャッシュ可能
- キャッシュは読み取り専用にも更新可能にも設定できる
- TimesTen内でデータが更新されると、同期ライトスルーまたは非同期ライトスルーを介してOracleデータベースへ伝播される
- 同一のOracle DBから複数のキャッシュインスタンスを作成でき、それぞれ異なるキャッシュ内容を持たせることが可能
IMDBキャッシュの管理とベストプラクティス
- OracleとTimesTenの両データベースで、1回限りのキャッシュ初期設定を実施する(実装ドキュメントに従う)
- キャッシュエージェントの再起動ポリシーを設定する:manual / always / norestart
- AUTOREFRESHの間隔を指定する
- キャッシュグループ対象のOracleテーブルに、INSERT・UPDATE・DELETEのトリガーが作成される
- トリガーは、TimesTenがOracle内に保持するロギングテーブルへ小さな行を挿入する
- TimesTenエージェントがこのテーブルを照会し、指定された間隔でデータをリフレッシュする
- Oracle側でデータ定義を変更した場合は、LOAD・UNLOAD・FLUSH・REFRESH CACHE GROUPSの実行が必要
まとめ
TimesTenは、標準APIを通じて標準的なリレーショナルデータベース機能を提供しながら、SQL操作に対して非常に低いレイテンシと極めて高いスループットを実現するインメモリリレーショナルデータベースです。スタンドアロンのデータベースとして導入できるだけでなく、Oracle Database向けの高性能リレーショナルキャッシュとしても活用でき、ミッションクリティカルなOLTPシステムの性能向上に大きく貢献します。
ご意見やご質問がある場合は、フィードバックフォームからお気軽にお寄せください。
-
Oracle CloudでDBaaSデータベースを作成する方法:コンパートメント作成からDBシステム構築まで完全解説
この記事では、Oracle® Cloud上にDatabase-as-a-Service(DBaaS)データベースを作成するために必要なすべての手順を、画像付きでわかりやすく解説します。 はじめに このサービスを利用すれば、物理ハードウェアの調達やOSのインストール、Oracle Databaseのインストール前提条件への対応などを一切行うことなく、データベースを構築できます。作成にかかる時間も短く、必要な権限も最小限のシステム管理者レベルで十分です。 本記事では、Oracle CloudでDBaaSをセットアップするための以下のステップについて学びます。 コンパートメントの作成 仮想クラウド
-
データベース管理者必見!Oracle Database 19cの新機能徹底解説
Oracle® Database 19cは、数多くの新機能と改善された機能を搭載して登場しました。本記事では、データベース管理者(DBA)の業務を効率化する主要な新機能について詳しく解説します。 はじめに Oracle 19cは、Oracle Database 12cリリース2製品ファミリーにおいて長期サポートが提供される最終リリースです。Linux®、Windows®、Solaris®、HP/UX®、AIX®などの各プラットフォームに加え、Oracle Cloud上でも利用可能です。Oracle 19cは、あらゆる運用系および分析系ワークロードに対して、最高レベルのパフォーマンス、スケーラビ