MySQL 状态变量(Server Status Variables)

    MySQL状态变量是当前服务器自启动后累计的一些系统状态信息,主要用于评估当前系统资源的使用情况以进一步分析系统性能而做出相应的调整决策。这些状态变量我们可以理解为等同于Oracle数据库的动态性能视图。MySQL的状态变量有很多,比如SQL执行频率,索引的使用情况,锁资源的使用情况等等。状态变量可以分区全局以及会话级别的状态变量。状态变量不可修改,为只读属性,由系统更新。本文演示了状态变量的一些示例,仅为抛砖引玉之用。

1、状态变量    反映当前mysql数据库服务器自当次启动以来的累计相关状态信息,分为会话级与全局级别状态信息。    与系统变量类似,有些状态变量有全局和会话级别,而有些只有全局级别。如binlog_cache_disk_use仅有全局状态,而bytes_sent两者都有。    可以通过show status like '%variable_name%' 或者show global status like '%variable_name%'来查看。    在未使用Like的情形下show status会显示全部的状态变量。    可以通过查询系统表information_schema.global_status以及information_schema.session_status来获取状态变量信息。    可以在命令行下通过mysqladmin extended-status方式来获取状态变量的相关信息。    可以通过命令行方式mysqladmin extended-status -r -i 5或innotop持续观察状态变量的改变情况。    一些状态变量重可以用FLUSH STATUS语句重置为零值。

2、show方式查看状态变量

--当前演示环境
root@localhost[(none)]> show variables like 'version';
+---------------+------------+
| Variable_name | Value      |
+---------------+------------+
| version       | 5.5.39-log |
+---------------+------------+

a、查看所有状态变量
root@localhost[(none)]> show status;
+------------------------------------------+-------------+
| Variable_name                            | Value       |
+------------------------------------------+-------------+
| Aborted_clients                          | 0           |
| Binlog_stmt_cache_use                    | 1           |
| Bytes_received                           | 135         |
| Bytes_sent                               | 266         |
|               ................           |             | 
| Threads_running                          | 1           |
| Uptime                                   | 76242       |
| Uptime_since_flush_status                | 76242       |
+------------------------------------------+-------------+
312 rows in set (0.00 sec)   --可以看出当前版本5.5.39有312个状态变量


b、查看仅有global的状态变量(connections)            
--查看指定的状态变量,以下两个与connection相关的都为全局状态变量
root@localhost[(none)]> show global status like 'connection%';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Connections          | 11    | --连接到MySQL服务器的数量(包含成功或失败的)。
+----------------------+-------+

suse11b:~ # mysql -ufred

fred@localhost[(none)]> show global status like '%connection%';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Connections          | 12    | --连接之后,我们看到Connections的值变为12了。
+----------------------+-------+


c、查看既有global又有session状态的变量
--查看session状态变量opened_tables
root@localhost[tempdb]> show session status like 'opened_tables';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Opened_tables | 0     |
+---------------+-------+

root@localhost[tempdb]> select count(*) from tb_slow;
+----------+
| count(*) |
+----------+
|   424448 |
+----------+

root@localhost[tempdb]> show session status like 'opened_tables';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Opened_tables | 1     | --值变为1
+---------------+-------+

--从information_schema.session_status表查询状态变量OPENED_TABLES
root@localhost[tempdb]> select * from information_schema.session_status
    -> where variable_name like 'opened_tables';
+---------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+---------------+----------------+
| OPENED_TABLES | 1              |
+---------------+----------------+

--查看全局状态变量opened_tables
root@localhost[tempdb]> show global status like 'opened_tables';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Opened_tables | 54    | 
+---------------+-------+

root@localhost[tempdb]> select count(*) from mysql.db;
+----------+
| count(*) |
+----------+
|        2 |
+----------+

root@localhost[tempdb]> show global status like 'opened_tables';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Opened_tables | 55    |  --值变为55
+---------------+-------+

--从information_schema.global_status表查询状态变量OPENED_TABLES
root@localhost[tempdb]> select * from information_schema.global_status
    -> where variable_name like 'opened_tables';
+---------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+---------------+----------------+
| OPENED_TABLES | 55             | 
+---------------+----------------+

--清洗状态变量统计信息
root@localhost[tempdb]> flush status;
Query OK, 0 rows affected (0.00 sec)

--下面的查询结果可以看出,session级别的opened_tables被重置为0
root@localhost[tempdb]> show session status like 'opened_tables';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Opened_tables | 0     |
+---------------+-------+

--Author: Leshami
--Blog  : http://blog.csdn.net/leshami

--而全局级别的opened_tables未受到任何影响
root@localhost[tempdb]> show global status like 'opened_tables';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Opened_tables | 55    |
+---------------+-------+

3、使用mysqladmin extended-status获取状态变量

suse11b:~ # mysqladmin extended-status|grep Connections
| Connections                              | 18          |
suse11b:~ # mysql

root@localhost[(none)]> system mysqladmin extended-status|grep Connections
| Connections                              | 20          |
root@localhost[(none)]> exit
Bye
suse11b:~ # mysqladmin --help |more    #mysqladmin与状态变量有关的使用
extended-status       Gives an extended status message from the server
flush-status          Clear status variables

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java达人

百万级数据查询优化(数据库)

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 n...

27790
来自专栏jouypub

MySQL的语句执行顺序

MySQL的语句一共分为11步,如下图所标注的那样,最先执行的总是FROM操作,最后执行的是LIMIT操作。其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为...

5110
来自专栏精讲JAVA

百万数据查询优化技巧三十则

对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 应尽量避免在 where 子句中对字段进行 null ...

21390
来自专栏码云1024

sql 复习练习

45760
来自专栏数据和云

深入剖析:insert 的enq: TM – contention

张大朋(Lunar)Oracle 资深技术专家 Lunar 拥有超过十年的 ORACLE SUPPORT 从业经验,曾经服务于ORACLE ACS部门,现就职于...

30860
来自专栏维C果糖

史上最简单的 MySQL 教程(二十六)「连接查询(上)」

连接查询:将多张表(大于等于 2 张表)按照某个指定的条件进行数据的拼接,其最终结果记录数可能有变化,但字段数一定会增加。

44180
来自专栏13blog.site

Spring+SpringMVC+MyBatis+easyUI整合优化篇(十二)数据层优化-explain关键字及慢sql优化

本文提要 从编码角度来优化数据层的话,我首先会去查一下项目中运行的sql语句,定位到瓶颈是否出现在这里,首先去优化sql语句,而慢sql就是其中的主要优化对象,...

390110
来自专栏轮子工厂

深入理解MySQL---数据库知识最全整理,这些你都知道了吗?

对于后端开发人员来说,经常会和数据打交道,今天总结下数据库相关的知识。包括MySQL,JDBC基础,JDBC进阶,MongoDB,性能优化等知识点。

11330
来自专栏沈唁志

谈谈在SQL语句中的优化技巧

19340
来自专栏逸鹏说道

百万条数据快速查询优化技巧参考

所以的优化并不是绝对,具体得根据业务实际情况 百万条数据快速查询优化技巧 1.应尽量避免在where子句中使用!=或<>操作符 2.应尽量避免在where子句中...

40480

扫码关注云+社区

领取腾讯云代金券