精华内容
下载资源
问答
  • MySQL如何快速定位慢查询的语句

    千次阅读 2014-09-15 21:47:29
    ①首先了解MySQL数据库的运行状态查询情况  使用命令show [session|gobal] status  例子:show status like 'uptime'; 【查询当前使用MySQL数据库的时间长度】  show status like 'com_select'; 【查询当前...
    步骤一:首先了解MySQL数据库的运行状态查询情况
            使用命令show [session|gobal] status
          例子:show status like 'uptime';    【查询当前使用MySQL数据库的时间长度】
            show status like 'com_select';    【查询当前使用select语句的次数】
            show status like 'com_delete';    【查询当前使用delete语句的次数】
            show status like 'com_insert';    【查询当前使用insert语句的次数】
            show status like 'com_update';    【查询当前使用update语句的次数】
            show status like 'connections';    【查询当前链接到本数据库的连接次数】
            show status like 'slow_quaries';【查询慢查询的次数】
        注意:默认使用session,即当前会话;也可指定global,即从MySQL启动开始到当前为止的全部过程情况。
    步骤二:然后设置慢查询的时间(默认为10秒)
            说明:慢查询时间是指执行语句的时间超过该指定的慢查询时间时,该语句则被划分为慢查询语句。
            show variables like 'long_query_time';    【查询慢查询的时间】
            set long_query_time=1;    【修改慢查询时间为1秒钟】

            注意:一旦退出并重新登录到MySQL时,则该慢查询的时间会恢复到默认的10s.
    步骤三:把执行时间超过1秒的语句统计到日志文件
            说明:默认情况下,MySQL不会记录慢查询,需要在启动MySQL时指定日志文件才可以。
            操作步骤:
                (1)关闭MySQL,再重启;(进入系统服务停止MySQL进程)
                (2)进入用命令控制台,先切换到bin所在的目录(例如cd f:\MySQL5.5),
                     然后执行bin\mysqld.exe --safe-mode --slow-query-log  【MySQL5.5可在my.ini指定,此时默认的日志文件
                     所在处可查看my.ini文件中的datadir中的值,一般是MySQL安装主目录\data下】
                     或者bin\mysqld.exe -log-slow-queries=f:/aaa.log  【低版本MySQL5.0可在my.ini指定】
                     命令。
                    (执行命令后在data目录下得到.log文件[记录慢查询的语句和运行情况]和.pid文件[指明进程ID号])
                (3)重新登录到MysQL,并重新设置慢查询时间为1秒,然后执行各个SQL语句。

                    (一旦语句的执行时间超过1秒,则数据库管理系统会自动把该语句及其相关信息记录到日志文件中汇总)

    注意事项:my.ini文件在MySQL的安装主目录下可找到,在该文件中的datadir的路径值不要随意修改。

    展开全文
  • 面试官:如何快速定位慢SQL

    千次阅读 2019-02-23 12:35:07
    在项目中我们会经常遇到慢查询,当我们遇到慢查询的时候一般都要开启慢查询日志,并且分析慢查询日志,找到慢sql,然后用explain来分析 系统变量 MySQL和慢查询相关的系统变量如下 参数 含义 slow_query_log...

    在这里插入图片描述

    开启慢查询日志

    在项目中我们会经常遇到慢查询,当我们遇到慢查询的时候一般都要开启慢查询日志,并且分析慢查询日志,找到慢sql,然后用explain来分析

    系统变量

    MySQL和慢查询相关的系统变量如下

    参数含义
    slow_query_log是否启用慢查询日志, ON为启用,OFF为没有启用,默认为OFF
    log_output日志输出位置,默认为FILE,即保存为文件,若设置为TABLE,则将日志记录到mysql.show_log表中,支持设置多种格式
    slow_query_log_file指定慢查询日志文件的路径和名字
    long_query_time执行时间超过该值才记录到慢查询日志,单位为秒,默认为10

    执行如下语句看是否启用慢查询日志,ON为启用,OFF为没有启用

    show variables like "%slow_query_log%"
    

    在这里插入图片描述
    可以看到我的没有启用,可以通过如下两种方式开启慢查询

    修改配置文件

    修改配置文件my.ini,在[mysqld]段落中加入如下参数

    [mysqld]
    log_output='FILE,TABLE'
    slow_query_log='ON'
    long_query_time=0.001
    

    需要重启 MySQL 才可以生效,命令为 service mysqld restart

    设置全局变量

    我在命令行中执行如下2句打开慢查询日志,设置超时时间为0.001s,并且将日志记录到文件以及mysql.slow_log表中

    set global slow_query_log = on;
    set global log_output = 'FILE,TABLE';
    set global long_query_time = 0.001;
    

    想要永久生效得到配置文件中配置,否则数据库重启后,这些配置失效

    分析慢查询日志

    因为mysql慢查询日志相当于是一个流水账,并没有汇总统计的功能,所以我们需要用一些工具来分析一下

    mysqldumpslow

    mysql内置了mysqldumpslow这个工具来帮我们分析慢查询日志。
    在这里插入图片描述

    常见用法

    # 取出使用最多的10条慢查询
    mysqldumpslow -s c -t 10 /var/run/mysqld/mysqld-slow.log
    
    # 取出查询时间最慢的3条慢查询
    mysqldumpslow -s t -t 3 /var/run/mysqld/mysqld-slow.log 
    
    # 得到按照时间排序的前10条里面含有左连接的查询语句
    mysqldumpslow -s t -t 10 -g “left join” /database/mysql/slow-log 
    

    pt-query-digest

    pt-query-digest是我用的最多的一个工具,功能非常强大,可以分析binlog、General log、slowlog,也可以通过show processlist或者通过tcpdump抓取的MySQL协议数据来进行分析。pt-query-digest是一个perl脚本,只需下载并赋权即可执行

    下载和赋权

    wget www.percona.com/get/pt-query-digest
    chmod u+x pt-query-digest
    ln -s /opt/soft/pt-query-digest /usr/bin/pt-query-digest
    

    用法介绍

    // 查看具体使用方法 
    pt-query-digest --help
    // 使用格式
    pt-query-digest [OPTIONS] [FILES] [DSN]
    

    常用OPTIONS

    --create-review-table  当使用--review参数把分析结果输出到表中时,如果没有表就自动创建。
    --create-history-table  当使用--history参数把分析结果输出到表中时,如果没有表就自动创建。
    --filter  对输入的慢查询按指定的字符串进行匹配过滤后再进行分析
    --limit限制输出结果百分比或数量,默认值是20,即将最慢的20条语句输出,如果是50%则按总响应时间占比从大到小排序,输出到总和达到50%位置截止。
    --host  mysql服务器地址
    --user  mysql用户名
    --password  mysql用户密码
    --history 将分析结果保存到表中,分析结果比较详细,下次再使用--history时,如果存在相同的语句,且查询所在的时间区间和历史表中的不同,则会记录到数据表中,可以通过查询同一CHECKSUM来比较某类型查询的历史变化。
    --review 将分析结果保存到表中,这个分析只是对查询条件进行参数化,一个类型的查询一条记录,比较简单。当下次使用--review时,如果存在相同的语句分析,就不会记录到数据表中。
    --output 分析结果输出类型,值可以是report(标准分析报告)、slowlog(Mysql slow log)、json、json-anon,一般使用report,以便于阅读。
    --since 从什么时间开始分析,值为字符串,可以是指定的某个”yyyy-mm-dd [hh:mm:ss]”格式的时间点,也可以是简单的一个时间值:s()、h(小时)、m(分钟)、d(),如12h就表示从12小时前开始统计。
    --until 截止时间,配合—since可以分析一段时间内的慢查询。
    

    常用DSN

    A    指定字符集
    D    指定连接的数据库
    P    连接数据库端口
    S    连接Socket file
    h    连接数据库主机名
    p    连接数据库的密码
    t    使用--review或--history时把数据存储到哪张表里
    u    连接数据库用户名
    

    DSN使用key=value的形式配置;多个DSN使用,分隔

    使用示例

    # 展示slow.log中最慢的查询的报表
    pt-query-digest slow.log
    
    # 分析最近12小时内的查询
    pt-query-digest --since=12h slow.log
    
    # 分析指定范围内的查询
    pt-query-digest slow.log --since '2020-06-20 00:00:00' --until '2020-06-25 00:00:00'
    
    # 把slow.log中查询保存到query_history表
    pt-query-digest --user=root --password=root123 --review h=localhost,D=test,t=query_history --create-review-table slow.log
    
    # 连上localhost,并读取processlist,输出到slowlog
    pt-query-digest --processlist h=localhost --user=root --password=root123 --interval=0.01 --output slowlog
    
    # 利用tcpdump获取MySQL协议数据,然后产生最慢查询的报表
    # tcpdump使用说明:https://blog.csdn.net/chinaltx/article/details/87469933
    tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 port 3306 > mysql.tcp.txt
    pt-query-digest --type tcpdump mysql.tcp.txt
    
    # 分析binlog
    mysqlbinlog mysql-bin.000093 > mysql-bin000093.sql
    pt-query-digest  --type=binlog mysql-bin000093.sql
    
    # 分析general log
    pt-query-digest  --type=genlog  localhost.log
    

    用法实战

    编写存储过程批量造数据

    在实际工作中没有测试性能,我们经常需要改造大批量的数据,手动插入是不太可能的,这时候就得用到存储过程了

    CREATE TABLE `kf_user_info` (
      `id` int(11) NOT NULL COMMENT '用户id',
      `gid` int(11) NOT NULL COMMENT '客服组id',
      `name` varchar(25) NOT NULL COMMENT '客服名字'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='客户信息表';
    

    如何定义一个存储过程呢?

    CREATE PROCEDURE 存储过程名称 ([参数列表])
    BEGIN
        需要执行的语句
    END
    

    举个例子,插入id为1-100000的100000条数据

    用Navicat执行

    -- 删除之前定义的
    DROP PROCEDURE IF EXISTS create_kf;
    
    -- 开始定义
    CREATE PROCEDURE create_kf(IN loop_times INT) 
    BEGIN
    	DECLARE var INT;
    	SET var = 1;
    	WHILE var < loop_times DO    
    		INSERT INTO kf_user_info (`id`,`gid`,`name`) 
    		VALUES (var, 1000, var);
    		SET var = var + 1;
    	END WHILE; 
    END;
    
    -- 调用
    call create_kf(100000);
    

    存储过程的三种参数类型

    参数类型是否返回作用
    IN向存储过程传入参数,存储过程中修改该参数的值,不能被返回
    OUT把存储过程计算的结果放到该参数中,调用者可以得到返回值
    INOUTIN和OUT的结合,即用于存储过程的传入参数,同时又可以把计算结构放到参数中,调用者可以得到返回值

    用MySQL执行

    得用DELIMITER 定义新的结束符,因为默认情况下SQL采用(;)作为结束符,这样当存储过程中的每一句SQL结束之后,采用(;)作为结束符,就相当于告诉MySQL可以执行这一句了。但是存储过程是一个整体,我们不希望SQL逐条执行,而是采用存储过程整段执行的方式,因此我们就需要定义新的DELIMITER ,新的结束符可以用(//)或者($$)

    因为上面的代码应该就改为如下这种方式

    DELIMITER //
    CREATE PROCEDURE create_kf_kfGroup(IN loop_times INT)  
    BEGIN  
    	DECLARE var INT;
    	SET var = 1;
    	WHILE var <= loop_times DO    
    		INSERT INTO kf_user_info (`id`,`gid`,`name`) 
    		VALUES (var, 1000, var);
    		SET var = var + 1;
    	END WHILE;  
    END //
    DELIMITER ; 
    

    查询已经定义的存储过程

    show procedure status;
    

    开始执行慢sql

    select * from kf_user_info where id = 9999;
    select * from kf_user_info where id = 99999;
    update kf_user_info set gid = 2000 where id = 8888;
    update kf_user_info set gid = 2000 where id = 88888;
    

    可以执行如下sql查看慢sql的相关信息。

    SELECT * FROM mysql.slow_log order by start_time desc;
    

    查看一下慢日志存储位置

    show variables like "slow_query_log_file"
    
    pt-query-digest /var/lib/mysql/VM-0-14-centos-slow.log
    

    执行后的文件如下
    在这里插入图片描述

    # Profile
    # Rank Query ID                            Response time Calls R/Call V/M 
    # ==== =================================== ============= ===== ====== ====
    #    1 0xE2566F6154AFF41948FE497E53631B43   0.1480 56.1%     4 0.0370  0.00 UPDATE kf_user_info
    #    2 0x2DFBC6DBF0D68EF2EC2AE954DC37A1A4   0.1109 42.1%     4 0.0277  0.00 SELECT kf_user_info
    # MISC 0xMISC                               0.0047  1.8%     2 0.0024   0.0 <2 ITEMS>
    

    从最上面的统计sql中就可以看到执行慢的sql

    可以看到响应时间,执行次数,每次执行耗时(单位秒),执行的sql

    下面就是各个慢sql的详细分析,比如,执行时间,获取锁的时间,执行时间分布,所在的表等信息

    不由得感叹一声,真是神器,查看慢sql超级方便

    最后说一个我遇到的一个有意思的问题,有一段时间线上的接口特别慢,但是我查日志发现sql执行的很快,难道是网络的问题?

    为了确定是否是网络的问题,我就用拦截器看了一下接口的执行时间,发现耗时很长,考虑到方法加了事务,难道是事务提交很慢?

    于是我用pt-query-digest统计了一下1分钟左右的慢日志,发现事务提交的次很多,但是每次提交事务的平均时长是1.4s左右,果然是事务提交很慢。
    在这里插入图片描述

    参考博客

    很全的一篇文章
    [0]https://zhuanlan.zhihu.com/p/106405711
    [1]https://blog.csdn.net/lt326030434/article/details/109222848
    [1]https://tech.meituan.com/2014/06/30/mysql-index.html
    [2]https://blog.csdn.net/itguangit/article/details/82145322
    [3]https://mp.weixin.qq.com/s/_SWewX-8nFam20Wcg6No1Q
    下载
    [4]https://www.cnblogs.com/zi-xing/p/4269854.html

    展开全文
  • 如何快速定位接口响应问题 一、背景 在开发联调阶段发现一个接口的响应时间特别长,经常超时,囧… 本文讲讲是如何定位到性能瓶颈以及修改的思路,将该接口从 2 s 左右优化到 200ms 以内 。 二、步骤 2.1 定位...

    如何快速定位接口响应慢问题

    一、背景

    在开发联调阶段发现一个接口的响应时间特别长,经常超时,囧…

    本文讲讲是如何定位到性能瓶颈以及修改的思路,将该接口从 2 s 左右优化到 200ms 以内 。

    二、步骤
    2.1 定位
    定位性能瓶颈有两个思路,一个是通过工具去监控,一个是通过经验去猜想。

    2.1.1 工具监控
    就工具而言,推荐使用 arthas ,用到的是 https://link.csdn.net/?target=https%3A%2F%2Falibaba.github.io%2Farthas%2Ftrace.html 命令

    具体安装步骤很简单,大家自行研究。

    我的使用步骤是,先最终待研究的函数的最外层:

    trace com.xxx.service.impl.AServiceImpl refresh

    其中耗时最多的子函数会被标红色

    Affect(class-cnt:2 , method-cnt:2) cost in 525 ms.
    `---ts=2020-0X-0Y 13:33:18;thread_name=DubboServerHandler-127.0.0.1:20880-thread-36;id=24e;is_daemon=true;priority=5;TCCL=com.mmm.WWWClassLoader@4362d7df
        `---[1761.834357ms] com.xxx.service.impl.AServiceImpl$$EnhancerBySpringCGLIB$$e3cd7543:refresh()
            +---[0.017066ms] com.xxx.service.impl.AServiceImpl$$EnhancerBySpringCGLIB$$e3cd7543:$jacocoInit()
            `---[1761.00347ms] org.springframework.cglib.proxy.MethodInterceptor:intercept()
                `---[1757.647111ms] com.xxx.service.impl.AdServiceImpl:refresh()
                    +---[0.006629ms] com.xxx.biz.yyy.service.impl.AServiceImpl:$jacocoInit()
                    +---[0.004073ms] java.util.Collections:singletonList()
                    +---[1709.203302ms] com.yyy.service.impl.AServiceImpl:refreshSomeThings()
                    `---[48.135719ms] com.yzzzz.service.impl.AServiceImpl:createSurvey()
    

    继续再 trace 耗时最多的子函数。

    trace com.yyy.service.impl.AServiceImpl refreshSomeThings

    最终定位到最影响耗时的函数上,继续往下跟。

    最后发现造成性能瓶颈的函数是一个网络请求,单次请求大概 100多毫秒。

    为了避免调用的数据量太大,项目中采用分批调用的方式,但是每个批次太小,导致请求次数过多。

    假设请求 N 次(如 10次),每次请求 M毫秒(如 200ms),总耗时就是 N*M (2000)毫秒。

    2.1.2 猜想
    如果开发经验足够丰富,大致可以猜出哪些接口可能存在性能问题。

    最常见的有:

    慢 SQL 会是性能瓶颈,主要原因是没有命中索引。
    发送远程数据请求(RPC 远程调用、HTTP 远程调用)。
    I/O 操作等。
    最常见的是在循环中执行 SQL或者网络请求。

    然后审查一下自己的代码发现 SQL 查询部分都可以命中索引,调用链路上有一个函数最终会调用 HTTP 请求,而且是在一个循环里。

    因此最有可能成为造成接口延时的是底层依赖的 HTTP 请求。

    2.2 解决
    既然 HTTP 请求是性能瓶颈,那么要尽量减少请求,或者让请求由串行改为多线程并发/并行。

    减少网络请求的次数,可以将多个请求合并成一个批量接口(或者增加批量请求的每个批次的大小)。

    这里的批次甚至可以使用动态配置,根据情况动态修改。

    将串行改为并行可以使用 CompletableFuture 来实现,具体参见:《Java 数据分批调用接口的正确姿势》

    最终一个接口从1 s - 2 s降低到了 200 ms 以内。

    3、总结
    很多人不愿意学习 arthas ,如果不去学习不去了解,遇到可以用上的场景想不起来去用。

    另外大家可以积累下开发过程中常见的性能瓶颈的原因,以便未来遇到性能瓶颈是可以快速排查和解决问题。

    最后大家在开发阶段或测试阶段,多看错误日志,多关注接口的响应时长等,尽早排除问题,尽早做优化。

    希望本文对大家开发能够有帮助。
     

    展开全文
  • 一分钟快速搞懂Redis的慢查询分析

    万次阅读 多人点赞 2020-03-24 10:39:55
    当Redis客户端出现请求超时的时候,需要检查该时间点是否有慢查询,从而分析出由于慢查询导致的命令级联阻塞。

    什么是慢查询?

    慢查询,顾名思义就是比较慢的查询,但是究竟是哪里慢呢?首先,我们了解一下Redis命令执行的整个过程:

    1. 发送命令
    2. 命令排队
    3. 命令执行
    4. 返回结果

    在慢查询的定义中,统计比较慢的时间段指的是命令执行这个步骤。没有慢查询,并不表示客户端没有超时问题,有可能网络传输有延迟,也有可能排队的命令比较多。

    因为Redis中命令执行的排队机制,慢查询会导致其他命令的级联阻塞,所以当客户端出现请求超时的时候,需要检查该时间点是否有慢查询,从而分析出由于慢查询导致的命令级联阻塞。

    什么是慢查询日志?

    慢查询日志是Redis服务端在命令执行前后计算每条命令的执行时长,当超过某个阈值是记录下来的日志。日志中记录了慢查询发生的时间,还有执行时长、具体什么命令等信息,它可以用来帮助开发和运维人员定位系统中存在的慢查询。

    如何获取慢查询日志?

    可以使用slowlog get命令获取慢查询日志,在slowlog get后面还可以加一个数字,用于指定获取慢查询日志的条数,比如,获取3条慢查询日志:

    > slowlog get 3
    1) 1) (integer) 6107
       2) (integer) 1616398930
       3) (integer) 3109
       4) 1) "config"
          2) "rewrite"
    2) 1) (integer) 6106
       2) (integer) 1613701788
       3) (integer) 36004
       4) 1) "flushall"
    3) 1) (integer) 6105
       2) (integer) 1608722338
       3) (integer) 20449
       4) 1) "scan"
          2) "0"
          3) "MATCH"
          4) "*comment*"
          5) "COUNT"
          6) "10000"
    

    从上面的例子中,可以看出每一条慢查询日志都有4个属性组成:

    1. 唯一标识ID
    2. 命令执行的时间戳
    3. 命令执行时长
    4. 执行的命名和参数

    如何获取慢查询日志的长度?

    可以使用slowlog len命令获取慢查询日志的长度,比如:

    > slowlog len
    (integer) 121
    

    在上例中,当前Redis中有121条慢查询日志。

    如何清理慢查询日志?

    可以使用slowlog reset命令清理慢查询日志,比如:

    > slowlog len
    (integer) 121
    > slowlog reset
    OK
    > slowlog len
    (integer) 0
    

    怎么配置慢查询的参数?

    正如上面提到的,慢查询需要如下两个配置:

    1. 命令执行时长的指定阈值。
    2. 存放慢查询日志的条数。

    Redis对应提供了两个参数:slowlog-log-slower-than和slowlog-max-len,接下来我们详细介绍一下这两个参数。

    slowlog-log-slower-than

    slowlog-log-slower-than的作用是指定命令执行时长的阈值,执行命令的时长超过这个阈值时就会被记录下来。它的单位是微秒(1秒 = 1000毫秒 = 1000000微秒),默认是10000微秒。如果把slowlog-log-slower-than设置为0,将会记录所有命令到日志中。如果把slowlog-log-slower-than设置小于0,将会不记录任何命令到日志中。

    在实际的生产环境中,需要根据Redis并发量来调整该配置。因为Redis采用单线程响应命令,如果命令执行时间在1000微秒以上,那么Redis最多可支撑OPS不到1000,所以对于高并发场景的Redis建议设置为1000微秒

    slowlog-max-len

    slowlog-max-len的作用是指定慢查询日志最多存储的条数。实际上,Redis使用了一个列表存放慢查询日志,slowlog-max-len就是这个列表的最大长度。当一个新的命令满足满足慢查询条件时,被插入这个列表中。当慢查询日志列表已经达到最大长度时,最早插入的那条命令将被从列表中移出。比如,slowlog-max-len被设置为10,当有第11条命令插入时,在列表中的第1条命令先被移出,然后再把第11条命令放入列表。

    记录慢查询是Redis会对长命令进行截断,不会大量占用大量内存。在实际的生产环境中,为了减缓慢查询被移出的可能和更方便地定位慢查询,建议将慢查询日志的长度调整的大一些。比如可以设置为1000以上

    如何进行配置

    在Redis中有两个修改配置的方法:

    1. 修改Redis配置文件。比如,把slowlog-log-slower-than设置为1000,slowlog-max-len设置为1200:
    slowlog-log-slower-than 1000
    slowlog-max-len 1200
    
    1. 使用config set命令动态修改。比如,还是把slowlog-log-slower-than设置为1000,slowlog-max-len设置为1200:
    > config set slowlog-log-slower-than 1000
    OK
    > config set slowlog-max-len 1200
    OK
    > config rewrite
    OK
    

    如果要Redis把配置持久化到本地配置文件,需要执行config rewrite命令。

    总结

    慢查询指的是命令执行时长比较长的查询。通过slowlog get命令获取慢查询日志;通过slowlog len命令获取慢查询日志的长度;通过slowlog reset命令清理慢查询日志。通过slowlog-log-slower-than配置命令执行时长的阈值;通过slowlog-max-len配置慢查询日志最多存储的条数。

    展开全文
  • 直接查询搜索分析比较费时费力,虽然业界有针对 MySQL 慢查询分析的命令行工具(比如:pt-query-digest),但是使用起来还是不够方便,而且分析结果也是针对整个实例的大概统计,不能及时定位到某个应用(库....
  • MySQL——慢查询

    千次阅读 2019-05-12 18:56:33
    MySQL 数据库有一个“慢查询日志”功能,用来记录查询时间超过某个设定值的SQL,这将极大程度帮助我们快速定位到症结所在,以便对症下药。 什么事慢查询 慢查询日志,顾名思义,就是查询慢的日志,是指mysql记录所有...
  • Mysql慢查询日志详解(slow_query_log)

    千次阅读 2018-11-03 16:13:38
    程序中定位一个执行慢的SQL可以根据慢查询日志,默认情况下,慢查询日志禁用,因为开启慢查询日志或多或少的会对mysql的性能产生一些影响。在慢查询日志功能开启时,只有SQL执行时间超过long_query_time参数值的的...
  • 问题现象:前几天在项目上线过程中,发现有一个页面无法正确获取数据,经排查原来是接口调用超时,而最后发现是因为SQL查询长达到20多秒而导致了问题的发生。复杂SQL语句的构成:类比的语句来描述当时的场景,可以表达...
  • 快速定位java系统线上问题

    千次阅读 2018-08-31 10:37:02
    jps 用于输出当前用户启动的所有进程 ID,当线上发现故障或者问题时,能够利用 jps 快速定位对应的 Java 进程 ID。 jps -l -m -m -l -l 参数用于输出主启动类的完整路径 当然,我们也可以使用 Linux 提供的查询进程...
  • chrome浏览器f12快速定位元素的技巧

    千次阅读 2021-01-27 21:29:13
    使用Chrome浏览器开发者工具快速定位元素的方法 一,调试说明 作为WebUI自动化测试最大的难点就是定位界面元素,传统的html元素比较正规,还能去定位,当遇到VUE+Element等前端框架,已经没有下拉框等数据,就比较很...
  • 这篇文章以Spring AOP为例,介绍如何快速定位执行效率较低的方法,从而解决服务运行较的问题。如果不是很了解Spring AOP的小伙伴,可以先看一下我的这篇文章:Spring学习之AOP,然后再回来继续看这篇文章。 背景 ...
  • NBIOT BC20 GPS快速定位的方法

    千次阅读 2020-02-14 12:50:13
    使用过BC20的小伙伴可能都有这样子的体会,打开GPS电源之后,GPS定位成功,大概要1分钟,甚至有时候半个小时都没有成功,实在是太了。如何解决呢? 下面是我的调试流程: 注意接主串口 AT OK AT+QGNSSC=1 OK AT+...
  • MySQL中的慢查询什么是慢查询慢查询配置慢查询基本配置慢查询解读慢查询分析mysqldumpslowpt_query_digest 什么是慢查询 慢查询日志,顾名思义,就是查询慢的日志,是指mysql记录所有执行超过long_query_time参数...
  • 快速定位磁盘满的位置

    千次阅读 2017-12-15 16:50:26
    du -h --max-depth=1 /usr/local/ | sort -hr
  • mysql如何获取慢SQL,以及慢查询的解决方式

    万次阅读 多人点赞 2019-02-07 21:00:00
    浅谈MySQL中优化sql语句查询常用的30种方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。  2.应尽量避免在 where 子句中使用!=或&lt;&gt;操作符,否则将...
  • 深入了解慢查询, 与索引的关系, 帮助开发高质量程序. 2.学习/操作 2.1 资料阅读 来源:rrd.me/f9jAG 经常有同学问我,我的一个SQL语句使用了索引,为什么还是会...
  • 磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应用分布在网络上,那么查询量相当大的时候那么平瓶颈就会出现在网络上。 我们可以用mpstat, iostat, sar和vmstat来查看系统的性能状态。除了服务器硬件的性能...
  • solrcloud查询速度的问题

    千次阅读 2019-09-06 17:05:26
    solrcloud环境下,本地solrj调试solr查询,发现查询速度特别,查1w条数据,耗时12389毫秒; 对比mysql数据库,查1w条数据,耗时2847毫秒; solr竟然了近10秒!!! 追踪solr源代码, Environment....
  • 摘要: 1、大表 左关联 小表,很;小表 左关联 大表,很快。2、走出自身的思想误区,应对底层有深入理解才能正确使用。 背景 前几天在项目上线过程中,发现有一个页面无法正确获取数据,经排查原来是接口调用超时...
  • goodDiskName2016from datetime import datetime from time import time直接方括号定位相等的列start = time() for disk in goodDiskName2016[:100]: ____ST4000DM000_2016_good_feature27[ST4000DM000_2016_g
  • 他把语句执行时间跟long_query_time这个系统参数作比较,如果语句执行时间比它还大,就会把这个语句记录到慢查询日志里面,这个参数的默认值是10秒。当然在生产上,我们不会设置这么大,一般会设置1秒,对于一些比较...
  • 在交易查询页面中可以看到有相当一部分交易响应时间都在1 秒甚至2 秒以上,再次证明是应用服务器的问题才导致的过大延时。 对比发现,凡是响应时间过大的交易的时间点上,均触发了Java的垃圾回收(FGC)机制,...
  • 为什么简单的一行查询也会、啥是幻读
  • sql在数据库查询很快,通过mybatis执行很 检查mybatis 生成的xml文件,字段类型是否与数据库一致。 ex:xml中时间字段变成了 varchar,数据库为datetime,查询60s 修改xml中字段为TIMESTAMP,查询1s。
  • 磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应用分布在网络上,那么查询量相当大的时候那么平瓶颈就会出现在网络上, 我们可以用mpstat, iostat, sar和vmstat来查看系统的性能状态。除了服务器硬件的性能...
  • mongoTemplate查询大数据过

    千次阅读 2018-04-17 17:36:19
    先上两段代码  代码一 Query query = new Query() ; queryAfter .addCriteria ...我一度还以为是mongo的问题,后来才定位到是代码的坑! 所以数据量大的时候还是用原生查询手动映射成实体类比较快!
  • JAVA程序比较 一般如何定位

    千次阅读 2018-06-20 22:29:56
    1.先写一段程序[html] view plain copypublic class Test { public static void main(String[] args) throws InterruptedException { int i=0; while(true){ System.out.println("...
  • oracle表加索引反而查询慢的原因

    千次阅读 2009-07-31 18:51:00
    一看表,好像索引比较少,就使劲加了些,发现加了反而查询速度更了。其实我们只要懂得索引的原理便可以知道索引不是想随便加就加。下面看一下索引的一些原理,我们就可以知道或许你也犯了同样的加了索引反而速度更...
  • Mysql千万级数据快速分页查询方案 实际应用场景说明 1.limit方法的局限性 2.通过主键id过滤的方法 3.between and 实际应用场景说明 服务器配置 : 阿里云 2核4G mysql服务器  生产场景 : 将mysql数据库中的文章数据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,917
精华内容 21,166
关键字:

如何快速定位慢查询