本文共 6176 字,大约阅读时间需要 20 分钟。
MySQL 在整体架构上分为 Server 层和存储引擎层。
其中 Server 层,包括连接器、查询缓存、分析器、优化器、执行器等,存储过程、触发器、视图和内置函数都在这层实现。数据引擎层负责数据的存储和提取,如 InnoDB、MyISAM、Memory 等引擎。在客户端连接到 Server 层后,Server 会调用数据引擎提供的接口,进行数据的变更。
单点(Single),适合小规模应用,复制(Replication),适合中小规模应用,集群(Cluster),适合大规模应用。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql:是mysql 核心的数据库,类似于sqlserver中的master库, oracle中的system部分功能。主要负责存储数据库的用户\权限等
mysql自己需要使用的控制和管理信息-不能修改
mysql> show tables;
engine_ cost: IO
server_ cost: cpu
columns_ priv -- 列级别权限
db--库级别权限
user--用户帐号,全局权限
host--现在不用了,废弃的
tables_ priv --表级权限
procs_.priv--存储过程与函数相关的权限
proxies_ priv --代理用户的权限
event--事件与任务调度
func--函数
gtid_ executed -- gtid, mysql启动阶段会读这个表来获取gtid里面的变量值
help --帮助有关系的表
innodb_ index_ .stats | -- innodb索引统计信息
innodb_ table_ stats | -- innodb表统计信息
ndb_ binlog_ index |--ndb集群的二进制日志索引信息
plugin | --插件表
查看官方文档
Sys库所有的数据源来自:performance_schema。目标是把performance_schema的把复杂度降低,让DBA能更好的阅读这个库里的内容。让DBA更快的了解DB的运行情况,解决性能瓶颈都提供了巨大帮助。
Sys库下有两种表
字母开头: 适合人阅读,显示是格式化的数
x$开头 : 适合工具采集数据,原始类数据
sys_开头是库里的配置表:sys_config用于sys schema库的配置
variable 配置选项名称
value 配置选项值
set_time 该行配置修改的时间
set_by 该行配置信息修改者,如果从被安装没有修改过,那么这个数据应该为NULL
host : 以IP分组相关的统计信息
innodb : innodb buffer 相关信息
io : 数据内不同维度展的IO相关的信息
memory : 以IP,连接,用户,分配的类型分组及总的占用显示内存的使用
metrics : DB的内部的统计值
processlist : 线程相关的信息(包含内部线程及用户连接)
ps_ : 没有工具统计的一些变量(没看出来存在的价值)
schema : 表结构相关的信息,例如: 自增,索引, 表里的每个字段类型,等待的锁等等
session : 用户连接相关的信息
statement : 基于语句的统计信息(重点)
statements_ : 出错的语句,进行全表扫描, 运行时间超长,排序相等(重点)
user_ : 和host_开头的相似,只是以用户分组统计
wait : 等待事件,比较专业,难看懂。
waits : 以IP,用户分组统计出来的一些延迟事件,有一定的参考价值。
Sys库能做什么,那么我们先来看看以下的问题,对于数据库,你有没有以下的疑问?
列的含义可以去查,官方手册。
select * from host_summary limit 1;
select * from io_global_by_file_by_bytes limit 1;
select * from user_summary limit 1;
select * from memory_global_total;
查看当前连接情况
select host,current_connections ,statements from host_summary;
查看当前正在执行的SQL:
select conn_id, user, current_statement ,last_statement from session;
Select * from statement_analysis order by exec_count desc limit 10;
Select * from io_global_by_file_by_bytes limit 10;
Select * from statement_analysis order by exec_count desc limit 10;
Select * from statement_analysis order by avg_latency desc
limit 10;
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;
select * from innodb_buffer_stats_by_table order by pages desc limit 10;
select * from innodb_buffer_stats_by_schema;
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;
select user , COUNT(*) from processlist group by user;
select * from processlist;
sys<performance_schema:收集数据库服务器性能参数,得到数据库的运行统计信息,可以更好的利用这些信息分析问题。这个数据库的信息相当复杂,所以ORACLE公司官方把performance_schema简化到sys数据库,用于大家更简单的分析问题
mysql 5.5增加的,需要使用的时候需要设置参数performance_schema=on。
mysql 5.6以后默认打开。
这些表分几类:
1 setup 配置表,配置监控选项
2)当前enents表,记录当前的哪些线程正在做一些什么事情
3)各种事件的历史记录表。
4)各种事件的统计表
5)杂项表
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;
DIGEST_TEXT SQL语句,COUNT_STAR次数,FIRST_SEEN开始时间,LAST_SEEN结束时间
select SCHEMA_NAME,DIGEST_TEXT,COUNT_STAR,AVG_TIMER_WAIT,SUM_ROWS_SENT,SUM_ROWS_EXAMINED,FIRST_SEEN,LAST_SEEN from events_statements_summmary_by_digest order by AVG_TIMER_WAIT desc limit 1;
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 SUM_ROWS_EXAMINED desc limit 1;
都是使用events_statements_summary_by_digest
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 SUM_ROWS_EXAMINED desc limit 1;
改变红字即可
SUM_ROWS_SENT 返回结果集
SUM_SORT_ROWS 排序最多
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;
提供数据库的元数据
比如数据库的数据名,表名,列信息,访问权限,索引,视图,存储过程,函数等信息。就是数据字典
查询这张表再什么数据库中
select * from tables where table_name='itpux11'
查询数据库中有什么表
select COUNT(*) tables,table_schema from information_schema.TABLES where table_schema = 'itpuxdb' group by table_schema;
1 查看数据库的版本
show variables like 'version';
2 列出所有的数据库
show databases;
3 查看服务器状态
status;
mysql> status;
--------------
mysql Ver 14.14 Distrib 5.7.20, for linux-glibc2.12 (x86_64) using EditLine wrapper
Connection id: 9
Current database: information_schema
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.20-log MySQL Community Server (GPL)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /tmp/mysql.sock
Uptime: 4 hours 45 min 24 sec
4 查看数据库存储引擎
show engines;
5 查看数据库存储引擎插件
show plugins;
6 查看数据库状态统计
show status;
7 查看数据库参数
show variables;
8 查看复制容灾
show master status;
show slave status;
9 查看单机还是集群
show variables like '%cluster%'
10 查看数据库线程
show processlist;
11更多
show databases;
show table;
show index;
use mysql;
切换数据库
转载地址:http://qxbai.baihongyu.com/