User Statisticsのシーン
3120 ワード
User StatisticはMySQLのスレッド、ユーザー、テーブル、インデックスなどの情報を統計できるプラグインで、PerconaとMariaDBで直接統合されていますが、公式ドキュメントには実用的な例はあまりありません.以下は私が日常的に使っている例です(テストはMariaDB 10.0に走っています):1.アクセスされていないテーブルを特定
drop文を生成するには、次の手順に従います.
2.アクセスされていないインデックス・プライマリ・キーを見つけるには除外する必要があります.一意のインデックスは一意の制約として使用される可能性がありますので除外します.
drop文を生成するには、次の手順に従います.
3.データベース内のどのテーブルが最も頻繁にクエリーされますが、データベースがますます増加する圧力に耐えられない場合は、いくつかのテーブルを垂直に分割することを考慮します.次に、クエリーのアクセスが最も頻繁な10枚のテーブルを見つけます.
4.データベースで最も頻繁に更新されるテーブル
5.ホストとスペアを両立させる上の1、2の例は、単一のマシンの場合に不要なテーブルやインデックスを見つけるだけですが、1つのインデックスはホストがそれを使用していない可能性があります.スペアにはクエリーがあります.この場合、インデックスは実際に役に立つので、ホストとすべてのスペアを両立させるには、Jay Janseenはこの文章で方法を提案しました.私の一般的な方法は以下の通りです.a.1台のテストマシンで次のデータベースを作成します.
これで例1,2のSQLを使用できます(use INFORMATION_SCHEMAをuse user_statisticsに変更します;)
use INFORMATION_SCHEMA;
select table_schema,table_name from STATISTICS where (table_schema,table_name) not in (select table_schema,table_name from TABLE_STATISTICS ) and table_schema not in ('information_schema','performance_schema','mysql');
drop文を生成するには、次の手順に従います.
use INFORMATION_SCHEMA;
select concat('drop table ',table_schema,'.',table_name,';') from STATISTICS where (table_schema,table_name) not in (select table_schema,table_name from TABLE_STATISTICS ) and table_schema not in ('information_schema','performance_schema','mysql');
2.アクセスされていないインデックス・プライマリ・キーを見つけるには除外する必要があります.一意のインデックスは一意の制約として使用される可能性がありますので除外します.
use INFORMATION_SCHEMA;
select table_schema,table_name,index_name from STATISTICS where (table_schema,table_name,index_name) not in (select table_schema,table_name,index_name from INDEX_STATISTICS ) and table_schema not in ('information_schema','performance_schema','mysql') and index_name != 'PRIMARY' and NON_UNIQUE = 1;
drop文を生成するには、次の手順に従います.
use INFORMATION_SCHEMA;
select concat('alter table ', table_schema,'.',table_name,' drop index ',index_name,';') from STATISTICS where (table_schema,table_name,index_name) not in (select table_schema,table_name,index_name from INDEX_STATISTICS ) and table_schema not in ('information_schema','performance_schema','mysql') and index_name != 'PRIMARY' and NON_UNIQUE = 1;
3.データベース内のどのテーブルが最も頻繁にクエリーされますが、データベースがますます増加する圧力に耐えられない場合は、いくつかのテーブルを垂直に分割することを考慮します.次に、クエリーのアクセスが最も頻繁な10枚のテーブルを見つけます.
use INFORMATION_SCHEMA;
select * from TABLE_STATISTICS order by rows_read desc limit 10;
4.データベースで最も頻繁に更新されるテーブル
use INFORMATION_SCHEMA;
select * from TABLE_STATISTICS order by rows_changed_x_indexes desc limit 10;
5.ホストとスペアを両立させる上の1、2の例は、単一のマシンの場合に不要なテーブルやインデックスを見つけるだけですが、1つのインデックスはホストがそれを使用していない可能性があります.スペアにはクエリーがあります.この場合、インデックスは実際に役に立つので、ホストとすべてのスペアを両立させるには、Jay Janseenはこの文章で方法を提案しました.私の一般的な方法は以下の通りです.a.1台のテストマシンで次のデータベースを作成します.
create database if not exists user_statistics;
b.リモートホストのstatistics、tablestatistics、indexstatisticsを試験機にコピーする:mysqldump ... -h M_IP information_schema statistics table_statistics index_statistics > M.sql
c.リモート・スペアのtablestatistics、indexstatisticsデータをinsert ignore形式にエクスポートする:mysqldump ... -h S_IP --add-drop-table=false --no-create-info --add-lock=false -t --insert-ignore --complete-insert information_schema table_statistics index_statistics > S.sql
mysql> use user_statistics;
mysql> source M.sql;
mysql> source S.sql;
これで例1,2のSQLを使用できます(use INFORMATION_SCHEMAをuse user_statisticsに変更します;)