MAGAZINE
ルーターマガジン
インフラ/運用
MySQL/MariaDBで未使用のテーブルを効率的に見つける方法
2025.04.17

今回はMySQL(MariaDB)環境で不要なテーブルを見つける方法をご紹介します。
Performance Schemaをオンにする
まずMySQLのPerformance Schemaを有効にします。若干パフォーマンスが下がるらしいのですが、16CPU、128GBのサーバー環境では、そこまでパフォーマンスはさがりませんでした。
- デフォルト状態の確認: 以下のコマンドで現在のPerformance Schemaの状態を確認します。
SHOW VARIABLES LIKE 'performance_schema';
結果がON
の場合は有効、OFF
の場合は無効です。
OFFの場合は下の手順でONにしましょう
my.cnf
ファイルの設定: サーバーの設定ファイル(通常はmy.cnf
またはmy.ini
)に以下の行を追加します。
[mysqld]
performance_schema=ON
この設定を保存し、MySQLサーバーを再起動します。
- コンソールからの設定(クラウド環境の場合):
クラウドサービス(例: ApsaraDB RDSやPolarDB)の場合、管理コンソールからパラメータ設定ページで
performance_schema
を検索し、値をON
に変更します。
Performance Schemaを使って使用していないテーブルを特定する方法
Performance Schemaを利用して使用されていないテーブルを特定するには、以下の手順を実行します。
手順
Performance SchemaではテーブルごとのI/O統計情報が収集されています。以下のクエリで各テーブルの使用状況を確認できます。
SELECT
OBJECT_SCHEMA, OBJECT_NAME, COUNT_STAR, COUNT_READ, COUNT_WRITE
FROM performance_schema.table_io_waits_summary_by_table
order by COUNT_STAR;
+--------------------+-------------------------------------------+------------+------------+-------------+
| OBJECT_SCHEMA | OBJECT_NAME | COUNT_STAR | COUNT_READ | COUNT_WRITE |
+--------------------+-------------------------------------------+------------+------------+-------------+
| mysql | plugin | 0 | 0 | 0 |
| mysql | func | 0 | 0 | 0 |
| mysql | event | 0 | 0 | 0 |
| mysql | proc | 0 | 0 | 0 |
| mysql | table_stats | 0 | 0 | 0 |
| mysql | column_stats | 0 | 0 | 0 |
| mysql | index_stats | 0 | 0 | 0 |
| mysql | procs_priv | 0 | 0 | 0 |
| mysql | columns_priv | 0 | 0 | 0 |
| mysql | gtid_slave_pos | 0 | 0 | 0 |
| mysql | servers | 0 | 0 | 0 |
| mysql | db | 0 | 0 | 0 |
| mysql | proxies_priv | 0 | 0 | 0 |
| mysql | roles_mapping | 0 | 0 | 0 |
| mysql | global_priv | 0 | 0 | 0 |
| mysql | time_zone_leap_second | 0 | 0 | 0 |
| mysql | tables_priv | 0 | 0 | 0 |
| mysql | innodb_index_stats | 0 | 0 | 0 |
| mysql | time_zone_transition | 0 | 0 | 0 |
| mysql | time_zone_transition_type | 0 | 0 | 0 |
| mysql | time_zone | 0 | 0 | 0 |
| mysql | time_zone_name | 0 | 0 | 0 |
| database | table1 | 3 | 3 | 0 |
| database | table2 | 1737 | 0 | 860 |
+--------------------+-------------------------------------------+------------+------------+-------------+
- COUNT_READ: テーブルが読み取られた回数。
- COUNT_WRITE: テーブルに書き込まれた回数。
- COUNT_STAR:COUNT_READ、COUNT_WRITEの合計。
このクエリは、サーバー起動後のすべてのテーブルの、テーブルへの読み込みレコード数、書き込みレコード数の合計が少ない順にリストアップします。 上にきているテーブルほど、参照、更新回数が少ないテーブル、つまり使われていないテーブルということです。 更新はされているけど参照されていないテーブルもあったりするので、COUNT_READが0のテーブルは本当に必要か確認したほうがよいかもしれません。
CONTACT
お問い合わせ・ご依頼はこちらから