データベースのパフォーマンスを可視化: Performance Schema global_statusテーブル


MariaDBのパフォーマンススキーマには、global_statusテーブルと呼ばれる重要なテーブルが存在します。このテーブルには、グローバルレベルでのデータベースサーバーの統計情報が格納されており、データベースのパフォーマンスを分析したり、潜在的な問題を特定したりするのに役立ちます。

global_statusテーブルの利点

  • 様々なツールとの連携: MySQL MonitorPercona Toolkitなどのツールと連携して、視覚化や分析を行うことができます。
  • 軽量な操作: テーブルへのアクセスは軽量で、パフォーマンスへの影響を最小限に抑えます。
  • リアルタイムデータ: 統計情報は動的に更新されるため、常に最新のパフォーマンス状況を把握できます。
  • 包括的な情報: 接続数、クエリ量、スレッド情報、IO統計など、データベースのパフォーマンスに影響を与える様々なメトリクスを提供します。

global_statusテーブルの主な列

  • COUNT: メトリクスの更新回数
  • STATUS_TYPE: メトリクスのデータ型
  • variable_value: メトリクスの値
  • variable_name: 各メトリクスの名前

global_statusテーブルの活用例

  • ガバナープールの統計: Pool_sizePool_usageWait_time_sumを使用して、ガバナープールのサイズ、使用状況、待機時間などを監視できます。これらのメトリクスは、ガバナープールの調整が必要かどうかを判断するのに役立ちます。
  • IOパフォーマンスの監視: Bytes_readBytes_writtenを使用して、データベースサーバーが読み書きしたデータ量を監視できます。異常な値は、ストレージのパフォーマンス問題やネットワーク帯域幅の制約を示している可能性があります。
  • 接続数とスレッド数の監視: Threads_connectedThreads_runningを使用して、データベースへの接続数とアクティブなスレッド数を監視できます。異常な値は、パフォーマンスの問題やリソース不足の兆候となる可能性があります。

global_statusテーブルへのアクセス

global_statusテーブルは、次のいずれかの方法でアクセスできます。

  • サードパーティ製ツール: MySQL MonitorPercona Toolkitなどのツールを使用して、global_statusテーブルデータを可視化および分析できます。
  • パフォーマンススキーマAPI: パフォーマンススキーマAPIを使用して、C/C++プログラムからglobal_statusテーブルに直接アクセスできます。
  • MySQLコマンド: SHOW GLOBAL STATUSコマンドを使用して、すべてのステータス変数を表示できます。特定の変数のみを表示するには、WHERE句を使用できます。
  • global_statusテーブルは、多くのメトリクスを提供しますが、すべてのメトリクスがすべての状況に関連するわけではありません。分析対象のパフォーマンス問題に応じて、関連するメトリクスを選択する必要があります。
  • パフォーマンススキーマはデフォルトで有効になっていますが、無効にしていないことを確認してください。
  • global_statusテーブルは、MariaDB 10.5以降で使用できます。


特定のステータス変数の値を取得する

SELECT variable_name, variable_value
FROM performance_schema.global_status
WHERE variable_name IN ('Threads_connected', 'Questions', 'Bytes_read');

すべてのステータス変数をCSVファイルに出力する

import mysql.connector

# データベースへの接続
db = mysql.connector.connect(host="localhost", user="username", password="password", database="dbname")

# カーソルを取得
cursor = db.cursor()

# global_statusテーブルからすべてのステータス変数を取得
cursor.execute("SELECT * FROM performance_schema.global_status")

# 結果をCSVファイルに出力
with open('global_status.csv', 'w') as f:
    # ヘッダー行を出力
    f.write("variable_name,variable_value,STATUS_TYPE,COUNT\n")

    # 各行を出力
    for row in cursor:
        f.write(",".join(str(x) for x in row) + "\n")

# データベース接続を閉じる
db.close()

このPythonスクリプトは、global_statusテーブルからすべてのステータス変数を取得し、global_status.csvという名前のCSVファイルに出力します。

特定の条件に基づいてステータス変数を監視する

import time
import mysql.connector

# データベースへの接続
db = mysql.connector.connect(host="localhost", user="username", password="password", database="dbname")

# カーソルを取得
cursor = db.cursor()

while True:
    # 現在のステータスを取得
    cursor.execute("SELECT Threads_connected, Questions, Bytes_read FROM performance_schema.global_status")
    row = cursor.fetchone()

    # ステータス値をログに出力
    print(f"Threads connected: {row[0]}")
    print(f"Questions executed: {row[1]}")
    print(f"Bytes read: {row[2]}")

    # 1秒間待つ
    time.sleep(1)
  • global_statusテーブルは多くのメトリクスを提供しますが、すべてのメトリクスがすべての状況に関連するわけではありません。分析対象のパフォーマンス問題に応じて、関連するメトリクスを選択する必要があります。
  • パフォーマンススキーマはデフォルトで有効になっていますが、無効にしていないことを確認してください。


MariaDBのglobal_statusテーブルは、データベースのパフォーマンスを監視するための貴重な情報源ですが、いくつかの代替手段も存在します。それぞれの長所と短所を理解し、状況に応じて適切な方法を選択することが重要です。

SHOW GLOBAL STATUSコマンド

SHOW GLOBAL STATUSコマンドは、global_statusテーブルと同じ情報を取得するシンプルな方法です。構文は次のとおりです。

SHOW GLOBAL STATUS;

このコマンドは、すべてのステータス変数を一度に表示します。特定の変数のみを表示するには、WHERE句を使用できます。

SHOW GLOBAL STATUS WHERE variable_name IN ('Threads_connected', 'Questions', 'Bytes_read');

利点

  • 特定の変数のみを簡単に表示できる
  • シンプルで使いやすい

短所

  • プログラムからの自動化には向いていない
  • 1度に取得できるデータ量が少ない

Performance Schema views

Performance Schemaには、global_statusテーブルの情報をより効率的に取得するためのいくつかのビューが用意されています。主なビューは以下の通りです。

  • user_summary_by_thread: スレッドごとのユーザー情報を提供します。
  • replication_status: レプリケーションに関する情報を提供します.
  • performance_timers: 各スレッドのパフォーマンスタイマー情報を提供します。
  • hosts_by_thread: スレッドごとのホスト情報を提供します。
  • events_statements_summary_by_digest: 実行されたSQL文のサマリーを提供します。

これらのビューは、global_statusテーブルよりも列が少なく、必要な情報に直接アクセスできるため、パフォーマンスを向上させることができます。

利点

  • 特定の情報に焦点を絞ることができる
  • global_statusテーブルよりも効率的

短所

  • ビューの使用方法を理解する必要がある
  • global_statusテーブルと同じすべての情報が含まれているわけではない

カスタムメトリクス

必要な情報がglobal_statusテーブルやPerformance Schemaビューに含まれていない場合は、カスタムメトリクスを作成することができます。これは、MySQL Enterprise Monitorなどのツールを使用して行うことができます。

利点

  • 特定のニーズに合わせたメトリクスを作成できる

短所

  • 設定と管理が複雑

サードパーティ製ツール

MySQL MonitorやPercona Toolkitなどのサードパーティ製ツールは、global_statusテーブルやPerformance Schemaデータの可視化と分析を容易にすることができます。これらのツールは、アラート機能やレポート機能など、追加機能も提供することがあります。

利点

  • 追加機能を提供する
  • 使いやすいインターフェース

短所

  • ライセンス費用が発生する場合がある

最適な代替手段の選択

global_statusテーブルの代替手段を選択する際には、以下の要素を考慮する必要があります。

  • コスト: サードパーティ製ツールを使用する場合は、ライセンス費用を考慮する必要があります。
  • 使いやすさ: シンプルで使いやすいツールが必要な場合は、SHOW GLOBAL STATUSコマンドまたはMySQL Monitorのようなツールを検討してください。
  • パフォーマンス: パフォーマンスが重要な場合は、Performance Schemaビューまたはカスタムメトリクスの使用を検討してください。
  • 必要な情報: 必要な情報がどの代替手段で提供されているかを確認してください。