13.7.5.1 SHOW AUTHORS Syntax
13.7.5.2 SHOW BINARY LOGS Syntax
13.7.5.3 SHOW BINLOG EVENTS Syntax
13.7.5.4 SHOW CHARACTER SET Syntax
13.7.5.5 SHOW COLLATION Syntax
13.7.5.6 SHOW COLUMNS Syntax
13.7.5.7 SHOW CONTRIBUTORS Syntax
13.7.5.8 SHOW CREATE DATABASE Syntax
13.7.5.9 SHOW CREATE EVENT Syntax
13.7.5.10 SHOW CREATE FUNCTION Syntax
13.7.5.11 SHOW CREATE PROCEDURE Syntax
13.7.5.12 SHOW CREATE TABLE Syntax
13.7.5.13 SHOW CREATE TRIGGER Syntax
13.7.5.14 SHOW CREATE VIEW Syntax
13.7.5.15 SHOW DATABASES Syntax
13.7.5.16 SHOW ENGINE Syntax
13.7.5.17 SHOW ENGINES Syntax
13.7.5.18 SHOW ERRORS Syntax
13.7.5.19 SHOW EVENTS Syntax
13.7.5.20 SHOW FUNCTION CODE Syntax
13.7.5.21 SHOW FUNCTION STATUS Syntax
13.7.5.22 SHOW GRANTS Syntax
13.7.5.23 SHOW INDEX Syntax
13.7.5.24 SHOW MASTER STATUS Syntax
13.7.5.25 SHOW OPEN TABLES Syntax
13.7.5.26 SHOW PLUGINS Syntax
13.7.5.27 SHOW PRIVILEGES Syntax
13.7.5.28 SHOW PROCEDURE CODE Syntax
13.7.5.29 SHOW PROCEDURE STATUS Syntax
13.7.5.30 SHOW PROCESSLIST Syntax
13.7.5.31 SHOW PROFILE Syntax
13.7.5.32 SHOW PROFILES Syntax
13.7.5.33 SHOW RELAYLOG EVENTS Syntax
13.7.5.34 SHOW SLAVE HOSTS Syntax
13.7.5.35 SHOW SLAVE STATUS Syntax
13.7.5.36 SHOW STATUS Syntax
13.7.5.37 SHOW TABLE STATUS Syntax
13.7.5.38 SHOW TABLES Syntax
13.7.5.39 SHOW TRIGGERS Syntax
13.7.5.40 SHOW VARIABLES Syntax
13.7.5.41 SHOW WARNINGS Syntax
SHOW has many forms that provide information about databases, tables, columns, or status information about the server. This section describes those following:
SHOW AUTHORS
SHOW {BINARY | MASTER} LOGS
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
SHOW CHARACTER SET [like_or_where]
SHOW COLLATION [like_or_where]
SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [like_or_where]
SHOW CONTRIBUTORS
SHOW CREATE DATABASE db_name
SHOW CREATE EVENT event_name
SHOW CREATE FUNCTION func_name
SHOW CREATE PROCEDURE proc_name
SHOW CREATE TABLE tbl_name
SHOW CREATE TRIGGER trigger_name
SHOW CREATE VIEW view_name
SHOW DATABASES [like_or_where]
SHOW ENGINE engine_name {STATUS | MUTEX}
SHOW [STORAGE] ENGINES
SHOW ERRORS [LIMIT [offset,] row_count]
SHOW EVENTS
SHOW FUNCTION CODE func_name
SHOW FUNCTION STATUS [like_or_where]
SHOW GRANTS FOR user
SHOW INDEX FROM tbl_name [FROM db_name]
SHOW MASTER STATUS
SHOW OPEN TABLES [FROM db_name] [like_or_where]
SHOW PLUGINS
SHOW PROCEDURE CODE proc_name
SHOW PROCEDURE STATUS [like_or_where]
SHOW PRIVILEGES
SHOW [FULL] PROCESSLIST
SHOW PROFILE [types] [FOR QUERY n] [OFFSET n] [LIMIT n]
SHOW PROFILES
SHOW RELAYLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
SHOW SLAVE HOSTS
SHOW SLAVE STATUS
SHOW [GLOBAL | SESSION] STATUS [like_or_where]
SHOW TABLE STATUS [FROM db_name] [like_or_where]
SHOW [FULL] TABLES [FROM db_name] [like_or_where]
SHOW TRIGGERS [FROM db_name] [like_or_where]
SHOW [GLOBAL | SESSION] VARIABLES [like_or_where]
SHOW WARNINGS [LIMIT [offset,] row_count]
like_or_where:
LIKE 'pattern'
| WHERE expr
If the syntax for a given SHOW statement includes a LIKE 'pattern' part, 'pattern' is a string that can contain the SQL % and _ wildcard characters. The pattern is useful for restricting statement output to matching values.
Several SHOW statements also accept a WHERE clause that provides more flexibility in specifying which rows to display. See Section 21.33, “Extensions to SHOW Statements”.
Many MySQL APIs (such as PHP) enable you to treat the result returned from a SHOW statement as you would a result set from a SELECT; see Chapter 23, Connectors and APIs, or your API documentation for more information. In addition, you can work in SQL with results from queries on tables in the INFORMATION_SCHEMA database, which you cannot easily do with results from SHOW statements. See Chapter 21, INFORMATION_SCHEMA Tables.
mysql> help show;
Name: 'SHOW'
Description:
SHOW has many forms that provide information about databases, tables,
columns, or status information about the server. This section describes
those following:
SHOW {BINARY | MASTER} LOGS
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
SHOW CHARACTER SET [like_or_where]
SHOW COLLATION [like_or_where]
SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [like_or_where]
SHOW CREATE DATABASE db_name
SHOW CREATE EVENT event_name
SHOW CREATE FUNCTION func_name
SHOW CREATE PROCEDURE proc_name
SHOW CREATE TABLE tbl_name
SHOW CREATE TRIGGER trigger_name
SHOW CREATE VIEW view_name
SHOW DATABASES [like_or_where]
SHOW ENGINE engine_name {STATUS | MUTEX}
SHOW [STORAGE] ENGINES
SHOW ERRORS [LIMIT [offset,] row_count]
SHOW EVENTS
SHOW FUNCTION CODE func_name
SHOW FUNCTION STATUS [like_or_where]
SHOW GRANTS FOR user
SHOW INDEX FROM tbl_name [FROM db_name]
SHOW MASTER STATUS
SHOW OPEN TABLES [FROM db_name] [like_or_where]
SHOW PLUGINS
SHOW PROCEDURE CODE proc_name
SHOW PROCEDURE STATUS [like_or_where]
SHOW PRIVILEGES
SHOW [FULL] PROCESSLIST
SHOW PROFILE [types] [FOR QUERY n] [OFFSET n] [LIMIT n]
SHOW PROFILES
SHOW RELAYLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
SHOW SLAVE HOSTS
SHOW SLAVE STATUS [FOR CHANNEL channel]
SHOW [GLOBAL | SESSION] STATUS [like_or_where]
SHOW TABLE STATUS [FROM db_name] [like_or_where]
SHOW [FULL] TABLES [FROM db_name] [like_or_where]
SHOW TRIGGERS [FROM db_name] [like_or_where]
SHOW [GLOBAL | SESSION] VARIABLES [like_or_where]
SHOW WARNINGS [LIMIT [offset,] row_count]
like_or_where:
LIKE 'pattern'
| WHERE expr
If the syntax for a given SHOW statement includes a LIKE 'pattern'
part, 'pattern' is a string that can contain the SQL % and _ wildcard
characters. The pattern is useful for restricting statement output to
matching values.
Several SHOW statements also accept a WHERE clause that provides more
flexibility in specifying which rows to display. See
http://dev.mysql.com/doc/refman/5.7/en/extended-show.html.
URL: http://dev.mysql.com/doc/refman/5.7/en/show.html
MySQL
中有很多的基本命令,show命令也是其中之一,在很多使用者中对show命令的使用还容易产生混淆,本文汇集了show命令的众多用法。
1. show tables或show tables from database_name; -- 显示当前
数据库
中所有表的名称。
2. show databases; -- 显示
mysql
中所有数据库的名称。
3. show columns from table_name from database_name; 或show columns from database_name.table_name; -- 显示表中列名称。
4. show grants for user_name; -- 显示一个用户的权限,显示结果类似于grant 命令。
5. show index from table_name; -- 显示表的索引。
6. show status; -- 显示一些系统特定资源的信息,例如,正在运行的线程数量。
7. show variables; -- 显示系统变量的名称和值。
8. show processlist; -- 显示系统中正在运行的所有进程,也就是当前正在执行的查询。大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。
9. show table status; -- 显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间。
10. show privileges; -- 显示服务器所支持的不同权限。
11. show create database database_name; -- 显示create database 语句是否能够创建指定的数据库。
12. show create table table_name; -- 显示create database 语句是否能够创建指定的数据库。
13. show engines; -- 显示安装以后可用的存储引擎和默认引擎。
14. show innodb status; -- 显示innoDB存储引擎的状态。
15. show logs; -- 显示BDB存储引擎的日志。
16. show warnings; -- 显示最后一个执行的语句所产生的错误、警告和通知。
17. show errors; -- 只显示最后一个执行语句所产生的错误。
18. show [storage] engines; --显示安装后的可用存储引擎和默认引擎。
show tables或show tables from database_name或show database_name.tables;
解释:显示当前数据库中所有表的名称
show databases;
解释:显示mysql中所有数据库的名称
show processlist;
解释:显示系统中正在运行的所有进程,也就是当前正在执行的查询。大多数用户可以查看
他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。
show table status;
解释:显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间
show columns from table_name from database_name; 或show columns from database_name.table_name;或show fields;
解释:显示表中列名称(和 desc table_name 命令的效果是一样的)
show grants for user_name@localhost;
解释:显示一个用户的权限,显示结果类似于grant 命令
show index from table_name;或show keys;
解释:显示表的索引
show status;
解释:显示一些系统特定资源的信息,例如,正在运行的线程数量
show variables;
解释:显示系统变量的名称和值
show privileges;
解释:显示服务器所支持的不同权限
show create database database_name;
解释:显示创建指定数据库的SQL语句
show create table table_name;
解释:显示创建指定数据表的SQL语句
show engies;
解释:显示安装以后可用的存储引擎和默认引擎。
show innodb status;
解释:显示innoDB存储引擎的状态
show logs;
解释:显示BDB存储引擎的日志
show warnings;
解释:显示最后一个执行的语句所产生的错误、警告和通知
show errors;
解释:只显示最后一个执行语句所产生的错误
上面的大部分命令都可以用like,比如 show table like ‘%abce%’ 。
附:
show status 结果说明
列 | 含义 |
Name | 表名 |
Type | 表的类型 (ISAM,MyISAM或HEAP) |
Row_format | 行存储格式 (固定, 动态, 或压缩) |
Rows | 行数量 |
Avg_row_length | 平均行长度 |
Data_length | 数据文件的长度 |
Max_data_length | 数据文件的最大长度 |
Index_length | 索引文件的长度 |
Data_free | 已分配但未使用了字节数 |
Auto_increment | 下一个 autoincrement(自动加1)值 |
Create_time | 表被创造的时间 |
Update_time | 数据文件最后更新的时间 |
Check_time | 最后对表运行一个检查的时间 |
Create_options | 与CREATE TABLE一起使用的额外选项 |
Comment | 当创造表时,使用的注释 (或为什么MySQL不能存取表信息的一些信息)。 |
show index 结果说明:
列 | 含义 |
Table | 表名 |
Non_unique | 0,如果索引不能包含重复。 |
Key_name | 索引名 |
Seq_in_index | 索引中的列顺序号, 从 1 开始。 |
Column_name | 列名。 |
Collation | 列怎样在索引中被排序。在MySQL中,这可以有值A(升序) 或NULL(不排序)。 |
Cardinality | 索引中唯一值的数量。这可通过运行isamchk -a更改. |
Sub_part | 如果列只是部分被索引,索引字符的数量。NULL,如果整个键被索引。 |
show variables 结果说明:
Aborted_clients | 由于客户没有正确关闭连接已经死掉,已经放弃的连接数量。 |
Aborted_connects | 尝试已经失败的MySQL服务器的连接的次数。 |
Connections | 试图连接MySQL服务器的次数。 |
Created_tmp_tables | 当执行语句时,已经被创造了的隐含临时表的数量。 |
Delayed_insert_threads | 正在使用的延迟插入处理器线程的数量。 |
Delayed_writes | 用INSERT DELAYED写入的行数。 |
Delayed_errors | 用INSERT DELAYED写入的发生某些错误(可能重复键值)的行数。 |
Flush_commands | 执行FLUSH命令的次数。 |
Handler_delete | 请求从一张表中删除行的次数。 |
Handler_read_first | 请求读入表中第一行的次数。 |
Handler_read_key | 请求数字基于键读行。 |
Handler_read_next | 请求读入基于一个键的一行的次数。 |
Handler_read_rnd | 请求读入基于一个固定位置的一行的次数。 |
Handler_update | 请求更新表中一行的次数。 |
Handler_write | 请求向表中插入一行的次数。 |
Key_blocks_used | 用于关键字缓存的块的数量。 |
Key_read_requests | 请求从缓存读入一个键值的次数。 |
Key_reads | 从磁盘物理读入一个键值的次数。 |
Key_write_requests | 请求将一个关键字块写入缓存次数。 |
Key_writes | 将一个键值块物理写入磁盘的次数。 |
Max_used_connections | 同时使用的连接的最大数目。 |
Not_flushed_key_blocks | 在键缓存中已经改变但是还没被清空到磁盘上的键块。 |
Not_flushed_delayed_rows | 在INSERT DELAY队列中等待写入的行的数量。 |
Open_tables | 打开表的数量。 |
Open_files | 打开文件的数量。 |
Open_streams | 打开流的数量(主要用于日志记载) |
Opened_tables | 已经打开的表的数量。 |
Questions | 发往服务器的查询的数量。 |
Slow_queries | 要花超过long_query_time时间的查询数量。 |
Threads_connected | 当前打开的连接的数量。 |
Threads_running | 不在睡眠的线程数量。 |
Uptime | 服务器工作了多少秒。 |
关于上面的一些注释:
- 如果Opened_tables太大,那么你的table_cache变量可能太小。
- 如果key_reads太大,那么你的key_cache可能太小。缓存命中率可以用key_reads/key_read_requests计算。
- 如果Handler_read_rnd太大,那么你很可能有大量的查询需要MySQL扫描整个表或你有没正确使用键值的联结(join)。
①、获取运行中的mysql进程使用各服务器参数及其值
修改服务器变量的值(此类修改服务器重启后将失效,如果想永久有效需要添加到配置文件中。其中有些参数支持运行时修改,会立即生效;有些参数不支持,且只能通过修改配置文件,并重启服务器程序生效。有些参数作用域是全局的,且不可改变;有些可以为每个用户提供单独的设置)
MariaDB [(none)]> SET GLOBAL skip_name_resolve=ON;ERROR 1238 (HY000): Variable 'skip_name_resolve' is a read only variable#可以看到报错信息为skip_name_resolve为只读变量,不支持修改,这类参数只能修改配置文件并重启服务生效MariaDB [(none)]> SET GLOBAL general_log=ON;Query OK, 0 rows affected (0.04 sec)#修改全局变量后只会对新建立的会话有效,对已经建立的会话并没有生效,上面为修改全局参数的方法MariaDB [(none)]> SET SESSION sql_mode= 'TRADITIONAL' ;#修改当前进程的服务器参数,修改完只对当前会话有效。这里是修改对约束等的响应行为,常用的模式有:默认的约束是截取指定的长度。TRADITIONAL(不允许对非法值进行插入), STRICT_TRANS_TABLES(对所有支持事务类型的表严格约束), or STRICT_ALL_TABLES(对所有表严格约束)查看查询缓存是否开启和查询缓存的大小
MariaDB [hellodb]> SHOW GLOBAL VARIABLES LIKE 'query_cache_type' \G*************************** 1. row ***************************Variable_name: query_cache_type Value: ON#ON,查询缓存开启。OFF,查询缓存不开启。DEMAND,查询缓存按需进行,显式指定SQL_CACHE的SELECT语句才会缓存,其它均不予缓存MariaDB [hellodb]> SHOW GLOBAL VARIABLES LIKE 'query_cache_size' \G查看SELECT语句查询的次数和命中的次数
②、状态变量:用于保存mysqld运行中的统计数据的变量,不可修改
③、查看字符集和排序规则
④、查看警告信息
MariaDB [hellodb]> SHOW WARNINGS;
⑤、查看表状态
MariaDB [hellodb]> SHOW TABLE STATUS LIKE 'toc'\G
⑥、查看指定数据库指定表的索引
MariaDB [hellodb]> SHOW INDEXES FROM mysql.user\G
⑦、不会真正执行语句,只会去分析查询语句查询过程中是否使用了索引以及如何实现数据获取
⑧、查看当前mysql连接的线程
MariaDB [hellodb]> SHOW PROCESSLIST;
⑨、查看当前会话的事务隔离级别
⑩、查询缓存相关的服务器变量
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'query_cache%' ;+------------------------------+---------+| Variable_name | Value |+------------------------------+---------+| query_cache_limit | 1048576 || query_cache_min_res_unit | 4096 || query_cache_size | 0 || query_cache_strip_comments | OFF || query_cache_type | ON || query_cache_wlock_invalidate | OFF |+------------------------------+---------+#query_cache_limit:能够缓存的最大查询结果;对于有着较大结果的查询语句,建议在SELECT中使用SQL_NO_CACHE#query_cache_min_res_unit: 查询缓存中内存块的最小分配单位;较小值会减少浪费,但会导致更频繁的内存分配操作;较大值会带来浪费,会导致碎片过多#query_cache_size:查询缓存总共可用的内存空间;单位是字节,必须是1024的整数倍;#query_cache_type: ON, OFF, DEMAND。ON,查询缓存开启。OFF,查询缓存不开启。DEMAND,查询缓存按需进行#query_cache_wlock_invalidate:如果某表被其它的连接锁定,是否仍然可以从查询缓存中返回结果;默认值为OFF,表示可以在表被其它连接淘宝的场景中继续从缓存返回数据;ON则表示不允许;查询缓存:
如何判断是否命中:
通过查询语句的哈希值判断:哈希值考虑的因素包括
查询本身、要查询的数据库、客户端使用协议版本,...
查询语句任何字符上的不同,都会导致缓存不能命中;
哪此查询可能不会被缓存?
查询中包含UDF、存储函数、用户自定义变量、临时表、mysql库中系统表、或者包含列级权限的表、有着不确定值的函数(Now());
⑩①、查询相关的状态变量
MariaDB [(none)]> SHOW GLOBAL STATUS LIKE 'Qcache%' ;+-------------------------+---------+| Variable_name | Value |+-------------------------+---------+| Qcache_free_blocks | 1 || Qcache_free_memory | 1582248 || Qcache_hits | 0 || Qcache_inserts | 0 || Qcache_lowmem_prunes | 0 || Qcache_not_cached | 0 || Qcache_queries_in_cache | 0 || Qcache_total_blocks | 1 |+-------------------------+---------+#缓存命中率的评估:Qcache_hits/(Qcache_hits+Com_select)#Qcache_free_blocks:空闲的内存块#Qcache_free_memory:空闲的内存空间#Qcache_hits:缓存命中数#Qcache_inserts:可缓存的结果被放入到缓存的次数#Qcache_lowmem_prunes:有多少次是因为内存空间使用算法清除缓存的次数#Qcache_not_cached:可缓存但是没有给缓存的次数#Qcache_queries_in_cache:当前查询缓存中被缓存下来的查询语句的个数#Qcache_total_blocks:在整个缓存中,当分配了多个不连续的内存时,总共的块数⑩②、获取查询执行计划信息,用来查看查询优化器如何执行查询;
MariaDB [hellodb]> EXPLAIN SELECT Name From students WHERE StuID > 10\G *************************** 1. row *************************** id : 1 select_type: SIMPLE table: students type : range possible_keys: PRIMARY key: PRIMARY key_len: 4 ref: NULL rows: 16 Extra: Using where
输出分析:
id: 当前查询语句中,每个SELECT语句的编号;
简单类型的查询
复杂类型的查询有三种:
简单子查询用于WHERE;
用于FROM中的子查询;
联合查询:UNION(UNION查询的分析结果会出现一外额外匿名临时表);
select_type:查询的类型
简单查询为SIMPLE
复杂查询:
SUBQUERY: 简单子查询;
DERIVED: 用于FROM中的子查询;
UNION:UNION语句的第一个之后的SELECT语句;
UNION RESULT: 匿名临时表;
table:SELECT语句关联到的表
type:关联类型,或访问类型,即MySQL决定的如何去查询表中的行的方式
ALL: 全表扫描;
index:根据索引的次序进行全表扫描;如果在Extra列出现“Using index”表示了使用覆盖索引,而非全表扫描;
range:有范围限制的根据索引实现范围扫描;扫描位置始于索引中的某一点,结束于另一点;
ref: 根据索引返回表中匹配某单个值的所有行;
eq_ref:仅返回一个行,但与需要额外与某个参考值做比较;
const, system: 直接返回单个行;
possible_keys:查询可能会用到的索引
key: 查询中使用了的索引
key_len: 在索引使用的字节数
ref: 在利用key字段所表示的索引完成查询时所有的列或某常量值
rows:MySQL估计为找所有的目标行而需要读取的行数
Extra:额外信息
Using index:MySQL将会使用覆盖索引,以避免访问表;
Using where:MySQL服务器将在存储引擎检索后,再进行一次过滤;
Using temporary:MySQL对结果排序时会使用临时表;
Using filesort:对结果使用一个外部索引排序;
⑩③、查询各日志的相关配置
⑩④、二进制日志查询相关信息