| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 【第17天】SQL进阶-查询优化- SHOW STATUS(SQL 小虚竹) -> 正文阅读 |
|
[大数据]【第17天】SQL进阶-查询优化- SHOW STATUS(SQL 小虚竹) |
回城传送–》《32天SQL筑基》 零、前言今天是学习 SQL 打卡的第 17 天,每天我会提供一篇文章供群成员阅读( 不需要订阅付钱 )。 希望大家先自己思考,如果实在没有想法,再看下面的解题思路,自己再实现一遍。在小虚竹JAVA社区 中对应的 【打卡贴】打卡,今天的任务就算完成了,养成每天学习打卡的好习惯。 ? 虚竹哥会组织大家一起学习同一篇文章,所以有什么问题都可以在群里问,群里的小伙伴可以迅速地帮到你,一个人可以走得很快,一群人可以走得很远,有一起学习交流的战友,是多么幸运的事情。 ? 我的学习策略很简单,题海策略+ 费曼学习法。如果能把这些题都认认真真自己实现一遍,那意味着 SQL 已经筑基成功了。后面的进阶学习,可以继续跟着我,一起走向架构师之路。 今天的学习内容是:SQL进阶-查询优化- SHOW STATUS 一、练习题目
二、SQL思路SQL进阶-查询优化- SHOW STATUS初始化数据
解法SHOW STATUS是什么SHOW STATUS 能获取mysql服务的一些状态,这些状态是mysql服务的性能参数!
SESSION表示获取当前会话级别的性能参数,GLOBAL表示获取全局级别的性能参数,并且SESSION和GLOBAL可以省略,如果省略不写,默认为SESSION。
其中status_name 为状态的参数名称。 实战经验:常用的mysql状态查询1、QPS(每秒处理的请求数量)QPS是mysql每秒所执行的sql数量,但不仅限于select 、instert、update和delete语句。 QPS = Questions(or Queries) / seconds
计算思路:先从show global status like ‘Question%’; 得到Question1的数据,经过一段时间后,再计算show global status like ‘Question%’; ,得到Question2的数据。 QPS = (Question2-Question1)/(uptime_since_flush_status2-uptime_since_flush_status1) Questions和 Queries的区别
2、TPS(每秒处理的事务数量)TPS指的是每秒处理的事务数量,不包含select语句。 TPS = (Com_commit + Com_rollback) / seconds
字段说明:
对于回滚操作非常频繁的数据库,可能意味着应用编写存在问题。
计算思路:先得到** (Com_commit + Com_rollback) ** 的值commit_rollback1,然后经过一段时间后,再得到** (Com_commit + Com_rollback) ** 的值commit_rollback2。 3、key Buffer 命中率key buffer 命中率代表了?Myisam?类型表的索引cache命中率,命中率的大小直接影响myisam类型表的读写性能。
4、InnoDB Buffer命中率innodb buffer 所指的是innodb_buffer_pool,也就是用来缓存innodb类型表和索引的内在空间。
5、query cache命中率query cache 是mysql的查询cache,在my.cnf配置文件若打开,则可以对查询过的语句结果进行cache。
在mysql5中,引入了query-cache的功能,query-cache默认是关闭的。 6 、table_cache(table_open_cache) 命中率table_cache是一个非常重要的MySQL性能参数,table_cache主要用于设置table高速缓存的数量。在5.1.3之后的版本中叫做table_open_cache。 建议:状态量open_tables与opened_tables之间的比率要大于80% open_tables与opened_tables之间的比率过低,则代表table cache设置过小。
修改table_open_cache 的值,方式如下:
6、thread cache命中率在mysql中,为了尽可能提高客户端连接的过程,实现 了一个thread cache池,将空闲的连接线程存放在其中,而不是请求完成后销毁,当有新的连接请求的时候,mysql首先检查thread cache是否存储空闲的连接线程,如果存在则取出来直接使用,如果没有空闲连接线程,才创建新的线程。 计算公式:
优化如果?thread cache命中率低于90%
或者执行下面这个命令,这种方式不需要重启mysql服务。MySQL重启后会失效。
7、tmp table相关状况分析tmp table 主要用于监控mysql使用临时表的量是否过多,是否有临时表过大而不得不从内存中换出到磁盘文件中
参数说明: Created_tmp_disk_tables:为临时表过大无法在内存中完成,而不得不使用磁盘的次数。 或者执行下面这个命令,这种方式不需要重启mysql服务。MySQL重启后会失效。
查看生效的配置:
8、binlog cache若打开binlog日志功能,则需要考虑binlog cache问题。binlog不是一有数据就写到binlog中,而是先写入到binlog cache中,再写入到binlog中。
或者执行下面这个命令,这种方式不需要重启mysql服务。MySQL重启后会失效。
查看生效的配置:
9、innodb_log_waits
Innodb_log_waits值不等于0的话,表明 innodb log buffer 因为空间不足而等待。需要增加innodb_log_buffer_size的值,适当的增加不会造成内存不足的问题。 或者执行下面这个命令,这种方式不需要重启mysql服务。MySQL重启后会失效。
查看生效的配置:
10、锁状态mysql的锁有表锁和行锁,myisam最小锁为表锁,innodb最小锁为行锁,可以通过以下命令获取锁定次数、锁定造成其他线程等待次数,以及锁定等待时间信息。
Table_locks_waited/Table_locks_immediate 的比值比较大的话,说明表锁造成的阻塞比较严重。可能需要调整Query语句,或者更改存储引擎,亦或者需要调整业务逻辑。 而Innodb_row_lock_waits较大,则说明Innodb的行锁也比较严重,且影响了其他线程的正常处理。 三、总结本文介绍了什么是SHOW STATUS,以及如何使用SHOW STATUS。分享了10个常用的mysql状态查询:
所以,嗯,这题的答案选。。评论区大声告诉虚竹哥。 四、参考MySQL进阶技能树>查询优化> SHOW STATUS 我是虚竹哥,我们明天见~ |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年5日历 | -2025/5/1 9:53:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |