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 |
+---------------+-------+
--而全局级别的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
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
墨天轮个人数说知识点合集
JiekeXu
381次阅读
2025-04-01 15:56:03
MySQL数据库当前和历史事务分析
听见风的声音
380次阅读
2025-04-01 08:47:17
MySQL 生产实践-Update 二级索引导致的性能问题排查
chengang
352次阅读
2025-03-28 16:28:31
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
305次阅读
2025-04-15 14:48:05
MySQL8.0直方图功能简介
Rock Yan
279次阅读
2025-03-21 15:30:53
MySQL 有没有类似 Oracle 的索引监控功能?
JiekeXu
274次阅读
2025-03-19 23:43:22
MySQL 9.3 正式 GA,我却大失所望,新特性亮点与隐忧并存?
JiekeXu
270次阅读
2025-04-15 23:49:58
云和恩墨杨明翰:安全生产系列之MySQL高危操作
墨天轮编辑部
267次阅读
2025-03-27 16:45:26
openHalo问世,全球首款基于PostgreSQL兼容MySQL协议的国产开源数据库
严少安
248次阅读
2025-04-07 12:14:29
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
179次阅读
2025-04-17 17:02:24