慢查询日志 开启撒网模式 开启了MySQL慢查询日志之后,MySQL会自动将执行时间超过指定秒数的SQL统统记录下来,这对于搜罗线上慢SQL有很大的帮助。...long%' long_query_time:达到多少秒的sql就记录日志 客户端可以用set设置变量的方式让慢查询开启,但是个人不推荐,因为真实操作起来会有一些问题,比如说,重启MySQL后就失效了...不过它是有前提条件的,条件是没有任何where条件的count(*)才非常快,因为此时无须实际的去计算表的行数,mysql可以利用存储引擎的特性直接获得这个值,如果mysql知道某列不可能有null值,...当统计带有where条件的查询,那么mysql的count()和其他存储引擎就没有什么不同了。...这时MySQL需要查询1020条记录然后只返回最后20条,前面的1000条都将被抛弃,这样的代价非常高。如果所有页面的访问频率都相同,那么这样的查询平均需要访问半个表的数据。
一、慢查询日志 开启撒网模式 开启了MySQL慢查询日志之后,MySQL会自动将执行时间超过指定秒数的SQL统统记录下来,这对于搜罗线上慢SQL有很大的帮助。...long_query_time:达到多少秒的sql就记录日志 客户端可以用set设置变量的方式让慢查询开启,但是个人不推荐,因为真实操作起来会有一些问题,比如说,重启MySQL后就失效了,或者是开启了慢查询...possible_keys:表示查询时可能使用的索引 key:表示实际使用的索引 key_len:使用到索引字段的长度 rows:扫描数量 Extra:执行情况的说明和描述,包含不适合在其他列中显示但是对执行计划非常重要的额外信息...不过它是有前提条件的,条件是没有任何where条件的count(*)才非常快,因为此时无须实际的去计算表的行数,mysql可以利用存储引擎的特性直接获得这个值,如果mysql知道某列不可能有null值,...这时MySQL需要查询1020条记录然后只返回最后20条,前面的1000条都将被抛弃,这样的代价非常高。如果所有页面的访问频率都相同,那么这样的查询平均需要访问半个表的数据。
事务中包含外部调用 外部调用包括对外部系统的调用和基础组件的调用。它具有返回时间不确定性的特征,必然会造成大事务。...超时时间和重试次数不合理 对外部系统和缓存、消息队列等基础组件的依赖,如果超时时间设置过长、重试过多,系统长时间不返回,可能会导致连接池被打满,系统死掉;如果超时时间设置过短,499错误会增多,系统的可用性会降低...这些内部和外部的巨量调用,如果不加以保护,往往会扩散到后台服务,最终可能引起后台基础服务宕机。下图是对无限流影响的问题树分析: ? 慢查询问题 慢查询会降低应用的响应性能和并发性能。...解决慢查询问题 将查询分成实时查询、近实时查询和离线查询。实时查询可穿透数据库,其它的不走数据库,可以用Elasticsearch来实现一个查询中心,处理近实时查询和离线查询。 读写分离。...索引不够查询会慢。 像核心交易这种数据库读写TPS差不多的,一般建议索引不超过4个。如果这还不能解决问题,那很可能需要调整表结构设计了。 对慢查询对应监控报警。
分析问题 1>事务中包含外部调用 外部调用包括对外部系统的调用和基础组件的调用。它具有返回时间不确定性,必然会造成大事务。...2>超时时间和重试次数不合理 对外部系统和缓存、MQ等基础组件的依赖,如果超时时间设置过长、重试过多,系统长时间不返回,可能会导致连接池被打满,系统死掉;如果超时时间设置过短,499错误会增多...这些内部和外部的巨量调用,如果不加以保护,往往会扩散到后台服务,最终可能引起后台基础服务宕机。 5>慢查询问题 慢查询会降低应用的响应性能和并发性能。...5>解决慢查询问题 ☆ 将查询分成实时查询、近实时查询和离线查询。实时查询可穿透数据库,其他的不走数据库,可以用ES来实现一个查询中心,处理近实时查询和离线查询。 ☆ 读写分离。...索引不够查询会慢。 像核心交易这种数据库读写TPS差不多的,一般建议索引不超过4个。如果这还不能解决问题,那很可能需要调整表结构设计了。 ☆ 对慢查询对应监控报警。
三、查询截取分析 3.1、查询分析方法 观察,至少跑1天,看看生产的慢SQL情况。 开启慢查询日志,设置阈值,比如超过5秒钟的就是慢SQL,并将它抓取出来。...FROM table WHERE EXISTS (subquery) 该语法可以理解为:将主查询的数据,放到子查询中做条件验证,根据验证结果(TRUE或FALSE)来决定主查询的数据结果是否得以保留。...当B表的数据集必须小于A表的数据集时,用in优于exists。 当A表的数据集系小于表的数据集时,用exists优于in。...3.3、提高Order By的速度 Order by时select *是一个大忌,只Query需要的字段,这点非常重要。...这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的。
可以在任何可以使用表达式的地方使用子查询。许多子查询返回单个列值,因为它们与比较运算符(=,!=,,> =)或表达式结合使用。当子查询不用作表达式或使用比较运算符时,它可以返回多个值。...由于子查询包含在Transact-SQL语句中,因此子查询通常称为内部查询。而包含子查询的Transact-SQL语句被称为外部查询。...当独立于外部查询运行时,它将返回结果。 问题2: 什么时候子查询只需要一个列和值才能返回(选择所有适用的)?...当子查询用于FROM子句时 当IN子句中使用子查询时 当表达式中使用子查询时 当子查询与比较运算符一起使用时 问题3: 在WHERE子句中使用一个子查询的Transact-SQL语句总是比不包含子查询(...子查询可以独立于外部查询运行,并返回结果。它不需要来自外部查询的任何列,如果它有来自外部查询的列,它将被称为相关子查询。 问题2: 正确的答案是c和d。
这会给未缓存数据的本来就慢的路径增加延迟。有人可能会声称,当整个数据集适合缓存时,额外的延迟不会发挥作用。...外部缓存破坏数据库缓存 现代数据库具有嵌入式缓存和管理它们的复杂策略。当您在数据库前面放置缓存时,大多数读取请求只会到达外部缓存,而数据库不会将这些对象保存在其内存中。结果,数据库缓存变得无效。...当请求最终到达数据库时,其缓存将变冷,并且响应将主要来自磁盘。结果,从缓存到数据库再返回到应用程序的往返行程可能会增加延迟。 外部缓存可能会增加安全风险 外部缓存为您的基础设施增加了全新的攻击面。...但是,外部缓存(遵循直读策略)会将结果集像其他任何结果集一样对待,并尝试缓存结果。...结束语 尽管外部缓存是减少延迟(例如提供不需要任何持久性级别的静态内容和个性化数据)的绝佳伴侣,但当它们放置在数据库前面时,通常会带来比好处更多的问题。
explain关键字 explain关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作、以及MySQL成功返回结果集需要执行的行数。...UNION UNION 中的第二个或随后的 select查询,不依赖于外部查询的结果集。 DEPENDENT UNION UNION中的第二个或随后的 select查询,依 赖于外部查询的结果集。...SUBQUERY 子查询中的第一个select查询,不依赖于外部查询的结果集。 DEPENDENT SUBQUERY 子查询中的第一个select查询,依赖于外部查询的结果集。...const const用于用常数值比较PRIMARY KEY时。当查询的表仅有一行时,使用System。 eq_ref const用于用常数值比较PRIMARY KEY时。...当查询的表仅有一行时,使用System。 ref 连接不能基于关键字选择单个行,可能查找到多个符合条件的行。叫做ref是因为索引要跟某个参考值相比较。
7、当数据量比较大的时候,不推荐使用alter table。因为alter table 会创建一个新结构的表,并把老表中的数据插入到新表中。 8、不推荐使用Enum。...select id,name from lx_com limit 5000000,10; 这是因为limit offset,N, 当offset非常大时, 效率极低, 可以先在子查询语句里利用覆盖索引扫描...可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log long_query_time :慢查询阈值,当查询时间多于设定的阈值时,记录日志。...依赖外部查询结果集 select * from test.tabname where id in(select id from test.tabname2 where name='love'); 以上语句有个错误的理解是认为按照下面两个结果执行...eq_ref:最多只会有一条匹配结果,一般是通过主键或是唯一索引来访问。一般会出现在连接查询的语句中。通过索引列,直接引用某1行数据 ref: 它返回所有匹配某个单个值的行。
缓存失效情况 当查询语句中有一些不确定的数据时,则不会被缓存。...如包含函数 NOW() ,CURRENT_DATE() 等类似的函数,或者用户自定义的函数,存储函数,用户变量等都不会被缓存; 当查询的结果大于query_cache_limit设置的值时,结果不会被缓存...SIMPLE: 简单的select查询,查询中不包含子查询或者UNION; PRIMARY: 查询中若包含任何复杂的子部分,最外层查询则被标记为primary; SUBQUERY: 在SELECT或者...结果返回 将SQL查询的数据返回给客户端,若需要做缓存,则将结果插入缓存; MySQL返回结果给客户端是一个增量、逐步返回的过程,目的是为了减轻服务端的压力,服务端直接将结果返回,不需要储存...慢查询日志 MySQL提供的SQL监控的一种日志,记录在MySQL中SQL执行响应的时间的语句,SQL响应时间超过long_query_time的时间就回被记录到慢查询日志中;当SQL语句执行响应时间超过给定的
当MySQL接收到客户端的查询SQL之后,仅仅只需要对其进行相应的权限验证之后,就会通过Query Cache来查找结果,甚至都不需要经过Optimizer模块进行执行计划的分析优化,更不需要发生任何存储引擎的交互...完成查询优化后,查询执行引擎会按照生成的执行计划调用存储引擎提供的接口执行SQL查询并将结果返回给客户端。在MySQL8以下的版本,如果设置了查询缓存,这时会将查询结果进行缓存,再返回给客户端。...因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。...,则提示锁冲突,不返回结果 select * from t for update skip locked 查询返回查询结果,但忽略有行锁的记录 091说一下MySQL死锁的原因和处理方法 事务 a...Ø 默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数。 Ø 当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。
MySQL中无法利用索引完成的排序操作称为“文件排序” ,其实不一定是文件排序,内部使用的是快排 2、using temporary: 使用了临时表保存中间结果,MySQL在对查询结果排序时使用临时表...7慢查询日志 有时候如果线上请求超时,应该去关注下慢查询日志,慢查询的分析很简单,先找到慢查询日志文件的位置,然后利用mysqldumpslow去分析。...查询慢查询日志信息可以直接通过执行sql命令查看相关变量,常用的sql如下: -- 查看慢查询配置 -- slow_query_log 慢查询日志是否开启 -- slow_query_log_file...的值是记录的慢查询日志到文件中 -- long_query_time 指定了慢查询的阈值 -- log_queries_not_using_indexes 是否记录所有没有利用索引的查询 SHOW VARIABLES...另外我建议还是采用redis缓存来处理这种业务 超大分页: 在慢查询日志中发现了一些超大分页的慢查询如limit 40000,1000,因为mysql的分页是在server层做的,可以采用延迟关联在减少回表
MySQL中无法利用索引完成的排序操作称为“文件排序” ,其实不一定是文件排序,内部使用的是快排 2、using temporary: 使用了临时表保存中间结果,MySQL在对查询结果排序时使用临时表...有时候如果线上请求超时,应该去关注下慢查询日志,慢查询的分析很简单,先找到慢查询日志文件的位置,然后利用mysqldumpslow去分析。...查询慢查询日志信息可以直接通过执行sql命令查看相关变量,常用的sql如下: -- 查看慢查询配置 -- slow_query_log 慢查询日志是否开启 -- slow_query_log_file...的值是记录的慢查询日志到文件中 -- long_query_time 指定了慢查询的阈值 -- log_queries_not_using_indexes 是否记录所有没有利用索引的查询 SHOW VARIABLES...LIKE '%quer%'; -- 查看慢查询是日志还是表的形式 SHOW VARIABLES LIKE 'log_output' -- 查看慢查询的数量 mysqldumpslow的工具十分简单
MySQL中无法利用索引完成的排序操作称为“文件排序” ,其实不一定是文件排序,内部使用的是快排 2. using temporary: 使用了临时表保存中间结果,MySQL在对查询结果排序时使用临时表...---- 有时候如果线上请求超时,应该去关注下慢查询日志,慢查询的分析很简单,先找到慢查询日志文件的位置,然后利用mysqldumpslow去分析。...查询慢查询日志信息可以直接通过执行sql命令查看相关变量,常用的sql如下: -- 查看慢查询配置 -- slow_query_log 慢查询日志是否开启 -- slow_query_log_file...的值是记录的慢查询日志到文件中 -- long_query_time 指定了慢查询的阈值 -- log_queries_not_using_indexes 是否记录所有没有利用索引的查询 SHOW VARIABLES...LIKE '%quer%'; -- 查看慢查询是日志还是表的形式 SHOW VARIABLES LIKE 'log_output' -- 查看慢查询的数量 SHOW GLOBAL STATUS
在工作中可能会遇到某个新功能在测试时需要很久才返回结果,这时就应该分析是不是慢查询导致的。如果确实有慢查询,又应该怎么去分析 SQL 执行效率呢?...这一篇文章我们就来学习怎么找到慢查询和怎么分析 SQL 执行效率。 1 定位慢 SQL 当我们实际工作中,碰到某个功能或者某个接口需要很久才能返回结果,我们就应该去确定是不是慢查询导致的。...1.2 通过 show processlist; 有时慢查询正在执行,已经导致数据库负载偏高了,而由于慢查询还没执行完,因此慢查询日志还看不到任何语句。...仅当使用 partition 关键字时才显示该列。对于非分区表,该值为 NULL。...基于主键或唯一索引查询,最多返回一条结果 eq_ref 表连接时基于主键或非 NULL 的唯一索引完成扫描 ref 基于普通索引的等值查询,或者表间等值连接 fulltext
在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定查询表的顺序,是否利用索引等,最后生成相应的执行操作。如果是select语句,服务器还会查询内部的缓存。...如果建立索引,不但不会提高查询效率,反而会严重降低更新速度。 (5)当唯一性是某种数据本身的特征时,指定唯一索引。使用唯一索引能够确保定义的列的数据完整性,提高查询速度。 ...、联合查询、子查询等的复杂查询 ① simple 简单的 select 查询,查询中不包含子查询或者UNION ② primary 查询中若包含任何复杂的子部分,最外层查询则被标记为...② Using temporary 使了用临时表保存中间结果,MySQL在对查询结果排序时使用临时表。...默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数。 当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。
1.2 事务中不包含外部调用 外部调用包括对外部系统的调用和基础组件的调用。外部调用具有返回时间不确定性的特征,如果包含在了事务里必然会造成大事务。...1.4 解决慢查询 慢查询会降低应用的响应性能和并发性能。在业务量增加的情况下造成数据库所在的服务器CPU利用率急剧攀升,严重的会导致数据库不响应,只能重启解决。...关于慢查询,可以参考我们技术博客之前的文章《MySQL索引原理及慢查询优化》。 解决方法: 将查询分成实时查询、近实时查询和离线查询。...索引不够查询会慢。DBA建议一个数据表的索引数不超过4个。 不允许出现大表。MySQL数据库的一张数据表当数据量达到千万级,效率开始急剧下降。...④ 外部调用可能需要Mock。实现上可以采用一个Mock服务随机产生和线上外部调用返回时间分布的时延。 压测工具上,核心交易这边使用美团点评开发的pTest。 6.
如果查询条件中不能使用索引,mysql为了实现序列化的隔离级别,会对全表加锁,任何写操作不能进行。当并发写操作多,事务时间长时,会出现较多锁等待及等待超时事务。...4.group by,order by 本质是对where查询出的结果集进行排序操作,当待排序列匹配 where 中索引顺序时才可避免排序,直接通过索引即可返回有序结果集,例如我们需要将查询结果按照评分排名...当查询结果比较大时,可以考虑这样设计 5.limit 分页查询 .limit 使用时必须排序否则可能出现不同页返回重复数据的风险。...如果没有任何索引可以使用,就会显示成null,这项内容对优化索引时的调整非常重要。 Key:MySQL Query Optimizer 从 possible_keys 中所选择使用的索引。...Distinct:查找distinct 值,当mysql找到了第一条匹配的结果时,将停止该值的查询,转为后面其他值查询。
协调节点将请求转发至对应一个或多个数据分片的主或者从分片进行查询,各个分片查询结果最后在协调节点汇聚,返回最终结果给客户端。 ES 的分布式查询主要有2个阶段,Query阶段跟Fetch阶段。...分析:如果我们只需要返回其中包含的一小部分字段时,读取并解压这个巨大的_source字段可能会开销很高。 (2) 当字段超较多时,达到 40 以上时,使用 _source 变为最优。...所以聚合的速度通常要比普通查询慢很多。ES 的高基数聚合查询非常消耗内存,超过百万基数的聚合很容易导致节点内存不够用以至OOM,腾讯云ES 在这块的可用性方面也做了非常多的工作。...滚动翻页(Search Scroll):原理上是对某次查询生成一个游标 scroll_id , 后续的查询只需要根据这个游标去取数据,直到结果集中返回的 hits 字段为空,就表示遍历结束。...5.12 读懂监控,跟查询慢日志 当我们需要针对性的对业务的查询场景进行分析,定位性能瓶颈时,我们首先需要读懂监控,跟慢日志。
1.2 事务中不包含外部调用 外部调用包括对外部系统的调用和基础组件的调用。外部调用具有返回时间不确定性的特征,如果包含在了事务里必然会造成大事务。...1.4 解决慢查询 慢查询会降低应用的响应性能和并发性能。在业务量增加的情况下造成数据库所在的服务器CPU利用率急剧攀升,严重的会导致数据库不响应,只能重启解决。...关于慢查询,可以参考我们技术博客之前的文章《MySQL索引原理及慢查询优化》。 ? 解决方法: 将查询分成实时查询、近实时查询和离线查询。...索引不够查询会慢。DBA建议一个数据表的索引数不超过4个。 不允许出现大表。MySQL数据库的一张数据表当数据量达到千万级,效率开始急剧下降。...④ 外部调用可能需要Mock。实现上可以采用一个Mock服务随机产生和线上外部调用返回时间分布的时延。 压测工具上,核心交易这边使用美团点评开发的pTest。 ? 6.
领取专属 10元无门槛券
手把手带您无忧上云