1 前言
在应用的开发过程中,由于开发初期的数据量一般都比较小,所以开发过程中一般都比较注重功能上的实现,但是当完成了一个应用或者系统之后,随着生产数据量的急剧增长,那么之前的很多sql语句的写法就会显现出一定的性能问题,对生产的影响也会越来越大,这些不恰当的sql语句就会成为整个系统性能的瓶颈,为了追求系统的极致性能,必须要对它们进行优化。
这篇文章开始后面的几篇文章将结合自己平时工作和学习中的知识记录下,当面对一个有sql性能问题的数据库时,我们应该从何处入手来进行系统的分析,使得能够尽快定位问题、解决问题。
2 正文
这篇文章主要讲两个命令,它们分别是:
show[session|global] status 复制代码
和
show global status like 'Innodb_rows_%' 复制代码
在MySQL客户端连接成功后,我们可以通过
show[session|global] status 复制代码
命令可以提供服务器状态信息。
该命令可以根据需要使用 参数session或者global来显示session级(当前连接)的统计结果和global级(自数据库上次启动至今)的统计结果。如果不写,则默认使用session参数。比如下面的语句即可以查看当前连接的那些sql语句执行的频率比较高,比如查询、更新、插入还是删除的哪种操作较多。一般来说主要是以查询为主。
show status like 'Com_______' 复制代码
因为我这本地数据库,所以现在并没有sql语句的执行操作:
show global status like 'Com_______' 复制代码
上面的命令即可查看全局的(自数据库上次启动至今)的统计结果。可以看到查询操作一共执行了10次。
并且在执行完操作之后,我们可以看到操作统计数据也会发生变化:
在执行完update语句之后:
UPDATE jdbc.`user` set username='孙悟空' where id=1 复制代码
再执行上述命令可以发现update影响的数据行数发生了变化:
对于Innodb数据库引擎的执行命令如下:
show global status like 'Innodb_rows_%' 复制代码
Com_%表示的是%语句执行的次数,并且对于所有的存储引擎的表操作都会进行统计。
Innodb_%则只针对Innodb存储引擎的数据库,并且统计的算法与其他的数据库也有区别。
在上面查询结果中有几个很重要的参数,它们分别是:Insert、delete、update、select(innodb对应的则是read),它们分别对应数据库操作的增删改查。
3 总结
通过上述的命令我们可以发现数据库主要以何种操作为主,那么可以为后续的sql优化提供一些借鉴性的意见。
后面将会继续分享关于sql优化的其他方法和步骤。