SQL查询是一个动态的过程,从页的加载的角度来看,我们可以得到以下两点结论:4.定位执行慢的SQL:慢查询日志
1.位置决定服从。如果页就在数据库缓冲池中,那么服从是最高的,否则还需要从内存或者磁盘中进行读取,当然针对单个页的读取来说,如果页存在于内存中,会比在磁盘中读取服从高很多。
2.批量决定服从。如果我们从磁盘中对单一页进行随机读,那么服从是很低的(差不多10ms),而接纳序次读取的方式,批量对页进行读取,平均一页的读取服从就会提升很多,甚至要快于单个页面在内存中的随机读取。
所以说,碰到I/O并不消担心,方法找对了,服从还是很高的。我们首先要考虑数据存放的位置,如果是经常使用的数据就要尽量放到缓冲池中,其次应该充实使用磁盘的吞吐能力,一次性批量读取数据,这样单个页的读取服从也就得到了提升。
注意,此结果中name的值,是不区分大小写的。是因为,在创建表示未设置Collate也即校对规则。
使用的是当前数据库的校对规则,而在前一章,创建数据库时,也为指定校对规则,所以在mysql8.0.25默认的校对规则是utf8mb4_0900_ai_ci 是不区分大小写的
不消记,知道有这个东西即可。从上面的结果可以看出来,查询门生编号为“3455655”的门生信息花费时间为0.85秒。查询门生姓名为“oQmLUr”的门生信息花费时间为0.92秒。已经到达了秒的数量级,说明现在查询服从是比较低的,下面的小节我们分析一下原因。
可以使用show create 语法查看表或数据库使用的校对规则。
还有个小细节,在使用show create 语法查看数据库时,如果数据库名中有-的需要加``才能执行乐成
增补说明4.5 慢查询日志分析工具:mysqldumpslow
除了上述变量,控制慢查询日志的还有一个体系变量:min_examined_row_limit。这个变量的意思是,查询扫描过的最少记载数。这个变量和查询的执行时间,共同构成了判别一个查询是否是慢查询的条件。如果查询扫描过的记载数大于等于这个变量的值,并且查询执行时间凌驾long_query_time的值,那么,这个查询就被记载到慢查询日志中;反之,则不被记载到慢查询日志中。这个值默认是0。与long_query_time=10合在一起,表示只要查询的执行时间凌驾10秒钟,哪怕一条记载也没有扫描过,都要被记载到慢查询日志中。你也可以根据需要,通过修改"my.ini"文件,来修改查询时长,或者通过set指令,用SQL语句修改"min_examined_row_limit"的值。复制代码
- show status like 'slow_queries';
提示5.查看SQL执行成本:SHOW PROFILE
慢查询日志都是使用mysqladmin flush-logs命令来删除重修的。使用时一定要注意,一旦执行了这个命令,慢查询日志都只存在新的日志文件中,如果需要旧的查询日志,就要先备份。
rows和filter都是我们前边介绍执行计划的输出列,在JSON格式的执行计划中,rows相当于rows_examined_per_scan,filtered名称不变。
风险提示只是为了记载自己的学习历程,且本人水平有限,不对之处,请指正。
通过sys库去查询时,MySQL会斲丧大量资源去网络相干信息,严重的可能会导致业务哀求被阻塞,从而引起故障。发起生产上不要频繁的去查询sys或者performance_schema、information_schema来完成监控、巡检等工作。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |