美团面试题:慢SQL有遇到过吗?是怎么解决的?

美团面试题:慢SQL有遇到过吗?是怎么解决的?,第1张

大家好,我是田维常,可以叫我老田,也可以叫我田哥

。2017年的时候,我刚去上海,朋友内推我去美团面试,之前我也写过一个一篇文章,也是在美团面试中遇到的:

美团面试题:String s = new String("111")会创建几个对象?

关于慢SQL,我和面试官扯了很久,面试官也是很谦虚的,总是点头,自己以为回答的还可以。最后的最后,还是说了“ 你先回去等通知吧! ”。

所以,我决定把这个慢SQL技术点,好好和你分享分享。希望你下次在遇到类似的面试,能顺顺利利轻轻松松的斩获自己想要的offer。

MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录MySQL中查询时间超过(大于)设置阈值(long_query_time)的语句,记录到慢查询日志中。

其中,long_query_time的默认值是10,单位是秒,也就是说默认情况下,你的SQL查询时间超过10秒就算慢SQL了。

在MySQL中,慢SQL日志默认是未开启的,也就说就算出现了慢SQL,也不会告诉你的,如果需要知道哪些SQL是慢SQL,需要我们手动开启慢SQL日志的。

关于慢SQL是否开启,我们可以通过下面这个命令来查看:

在这里插入图片描述

通过命令,我们就可以看到slow_query_log项为OFF,说明我们的慢SQL日志并未开启。另外我们也可以看到我们慢SQL日志存放于哪个目录下和日志文件名。

下面我们来开启慢SQL日志,执行下面的命令:

这里需要注意,这里开启的是我们当前的数据库,并且,我们重启数据库后会失效的。

开启慢SQL日志后,再次查看:

slow_query_log项已经变成ON,说明开启成功。

上面说过慢SQL默认时间是10秒,我们通过下面的命令就可以看到我们慢SQL的默认时间:

在这里插入图片描述

我们总不能一直使用这个默认值,可能很多业务需要时间更短或更长,所以此时,我们就需要对默认时间进行修改,修改命令如下:

修改完了,我们再来看看是否已经改成了3秒。

这里需要注意:想要永久的生效,还需要修改MySQL下面的配置文件my.cnf 文件。

注意:不同 *** 作系统,配置有些区别。

Linux *** 作系统中

Windows *** 作系统中

执行一条慢SQL,因为我们前面已经设置好了慢SQL时间为3秒,所以,我们只要执行一条SQL时间超过3秒即可。

该SQL耗时4.024秒,下面我们就来查看慢SQL出现了多少条。

使用命令:

找到慢SQL日志文件,打开后就会出现类似下面这样的语句;

简单说明:

切记

通常我们定位慢SQL有两种方式:

第一种:定位慢查询 SQL 可以通过两个表象进行判断

第二种:根据不同的数据库使用不同的方式获取问题 SQL

如果开启了慢SQL日志后,可能会有大量的慢SQL日志产生,此时再用肉眼看,那是不太现实的,所以大佬们就给我搞了个工具: mysqldumpslow 。

mysqldumpslow 能将相同的慢SQL归类,并统计出相同的SQL执行的次数,每次执行耗时多久、总耗时,每次返回的行数、总行数,以及客户端连接信息等。

通过命令

可以看到相关参数的说明:

比较常用的参数有这么几个:

mysqldumpslow 常用的使用方式如下:

如上一条命令,应该是mysqldumpslow最简单的一种形式,其中-s参数是以什么方式排序的意思,c指代的是以总数从大到小的方式排序。-s的常用子参数有:c: 相同查询以查询条数和从大到小排序。t: 以查询总时间的方式从大到小排序。l: 以查询锁的总时间的方式从大到小排序。at: 以查询平均时间的方式从大到小排序。al: 以查询锁平均时间的方式从大到小排序。

同样的,还可以增加其他参数,实际使用的时候,按照自己的情况来。

其他常用方式:

接下,我们来个实际 *** 作。

这其中的 SQL 语句因为涉及某些信息,所以我都用*号将主体替换了,如果希望得到具体的值,使用-a参数。

使用 mysqldumpslow 查询出来的摘要信息,包含了这些内容:

Count : 464 :表示慢查询日志总共记录到这条sql语句执行的次数;

Time=18.35s (8515s) :18.35s表示平均执行时间(-s at),8515s表示总的执行时间(-s t);

Lock=0.01s (3s) :与上面的Time相同,第一个表示平均锁定时间(-s al),括号内的表示总的锁定时间(-s l)(也有另一种说法,说是表示的等待锁释放的时间);

Rows=90884.0 (42170176) : 第一个值表示扫描的平均行数(-s ar),括号内的值表示扫描的总行数(-s r)。

是不是

so easy!!!!

大数据开发工程师课程体系——Java部分。

第一阶段:静态网页基础

1、学习Web标准化网页制作,必备的HTML标记和属性

2、学习HTML表格、表单的设计与制作

3、学习CSS、丰富HTML网页的样式

4、通过CSS布局和定位的学习、让HTML页面布局更加美观

5、复习所有知识、完成项目布置

第二阶段:JavaSE+JavaWeb

1、掌握JAVASE基础语法

2、掌握JAVASE面向对象使用

3、掌握JAVASEAPI常见 *** 作类使用并灵活应用

4、熟练掌握MYSQL数据库的基本 *** 作,SQL语句

5、熟练使用JDBC完成数据库的数据 *** 作

6、掌握线程,网络编程,反射基本原理以及使用

7、项目实战 + 扩充知识:人事管理系统

第三阶段:前端UI框架

1、JAVASCRIPT

2、掌握Jquery基本 *** 作和使用

3、掌握注解基本概念和使用

4、掌握版本控制工具使用

5、掌握easyui基本使用

6、项目实战+扩充知识:项目案例实战

POI基本使用和通过注解封装Excel、druid连接池数据库监听,日志Log4j/Slf4j

第四阶段:企业级开发框架

1、熟练掌握spring、spring mvc、mybatis/

2、熟悉struts2

3、熟悉Shiro、redis等

4、项目实战:内容管理系统系统、项目管理平台流程引擎activity,爬虫技术nutch,lucene,webService CXF、Tomcat集群 热备 MySQL读写分离

以上Java课程共计384课时,合计48天!

大数据开发工程师课程体系——大数据部分

第五阶段:大数据前传

大数据前篇、大数据课程体系、计划介绍、大数据环境准备&搭建

第六阶段:CentOS课程体系

CentOS介绍与安装部署、CentOS常用管理命令解析、CentOS常用Shell编程命令、CentOS阶段作业与实战训练

第七阶段:Maven课程体系

Maven初识:安装部署基础概念、Maven精讲:依赖聚合与继承、Maven私服:搭建管理与应用、Maven应用:案列分析、Maven阶段作业与实战训练

第八阶段:HDFS课程体系

Hdfs入门:为什么要HDFS与概念、Hdfs深入剖析:内部结构与读写原理、Hdfs深入剖析:故障读写容错与备份机制、HdfsHA高可用与Federation联邦、Hdfs访问API接口详解、HDFS实战训练、HDFS阶段作业与实战训练

第九阶段:MapReduce课程体系

MapReduce深入剖析:执行过程详解、MapReduce深入剖析:MR原理解析、MapReduce深入剖析:分片混洗详解、MapReduce编程基础、MapReduce编程进阶、MapReduc阶段作业与实战训练

第十阶段:Yarn课程体系

Yarn原理介绍:框架组件流程调度

第十一阶段:Hbase课程体系

Yarn原理介绍:框架组件流程调度、HBase入门:模型坐标结构访问场景、HBase深入剖析:合并分裂数据定位、Hbase访问Shell接口、Hbase访问API接口、HbaseRowkey设计、Hbase实战训练

第十二阶段:MongoDB课程体系

MongoDB精讲:原理概念模型场景、MongoDB精讲:安全与用户管理、MongoDB实战训练、MongoDB阶段作业与实战训练

第十三阶段:Redis课程体系

Redis快速入门、Redis配置解析、Redis持久化RDB与AOF、Redis *** 作解析、Redis分页与排序、Redis阶段作业与实战训练

第十四阶段:Scala课程体系

Scala入门:介绍环境搭建第1个Scala程序、Scala流程控制、异常处理、Scala数据类型、运算符、Scala函数基础、Scala常规函数、Scala集合类、Scala类、Scala对象、Scala特征、Scala模式匹配、Scala阶段作业与实战训练

第十五阶段:Kafka课程体系

Kafka初窥门径:主题分区读写原理分布式、Kafka生产&消费API、Kafka阶段作业与实战训练

第十六阶段:Spark课程体系

Spark快速入门、Spark编程模型、Spark深入剖析、Spark深入剖析、SparkSQL简介、SparkSQL程序开发光速入门、SparkSQL程序开发数据源、SparkSQL程序开DataFrame、SparkSQL程序开发DataSet、SparkSQL程序开发数据类型、SparkStreaming入门、SparkStreaming程序开发如何开始、SparkStreaming程序开发DStream的输入源、SparkStreaming程序开发Dstream的 *** 作、SparkStreaming程序开发程序开发--性能优化、SparkStreaming程序开发容错容灾、SparkMllib 解析与实战、SparkGraphX 解析与实战

第十七阶段:Hive课程提体系

体系结构机制场景、HiveDDL *** 作、HiveDML *** 作、HiveDQL *** 作、Hive阶段作业与实战训练

第十八阶段:企业级项目实战

1、基于美团网的大型离线电商数据分析平台

2、移动基站信号监测大数据

3、大规模设备运维大数据分析挖掘平台

4、基 于互联网海量数据的舆情大数据平台项目

大数据部分共计学习656课时,合计82天!

0基础学员估计学习1040课时,150天!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7586751.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-07
下一篇 2023-04-07

发表评论

登录后才能评论

评论列表(0条)

保存