MySQLのSYSスキーマであなたを知っています

はじめに: 

MySQLの5.7以降のバージョンの中に設置した場合のMySQL 5.7は、新しいSYSスキーマを紹介し、sysはシステムに付属しているMySQLデータベースで、使用mysqldを自動的に作成SYSライブラリを初期化します。

ライブラリsysの内部テーブル、ビュー、関数、ストアドプロシージャは、私たちより便利で効率的なMySQLはSQLが検索インデックススキーマ冗長、インデックスを使用していない文は、一時テーブルを使用するかなどのいくつかの情報を、学習することができますデータsysは、主に内部performance_schemaから得たこれらのビューを、カレー、IOが占有見つけるためにSQL、および他のユーザーの全表スキャンを使用しています。目標は、私たちはすぐにDBの動作を理解しましょう、performance_schemaの複雑さを軽減することです。

1.sysライブラリの概要

この記事は、実験のMySQLの5.7.23バージョンに基づいています。以下に示すようにオープンSYSライブラリは、我々は、SYSスキーマにはテーブル、100のビュー、ストアドプロシージャと関数48の合計が含まれています(私はあなたがああと一緒に従う望みます):

image.png
image.png
image.png

実際には、我々は、頻繁に使用するSYSスキーマ内のビューがあり、以下の各ビューの役割を説明し、我々は1つが手紙、52の合計、クラスと通常のスタートです、ビューは2つのカテゴリに分類され、SYSスキーマを見つけましたX $ 48の合計の始まりです。ビューは、データが読みやすく、かつデータを収集するためのビューのx $ツールの初めにフォーマット頭文字を示し、生の未処理データを示しています。

私たちは、52文字の始めを表示するには、以下のカテゴリーを分析します。

  • host_summary:これは、このようなビューhost_summary_by_file_ioの内部のようなIPパケットに、サーバレベルです。
  • user_summary:これは、ビューuser_summary_by_file_ioの内部など、ユーザレベル、ユーザパケットは、です。
  • InnoDBは:これは、このようなビューinnodb_buffer_stats_by_schemaとして、InnoDBのレベルです。
  • io:这个是I/O层的统计,比如视图io_global_by_file_by_bytes;
  • memory:关于内存的使用情况,比如视图memory_by_host_by_current_bytes;
  • schema:关于schema级别的统计信息,比如schema_table_lock_waits;
  • session:关于会话级别的,这类视图少一些,只有session和session_ssl_status;
  • statement:关于语句级别的,比如statements_with_errors_or_warnings;
  • wait:关于等待的,比如视图waits_by_host_by_latency。

2.常用查询介绍

1,查看每个客户端IP过来的连接消耗了多少资源。
mysql> select * from host_summary;

2,查看某个数据文件上发生了多少IO请求。
mysql> select * from io_global_by_file_by_bytes;

3,查看每个用户消耗了多少资源。
mysql> select * from user_summary;

4,查看总共分配了多少内存。
mysql> select * from memory_global_total;

5,数据库连接来自哪里,以及这些连接对数据库的请求情况是怎样的?
查看当前连接情况。
mysql> select host, current_connections, statements from host_summary;

6,查看当前正在执行的SQL和执行show full processlist的效果相当。
mysql> select conn_id, user, current_statement, last_statement from session;

7,数据库中哪些SQL被频繁执行?
执行下面命令查询TOP 10最热SQL。
mysql> select db,exec_count,query from statement_analysis order by exec_count desc limit 10;

8,哪个文件产生了最多的IO,读多,还是写的多?
mysql> select * from io_global_by_file_by_bytes limit 10;

9,哪个表上的IO请求最多?
mysql> select * from io_global_by_file_by_bytes where file like ‘%ibd’ order by total desc limit 10;

10,哪个表被访问的最多?先访问statement_analysis,根据热门SQL排序找到相应的数据表。
mysql> select * from statement_analysis order by avg_latency desc limit 10;

11,哪些SQL执行了全表扫描或执行了排序操作?
mysql> select from statements_with_sorting;
mysql> select
from statements_with_full_table_scans;

12,哪些SQL语句使用了临时表,又有哪些用到了磁盘临时表?
查看statement_analysis中哪个SQL的tmp_tables 、tmp_disk_tables值大于0即可。
mysql> select db, query, tmp_tables, tmp_disk_tables from statement_analysis where tmp_tables>0 or tmp_disk_tables >0 order by (tmp_tables+tmp_disk_tables) desc limit 20;

13,哪个表占用了最多的buffer pool?
mysql> select * from innodb_buffer_stats_by_table order by allocated desc limit 10;

14,每个库(database)占用多少buffer pool?
mysql> select * from innodb_buffer_stats_by_schema order by allocated desc limit 10;

15,每个连接分配多少内存?
利用session表和memory_by_thread_by_current_bytes分配表进行关联查询。
mysql> select b.user, current_count_used, current_allocated, current_avg_alloc, current_max_alloc, total_allocated,current_statement from memory_by_thread_by_current_bytes a, session b where a.thread_id = b.thd_id;

16,MySQL自增长字段的最大值和当前已经使用到的值?
mysql> select * from schema_auto_increment_columns;

17,MySQL有哪些冗余索引和无用索引?
mysql> select from schema_redundant_indexes;
mysql> select
from schema_unused_indexes;

18,查看事务等待情况
mysql> select * from innodb_lock_waits;

总结: 

本文主要介绍sys库相关内容,其实sys库有很多有用的查询,可以帮助你轻松了解数据库的运行情况,原本需要查找performance_schema中多个表才能获得的数据,现在查询一个视图即可满足。当然,sys库需要你详细去了解,总结出你需要的查询方法。

参考资料: 

いいえ公共.JPGありません

おすすめ

転載: blog.51cto.com/10814168/2441698