查看原文
其他

MySQL 数据交互原理与性能问题分析

泊涯 twt企业IT社区 2022-07-03

【作者】泊涯,公司分部测试经理,集团公司技术专家成员之一,目前主要在客户现场做银行系统的性能诊断分析优化和测试管理工作。


我们在性能测试监控MYSQL数据库时,作为专业非功能性测试人员,需要了解操作系统工作原理、业务实现架构逻辑、应用架构实现逻辑、数据库工作原理,才能真正的做好非功能性测试,而大部分业务型交易问题都是因为数据库问题原因产生的性能瓶颈,更多数情况都是因为对数据库出现问题的情况和处理思路不清晰。在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,也就是实际前端业务操作到从磁盘捞取数据整个实现过程如何运作,了解了这些,明白查询优化是遵循MySQL优化器方式运行,具体如下图:

根据上图所示我们了解到,无论是手机端还是PC端,例如我们点餐系统,通过APP客户端,我们查询要点的餐饮,这时通过网络连接同数据库服务层建立TCP连接。

读写数据原理

1、步骤一 与数据库连接建立

连接管理模块会建立连接,并请求一个连接线程。如果连接池中有空闲的连接线程,则分配给这个连接,如果没有,在没有超过最大连接数的情况下,创建新的连接线程负责这个客户端。

2、步骤二 检查语法

接下来验证用户是否有权限。例如你有注册,查看该用户是会员用户,方可提供点餐服务,连接线程开始接收并处理来自客户端的SQL语句。连接线程接收到SQL语句之后,将语句交给SQL语句解析模块进行语法分析和语义分析。

3、步骤三 检查缓存

如果是查询语句,则可以先看查询缓存中是否有结果,如果有结果可以直接返回给客户端。

4、步骤四 检查引擎优化

如果查询缓存中没有结果,就需要真的查询数据库引擎层了,于是发给SQL优化器,进行查询的优化。就是请求数据库引擎层,打开表,接下来的处理过程就到了数据库引擎层,例如InnoDB。

5、步骤五 数据读取方式

在数据库引擎层,要先查询缓存是否有数据,如果有直接返回,如果没有就要从磁盘上去读取,把磁盘中找到相应的数据加载到缓存中,下次读取直接从缓存读取从而使得后面的查询更加高效。

6、步骤六 关闭连接

获取数据后返回给客户端,关闭连接,释放连接线程,过程结束。

性能问题监控分析

如果语法写的有问题,则在从磁盘捞取数据时会出现磁盘IO高或者CPU高,如果语法分析没问题,则看缓存页配置是否太小了,或者本身物理内存就小,给缓存的空间就少了。

如有任何问题,可点击文末阅读原文到社区原文下评论交流


 资料/文章推荐:

  • MySQL性能故障优化利器之索引优化

    http://www.talkwithtrend.com/Article/244357

  • 深入浅出MySQL数据库开发、优化与管理维护

    http://www.talkwithtrend.com/Document/detail/tid/425053

  • MySQL 集群架构、性能问题排查和优化方法 | 进阶技巧

    http://www.talkwithtrend.com/Article/220521


欢迎关注社区 “mySQL”技术主题,将会不断更新优质资料、文章。地址:

http://www.talkwithtrend.com/Topic/3873


下载 twt 社区客户端 APP

与更多同行在一起

高手随时解答你的疑难问题

轻松订阅各领域技术主题

浏览下载最新文章资料


长按识别二维码即可下载

或到应用商店搜索“twt”


长按二维码关注公众号

*本公众号所发布内容仅代表作者观点,不代表社区立场

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存