MariaDBのSpiderエンジンのメモリ使用量を完全に理解!Information Schema SPIDER_ALLOC_MEM Table、PERFORMANCE_SCHEMA、カスタムツールを駆使した詳細な調査と分析


"Information Schema SPIDER_ALLOC_MEM Table" は、MariaDB の Spider ストレージエンジンにおけるメモリ使用量に関する情報を提供するテーブルです。このテーブルは、Spider エンジンのパフォーマンスを監視および分析するのに役立ちます。

テーブル構成

列名データ型説明
TABLE_NAMEvarchar(64)メモリ使用量を報告するテーブルの名前
TABLE_SCHEMAvarchar(64)テーブルのスキーマ名
PARTITION_NAMEvarchar(64)パーティションの名前 (存在する場合)
ALLOCATED_BYTESbigintテーブルによって割り当てられたバイト数
FREE_BYTESbigintテーブルによって解放されたバイト数
TOTAL_BYTESbigintテーブルによって割り当てられた合計バイト数

主な用途

  • ストレージ容量の計画を立てる
  • テーブルのパフォーマンスを分析する
  • メモリリークを検出する
  • Spider エンジンのメモリ使用量を監視する

プログラミング例

以下の例は、"Information Schema SPIDER_ALLOC_MEM Table" を使用して、すべてのテーブルのメモリ使用量を表示する方法を示しています。

SELECT
  TABLE_NAME,
  TABLE_SCHEMA,
  PARTITION_NAME,
  ALLOCATED_BYTES,
  FREE_BYTES,
  TOTAL_BYTES
FROM INFORMATION_SCHEMA.SPIDER_ALLOC_MEM;
  • このテーブルは、Spider エンジンでのみ使用できます。
  • "Information Schema SPIDER_ALLOC_MEM Table" は、MariaDB 10.5.4 以降でのみ使用できます。


すべてのテーブルのメモリ使用量を表示する

SELECT
  TABLE_NAME,
  TABLE_SCHEMA,
  PARTITION_NAME,
  ALLOCATED_BYTES,
  FREE_BYTES,
  TOTAL_BYTES
FROM INFORMATION_SCHEMA.SPIDER_ALLOC_MEM;

特定のスキーマ内のすべてのテーブルのメモリ使用量を表示する

SELECT
  TABLE_NAME,
  TABLE_SCHEMA,
  PARTITION_NAME,
  ALLOCATED_BYTES,
  FREE_BYTES,
  TOTAL_BYTES
FROM INFORMATION_SCHEMA.SPIDER_ALLOC_MEM
WHERE TABLE_SCHEMA = 'my_schema';

特定のテーブルのメモリ使用量を表示する

SELECT
  TABLE_NAME,
  TABLE_SCHEMA,
  PARTITION_NAME,
  ALLOCATED_BYTES,
  FREE_BYTES,
  TOTAL_BYTES
FROM INFORMATION_SCHEMA.SPIDER_ALLOC_MEM
WHERE TABLE_NAME = 'my_table'
  AND TABLE_SCHEMA = 'my_schema';

メモリ使用量が多いテーブルを上位 10 件表示する

SELECT
  TABLE_NAME,
  TABLE_SCHEMA,
  PARTITION_NAME,
  ALLOCATED_BYTES,
  FREE_BYTES,
  TOTAL_BYTES
FROM INFORMATION_SCHEMA.SPIDER_ALLOC_MEM
ORDER BY TOTAL_BYTES DESC
LIMIT 10;

特定の期間におけるメモリ使用量の推移を監視する

SET @start_time = '2024-07-01 00:00:00';
SET @end_time = '2024-07-03 00:00:00';

SELECT
  @timestamp := UNIX_TIMESTAMP(EVENT_TIME),
  ALLOCATED_BYTES
FROM PERFORMANCE_SCHEMA.events_statements_summary_by_digest
WHERE EVENT_NAME = 'spider_memory_usage'
  AND EVENT_TIME BETWEEN @start_time AND @end_time
ORDER BY @timestamp;
  • 独自のニーズに合わせてクエリをカスタマイズできます。
  • 上記の例は、"Information Schema SPIDER_ALLOC_MEM Table" を使用して、さまざまな種類のメモリ使用量情報を取得する方法を示しています。


  • 更新頻度
    このテーブルは定期的に更新されますが、更新頻度がわからない場合があります。
  • Spider エンジン専用
    このテーブルは Spider エンジンでのみ使用できます。他のエンジン (InnoDB、MyRocks など) では使用できません。

これらの制限を克服するために、"Information Schema SPIDER_ALLOC_MEM Table" の代替方法をいくつか検討することができます。

PERFORMANCE_SCHEMA テーブルを使用する

PERFORMANCE_SCHEMA は、パフォーマンスと診断に関する情報を提供するスキーマです。このスキーマには、Spider エンジンのメモリ使用量に関する情報を提供するいくつかのテーブルが含まれています。

  • memory_global_by_event_name テーブル
    このテーブルには、各イベントタイプのメモリ使用量に関する情報が含まれています。Spider エンジンのメモリ使用量を監視するために使用できます。
  • events_statements_summary_by_digest テーブル
    このテーブルには、各 SQL ステートメントのメモリ使用量に関する情報が含まれています。Spider エンジンのメモリ使用量を監視するために使用できます。

Spider エンジン用のカスタムツールを使用する

Spider エンジンには、メモリ使用量を含むパフォーマンス情報を提供するカスタムツールが用意されている場合があります。これらのツールは、"Information Schema SPIDER_ALLOC_MEM Table" よりも詳細な情報を提供する場合があります。

Spider エンジンのソースコードを分析する

  • 時間とリソース
    どの方法を選択するかは、時間とリソースによっても異なります。"Information Schema SPIDER_ALLOC_MEM Table" を使用するのは最も簡単な方法ですが、他の方法にはより多くの時間とリソースが必要になる場合があります。
  • 技術的な専門知識
    どの方法を選択するかは、技術的な専門知識によって異なります。PERFORMANCE_SCHEMA テーブルを使用するには、SQL に関する基本的な知識が必要です。カスタムツールを使用するには、そのツールの使用方法を学ぶ必要があります。Spider エンジンのソースコードを分析するには、C++ に関する深い知識が必要です。
  • 必要な情報
    どのような情報を必要としているか。合計メモリ使用量のみが必要であれば、"Information Schema SPIDER_ALLOC_MEM Table" で十分かもしれません。より詳細な情報が必要な場合は、他の方法を検討する必要があります。