データベースのパフォーマンスを可視化: Performance Schema global_statusテーブル
MariaDBのパフォーマンススキーマには、global_status
テーブルと呼ばれる重要なテーブルが存在します。このテーブルには、グローバルレベルでのデータベースサーバーの統計情報が格納されており、データベースのパフォーマンスを分析したり、潜在的な問題を特定したりするのに役立ちます。
global_status
テーブルの利点
- 様々なツールとの連携:
MySQL Monitor
やPercona Toolkit
などのツールと連携して、視覚化や分析を行うことができます。 - 軽量な操作: テーブルへのアクセスは軽量で、パフォーマンスへの影響を最小限に抑えます。
- リアルタイムデータ: 統計情報は動的に更新されるため、常に最新のパフォーマンス状況を把握できます。
- 包括的な情報: 接続数、クエリ量、スレッド情報、IO統計など、データベースのパフォーマンスに影響を与える様々なメトリクスを提供します。
global_status
テーブルの主な列
- COUNT: メトリクスの更新回数
- STATUS_TYPE: メトリクスのデータ型
- variable_value: メトリクスの値
- variable_name: 各メトリクスの名前
global_status
テーブルの活用例
- ガバナープールの統計:
Pool_size
、Pool_usage
、Wait_time_sum
を使用して、ガバナープールのサイズ、使用状況、待機時間などを監視できます。これらのメトリクスは、ガバナープールの調整が必要かどうかを判断するのに役立ちます。 - IOパフォーマンスの監視:
Bytes_read
とBytes_written
を使用して、データベースサーバーが読み書きしたデータ量を監視できます。異常な値は、ストレージのパフォーマンス問題やネットワーク帯域幅の制約を示している可能性があります。 - 接続数とスレッド数の監視:
Threads_connected
とThreads_running
を使用して、データベースへの接続数とアクティブなスレッド数を監視できます。異常な値は、パフォーマンスの問題やリソース不足の兆候となる可能性があります。
global_status
テーブルへのアクセス
global_status
テーブルは、次のいずれかの方法でアクセスできます。
- サードパーティ製ツール:
MySQL Monitor
やPercona 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ビューまたはカスタムメトリクスの使用を検討してください。
- 必要な情報: 必要な情報がどの代替手段で提供されているかを確認してください。