暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL默认的数据库

数据库BOSS 2021-04-16
948

  • 1.mysql

  • 2.sys

  • 3.performance_schema

  • 4.information_schema

1.mysql

mysql的核心数据库,类似于sql server中的master表,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。

mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| engine_cost               |
| event                     |
| func                      |
| general_log               |
| gtid_executed             |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| server_cost               |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
31 rows in set (0.01 sec)

2.sys

Sys库所有的数据源来自:performance_schema,目标是把performance_schema的把复杂度降低,让DBA能更好的阅读这个库里的内容,让DBA更快的了解DB的运行情况。

常用的 SQL 语句
生产环境下查询

  1. 谁使用了最多的资源?
mysql> select * from host_summary limit 1;
+---------------+------------+-------------------+-----------------------+-------------+----------+-----------------+---------------------+-------------------+--------------+----------------+------------------------+
| host          | statements | statement_latency | statement_avg_latency | table_scans | file_ios | file_io_latency | current_connections | total_connections | unique_users | current_memory | total_memory_allocated |
+---------------+------------+-------------------+-----------------------+-------------+----------+-----------------+---------------------+-------------------+--------------+----------------+------------------------+
| 111.172.3.185 |         69 | 1.03 s            | 14.91 ms              |          36 |     2799 | 107.13 ms       |                   0 |                 3 |            1 | 0 bytes        | 0 bytes                |
+---------------+------------+-------------------+-----------------------+-------------+----------+-----------------+---------------------+-------------------+--------------+----------------+------------------------+
1 row in set (0.04 sec)

mysql> select * from io_global_by_file_by_bytes limit 1;
+--------------------------+------------+------------+----------+-------------+---------------+------------+------------+-----------+
| file                     | count_read | total_read | avg_read | count_write | total_written | avg_write  | total      | write_pct |
+--------------------------+------------+------------+----------+-------------+---------------+------------+------------+-----------+
| @@datadir/xb_doublewrite |          0 | 0 bytes    | 0 bytes  |     1196468 | 155.88 GiB    | 136.61 KiB | 155.88 GiB |    100.00 |
+--------------------------+------------+------------+----------+-------------+---------------+------------+------------+-----------+
1 row in set (0.00 sec)

mysql> select * from user_summary limit 1;
+------+------------+-------------------+-----------------------+-------------+-----------+-----------------+---------------------+-------------------+--------------+----------------+------------------------+
| user | statements | statement_latency | statement_avg_latency | table_scans | file_ios  | file_io_latency | current_connections | total_connections | unique_hosts | current_memory | total_memory_allocated |
+------+------------+-------------------+-----------------------+-------------+-----------+-----------------+---------------------+-------------------+--------------+----------------+------------------------+
| root |  610372910 | 2.97 w            | 2.94 ms               |   180177228 | 179758297 | 2.58 d          |                  18 |            128967 |           19 | 0 bytes        | 0 bytes                |
+------+------------+-------------------+-----------------------+-------------+-----------+-----------------+---------------------+-------------------+--------------+----------------+------------------------+
1 row in set (0.01 sec)

mysql> select * from memory_global_total;
+-----------------+
| total_allocated |
+-----------------+
| 157.63 MiB      |
+-----------------+
1 row in set (0.00 sec)

  1. 大部分连接来自哪里及发送的 SQL 情况 查看当前连接情况:
select host, current_connections,statements from host_summary;

--查看当前正在执行的 SQL:
select conn_id, user, current_statement, last_statement from session;

  1. 执行最多的 SQL 语句是什么样?
select * from statement_analysis order by exec_count desc limit 10;

  1. 哪张表的 IO 最多?哪张表访问次数最多
select * from io_global_by_file_by_bytes limit 10;
select * from statement_analysis order by exec_count desc limit 10;

  1. 哪些语句延迟比较严重
select * from statement_analysis order by avg_latency desc limit 10;

  1. 哪些 SQL 语句使用了磁盘临时表
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;

  1. 哪张表占用了最多的 buffer pool
select * from innodb_buffer_stats_by_table order by pages desc limit 10;

  1. 每个库占用多少 buffer pool
select * from innodb_buffer_stats_by_schema;

  1. 每个连接分配多少内存
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;

  1. MySQL 内部现在有多少个线程在运行
select user, COUNT(*) from processlist group by user;
select * from processlist;

3.performance_schema

主要用于收集数据库服务器性能参数:

  • 提供进程等待的详细信息,包括锁、互斥变量、文件信息;
  • 保存历史的事件汇总信息,为提供MySQL服务器性能做出详细的判断;
  • 对于新增和删除监控事件点都非常容易,并可以改变mysql服务器的监控周期,例如(CYCLE、MICROSECOND)。
  • 通过该库得到数据库运行的统计信息,更好分析定位问题和完善监控信息。

并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。

MySQL5.5默认是关闭的,需要手动开启,在配置文件里添加.

从MySQL5.6开始,默认打开.

CREATE TABLE `accounts` (
  `USER` char(32CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `HOST` char(60CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `CURRENT_CONNECTIONS` bigint(20NOT NULL,
  `TOTAL_CONNECTIONS` bigint(20NOT NULL
ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8;

mysql> show variables like 'performance_schema';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| performance_schema | ON    |
+--------------------+-------+

常用的SQL

关于SQL维度的统计信息主要集中在events_statements_summary_by_digest表中,通过将SQL语句抽象出digest,可以统计某类SQL语句在各个维度的统计信息
-- 哪个SQL执行最多:

SELECT SCHEMA_NAME,DIGEST_TEXT,COUNT_STAR,SUM_ROWS_SENT,SUM_ROWS_EXAMINED,FIRST_SEEN,LAST_SEEN FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC LIMIT 1\G\


-- 哪个SQL平均响应时间最多:

SELECT SCHEMA_NAME,DIGEST_TEXT,COUNT_STAR,AVG_TIMER_WAIT,SUM_ROWS_SENT,SUM_ROWS_EXAMINED,FIRST_SEEN,LAST_SEEN FROM events_statements_summary_by_digest ORDER BY AVG_TIMER_WAIT DESC LIMIT 1\G\


-- 哪个SQL扫描的行数最多:

SUM_ROWS_EXAMINED

-- 哪个SQL使用的临时表最多:

SUM_CREATED_TMP_DISK_TABLES、SUM_CREATED_TMP_TABLES

-- 哪个SQL返回的结果集最多:

SUM_ROWS_SENT

-- 哪个SQL排序数最多:

SUM_SORT_ROWS

通过上述指标我们可以间接获得某类SQL的逻辑IO(SUM_ROWS_EXAMINED),CPU消耗(SUM_SORT_ROWS),网络带宽(SUM_ROWS_SENT)的对比。

通过file_summary_by_instance表,可以获得系统运行到现在,哪个文件(表)物理IO最多,这可能意味着这个表经常需要访问磁盘IO。

-- 哪个表、文件逻辑IO最多(热数据):

SELECT FILE_NAME,EVENT_NAME,COUNT_READ,SUM_NUMBER_OF_BYTES_READ,COUNT_WRITE,SUM_NUMBER_OF_BYTES_WRITE FROM file_summary_by_instance ORDER BY SUM_NUMBER_OF_BYTES_READ+SUM_NUMBER_OF_BYTES_WRITE DESC LIMIT 2\G

-- 哪个索引使用最多:

SELECT OBJECT_NAME, INDEX_NAME, COUNT_FETCH, COUNT_INSERT, COUNT_UPDATE, COUNT_DELETE FROM table_io_waits_summary_by_index_usage ORDER BY SUM_TIMER_WAIT DESC LIMIT 1;

通过table_io_waits_summary_by_index_usage表,可以获得系统运行到现在,哪个表的具体哪个索引(包括主键索引,二级索引)使用最多。

-- 哪个索引没有使用过:

SELECT OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME FROM table_io_waits_summary_by_index_usage WHERE INDEX_NAME IS NOT NULL AND COUNT_STAR = 0 AND OBJECT_SCHEMA <> 'mysql' ORDER BY OBJECT_SCHEMA,OBJECT_NAME;

-- 哪个等待事件消耗的时间最多:

SELECT EVENT_NAME, COUNT_STAR, SUM_TIMER_WAIT, AVG_TIMER_WAIT FROM events_waits_summary_global_by_event_name WHERE event_name != 'idle' ORDER BY SUM_TIMER_WAIT DESC LIMIT 1;


4.information_schema

information_schema是一个信息数据库,它保存着关于MySQL服务器所维护的所有其他数据库的信息。(如数据库名,数据库的表,表栏的数据类型与访问权限等。) 在INFORMATION_SCHEMA中,有几张只读表。它们实际上是视图,而不是基本表。

-- information_schema 常用查询案例说明:
01.获取 mysql 所有表的 SQL 语句:
SELECT * FROM information_schema.tables;
02.获取表字段的 SQL 语句
SELECT * FROM information_schema.columns;
03.获取表主键值的 SQL 语句
SELECT * FROM information_schema.key_column_usage WHERE table_schema='employees' AND table_name='employees';
04.获取表 CHECK 约束的 SQL 语句
SELECT * FROM information_schema.table_constraints;
05.获取表索引的 SQL 语句
SELECT * FROM information_schema.statistics;
06.MySQL 查询某张表在哪个数据库里:
SELECT * FROM TABLES WHERE table_name='employees';
07.查 deptno 字段在哪个数据库的哪张表里:
SELECT TABLE_SCHEMA,TABLE_NAME FROM COLUMNS WHERE COLUMN_NAME='dept_no';
08.查询 MySQL 中某个数据库中有多少张表: :
SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES WHERE table_schema = 'employees' GROUP BY table_schema;
09.查询 MySQL 中某个数据库中某个表里有多少列:
SELECT COUNT(*) FROM COLUMNS WHERE TABLE_NAME='employees' AND TABLE_SCHEMA='employees';
10.获取所有表结构(TABLES)
SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA='employees';
11.获取表字段(COLUMNS)
SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='employees' AND TABLE_NAME='employees';
12.获取表键值
SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA='employees' AND TABLE_NAME='employees';
13.获取表 CHECK 约束
SELECT * FROM information_schema.TABLE_CONSTRAINTS WHERE TABLE_SCHEMA='employees' AND TABLE_NAME='employees';
14.获取表索引
SELECT * FROM information_schema.STATISTICS WHERE TABLE_SCHEMA='employees' AND TABLE_NAME='employees';



文章转载自数据库BOSS,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论