MySQL 8.0 リファレンスマニュアル


15.20.2 InnoDB memcached のアーキテクチャー

InnoDB memcached プラグインは、MySQL SQL レイヤーをバイパスして InnoDB ストレージエンジンに直接アクセスする MySQL プラグインデーモンとして memcached を実装します。

次の図は、アプリケーションが SQL と比較して daemon_memcached プラグインを介してデータにアクセスする方法を示しています。

図 15.4 統合 memcached Server を使用した MySQL Server

SQL と memcached プロトコルの両方を使用して InnoDB ストレージエンジンのデータにアクセスするアプリケーションを示します。 SQL を使用して、アプリケーションは MySQL Server およびハンドラ API を介してデータにアクセスします。 memcached プロトコルを使用すると、アプリケーションは MySQL Server をバイパスし、memcached プラグインおよび InnoDB API を介してデータにアクセスします。 memcached プラグインは、innodb_memcache インタフェースとオプションのローカルキャッシュで構成されます。

daemon_memcached プラグインの機能:

  • mysqld のデーモンプラグインとしての memcachedmysqldmemcached の両方が同じプロセス領域で実行され、データへの待機時間が非常に短くなります。

  • SQL パーサー、オプティマイザ、さらにハンドラ API レイヤーもバイパスして、InnoDB テーブルに直接アクセスします。

  • テキストベースのプロトコルおよびバイナリプロトコルを含む標準の memcached プロトコル。 daemon_memcached プラグインは、memcapable コマンドの 55 の互換性テストすべてに合格します。

  • Multi-column support. ユーザー指定のセパレータ文字で区切られたカラム値を使用して、複数のカラムをキー値ストアの value 部分にマップできます。

  • デフォルトでは、memcached プロトコルを使用してデータの読取りおよび InnoDB への書込みが直接行われるため、MySQL は InnoDB buffer pool を使用してインメモリーキャッシュを管理できます。 デフォルト設定は、データベースアプリケーションの高い信頼性と最も低い驚きの組合せを表します。 たとえば、デフォルト設定では、データベース側のコミットされていないデータや、memcached get リクエストに対して返される失効データは回避されます。

  • 上級ユーザーは、システムを従来の memcached サーバーとして構成し、すべてのデータを memcached エンジン (メモリーキャッシング) にのみキャッシュすることも、memcached エンジン」 (メモリーキャッシング) と InnoDB memcached エンジン (InnoDB をバックエンド永続ストレージとして) の組合せを使用することもできます。

  • innodb_api_bk_commit_intervaldaemon_memcached_r_batch_size および daemon_memcached_w_batch_size 構成オプションを使用して、InnoDB 操作と memcached 操作の間でデータがやり取りされる頻度を制御します。 信頼性を最大化するために、バッチサイズオプションのデフォルト値は 1 です。

  • daemon_memcached_option 構成パラメータを使用して memcached オプションを指定する機能。 たとえば、memcached がリスニングするポートの変更、同時接続の最大数の削減、キーと値のペアの最大メモリーサイズの変更、またはエラーログのデバッグメッセージの有効化を行うことができます。

  • innodb_api_trx_level 構成オプションは、memcached で処理されるクエリーのトランザクション isolation level を制御します。 memcached には transactions の概念はありませんが、このオプションを使用して、daemon_memcached プラグインで使用されるテーブルに対して発行された SQL ステートメントによって発生した変更を memcached がすぐに確認する方法を制御できます。 デフォルトでは、innodb_api_trx_levelREAD UNCOMMITTED に設定されます。

  • innodb_api_enable_mdl オプションを使用すると、MySQL レベルでテーブルをロックできるため、マップされたテーブルは DDL で SQL インタフェースを介して削除または変更できません。 ロックがない場合、テーブルは MySQL レイヤーから削除できますが、memcached または他のユーザーが使用を停止するまで InnoDB 記憶域に保持されます。 MDLメタデータロックを表します。

InnoDB memcached と従来の memcached の違い

Using MySQL with memcached で説明されているように、MySQL での memcached の使用にすでに慣れている場合があります。 このセクションでは、統合された InnoDB memcached プラグインの機能が従来の memcached とどのように異なるかについて説明します。

  • インストール: memcached ライブラリには MySQL サーバーが付属しているため、インストールと設定が比較的簡単です。 インストールには、memcached で使用する demo_test テーブルを作成するための innodb_memcached_config.sql スクリプトの実行、daemon_memcached プラグインを有効にするための INSTALL PLUGIN ステートメントの発行、MySQL 構成ファイルまたは起動スクリプトへの必要な memcached オプションの追加が含まれます。 memcpmemcatmemcapable などの追加ユーティリティ用の従来の memcached ディストリビューションをインストールすることもできます。

    従来の memcached との比較は、Installing memcached を参照してください。

  • デプロイメント: 従来の memcached では、通常、大量の低容量 memcached サーバーを実行します。 ただし、daemon_memcached プラグインの一般的なデプロイメントでは、MySQL がすでに実行されている中程度または高電力のサーバーの数が少なくなります。 この構成の利点は、未使用のメモリーを利用したり、多数のサーバーにルックアップを分散したりするのではなく、個々のデータベースサーバーの効率を向上させることです。 デフォルト構成では、memcached に使用されるメモリーはほとんどなく、メモリー内ルックアップは InnoDB buffer pool から提供されます。これにより、最近頻繁に使用されたデータが自動的にキャッシュされます。 従来の MySQL サーバーインスタンスと同様に、innodb_buffer_pool_size 構成オプションの値は、メモリー内で可能なかぎり多くの作業が実行されるように、(OS レベルでページングを発生させずに) 実用的な値にしてください。

    従来の memcached との比較は、memcached Deployment を参照してください。

  • 有効期限: デフォルトでは (innodb_only キャッシュポリシーを使用)、InnoDB テーブルの最新データが常に返されるため、有効期限オプションは実用的な効果がありません。 キャッシュポリシーを caching または cache_only に変更すると、有効期限オプションは通常どおりに機能しますが、メモリーキャッシュから期限切れになる前に基礎となるテーブルで更新された場合、リクエストされたデータは失効する可能性があります。

    従来の memcached との比較は、Data Expiry を参照してください。

  • ネームスペース: memcached は、ファイルが競合しないようにするために、接頭辞と接尾辞を含む複雑な名前をファイルに付ける大規模なディレクトリに似ています。 daemon_memcached プラグインでは、キーに対して同様の命名規則を使用できますが、追加の命名規則もあります。 @@table_id.key 形式のキー名。table_id は、innodb_memcache.containers テーブルのマッピングデータを使用して、特定のテーブルを参照するようにデコードされます。 key は指定されたテーブル内で参照されるか、このテーブルに書き込まれます。

    @@表記法は、getadd および set 関数への個々のコールに対してのみ機能し、incrdelete などの他のコールに対しては機能しません。 セッション内の後続の memcached 操作のデフォルトテーブルを指定するには、table_id でキー部分を指定せずに@@テーブル記を使用して get リクエストを実行します。 例:

    get @@table_id

    後続の get, set, incr, delete およびその他の操作では、table_id によって innodb_memcache.containers.name カラムに指定されたテーブルが使用されます。

    従来の memcached との比較は、Using Namespaces を参照してください。

  • ハッシングと分散: innodb_only キャッシュポリシーを使用するデフォルト構成は、レプリカサーバーのセットなど、すべてのサーバーですべてのデータを使用できる従来のデプロイメント構成に適しています。

    シャード構成と同様にデータを物理的に分割する場合は、daemon_memcached プラグインを実行している複数のマシンにデータを分割し、従来の memcached ハッシュメカニズムを使用してリクエストを特定のマシンにルーティングできます。 通常、MySQL 側では、適切な値が適切なサーバーのデータベースに格納されるように、add リクエストによってすべてのデータを memcached に挿入できます。

    従来の memcached との比較は、memcached Hashing/Distribution Types を参照してください。

  • メモリー使用量: デフォルトでは (innodb_only キャッシュポリシーを使用)、memcached プロトコルは InnoDB テーブルとの間で情報をやり取りし、InnoDB バッファプールは memcached メモリー使用量の増加および縮小のかわりにメモリー内ルックアップを処理します。 相対的には、memcached 側ではメモリーをほとんど使用しません。

    キャッシングポリシーを caching または cache_only に切り替えると、memcached メモリー使用量の通常のルールが適用されます。 memcached データ値のメモリーは、「スラブ」の観点から割り当てられます。 memcached に使用されるスラブサイズおよび最大メモリーを制御できます。

    どちらの方法でも、telnet セッションなどを介して標準プロトコルを介してアクセスされる使い慣れた statistics システムを使用して、daemon_memcached プラグインをモニターおよびトラブルシューティングできます。 daemon_memcached プラグインには、追加のユーティリティは含まれていません。 memcached-tool script を使用して、完全な memcached ディストリビューションをインストールできます。

    従来の memcached との比較は、Memory Allocation within memcached を参照してください。

  • スレッド使用率: MySQL スレッドと memcached スレッドは同じサーバー上に共存します。 オペレーティングシステムによってスレッドに課される制限は、スレッドの合計数に適用されます。

    従来の memcached との比較は、memcached Thread Support を参照してください。

  • ログの使用状況: memcached デーモンは MySQL サーバーとともに実行され、stderr-v-vv-vvv の各オプションを使用して、書込み出力を MySQL error log に書き込みます。

    従来の memcached との比較は、memcached Logs を参照してください。

  • memcached 操作: get, set, adddelete などの使い慣れた memcached 操作を使用できます。 シリアライズ (複雑なデータ構造を表す正確な文字列形式) は、言語インタフェースによって異なります。

    従来の memcached との比較は、Basic memcached Operations を参照してください。

  • MySQL フロントエンドとしての memcached の使用: これは、InnoDB memcached プラグインの主な目的です。 統合 memcached デーモンを使用すると、アプリケーションのパフォーマンスが向上し、InnoDB でメモリーとディスク間のデータ転送を処理できるため、アプリケーションロジックが簡略化されます。

    従来の memcached との比較は、Using memcached as a MySQL Caching Layer を参照してください。

  • ユーティリティ: MySQL サーバーには libmemcached ライブラリが含まれていますが、追加のコマンドラインユーティリティは含まれていません。 memcpmemcatmemcapable コマンドなどのコマンドを使用するには、完全な memcached ディストリビューションをインストールします。 memrm および memflush がキャッシュからアイテムを削除すると、基礎となる InnoDB テーブルからもアイテムが削除されます。

    従来の memcached との比較は、libmemcached Command-Line Utilities を参照してください。

  • プログラミングインタフェース: サポートされているすべての言語を使用して、daemon_memcached プラグインを介して MySQL サーバーにアクセスできます: C and C++, Java, Perl, Python, PHP および Ruby。 従来の memcached サーバーと同様に、サーバーのホスト名とポートを指定します。 デフォルトでは、daemon_memcached プラグインはポート 11211 でリスニングします。 テキストプロトコルとバイナリプロトコルの両方を使用できます。 memcached 関数の behavior は、実行時にカスタマイズできます。 シリアライズ (複雑なデータ構造を表す正確な文字列形式) は、言語インタフェースによって異なります。

    従来の memcached との比較は、Developing a memcached Application を参照してください。

  • よくある質問: MySQL には、従来の memcached に関する広範な FAQ があります。 FAQ は、memcached データの記憶域メディアとして InnoDB テーブルを使用することを除いて、読取り専用キャッシュとしてではなく、以前よりも多くの書込み集中型アプリケーションに memcached を使用できることを意味します。

    memcached FAQを参照してください。


関連キーワード:  InnoDB, テーブル, 構成, サーバー, データ, メモリー, 参照, ロック, 実行, 比較