SQL响应慢如何分析解决

排查慢SQL ​ 我今天梳理了 SQL 优化的思路,从步骤上看,我们需要先进行观察和分析,分析工具的使用在日常工作中还是很重要的。今天只介绍了常用的三种分析工具,实际上可以使用的分析工具还有很多。​ 我在这里总结一下今天文章里提到的三种分析工具。我们可以通过慢查询日志定位执行慢的​ SQL,然后通过 EXPLAIN 分析该 SQL 语句是否使用到了索引,以及具体的数据表访问方式是怎样的。 阅读详情

原文地址:http://www.linzichen.cn/article/1568527609149521920
系统上线一段时间之后,由于表中的数据不断增加,可能会导致有些sql查询越来越慢。针对这种情况,我们需要 定位到慢sql,从而进行sql分析 ,找到原因后进行 查询优化,让sql的响应时间更快。

数据准备

为了更直观的表现出优化后的效果,我们需要事先准备好数据,并通过自定义函数和存储过程,向表中添加 100W条数据。

创建表

CREATE TABLE student (
	id INT ( 11 ) PRIMARY KEY auto_increment,
	stuno INT NOT NULL,
	`name` VARCHAR ( 20 ),
	age INT ( 3 ),
	class_id INT ( 11 ) 
) ENGINE = INNODB DEFAULT charset = 'utf8';

创建自定义函数

创建自定义函数之前,需要设置数据库服务信任我们自定义的函数或触发器,即设置 log_bin_trust_function_creators 为 ON。

mysql> set global log_bin_trust_function_creators='ON';
Query OK, 0 rows affected (0.04 sec)

mysql> show variables like 'log_bin_trust_function_creators';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | ON    |
+---------------------------------+-------+
1 row in set (0.00 sec)

创建生成随机数的函数

DELIMITER $$
CREATE FUNCTION rand_string(n INT)
    RETURNS VARCHAR(255)
BEGIN
    DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ';
    DECLARE return_str VARCHAR(255) DEFAULT '';
    DECLARE i INT DEFAULT 0;
    WHILE i < n DO
        SET return_str = concat(return_str, substring(chars_str, floor(1+rand()*52), 1));
        SET i = i + 1;
    END WHILE ;
    RETURN return_str;
END $$
DELIMITER;

创建存储过程

往 student表中添加数据的存储过程。

DELIMITER $$
CREATE PROCEDURE insert_student (IN min_num INT (10), IN max_num INT(10))
BEGIN
    DECLARE i INT DEFAULT 0;
    SET autocommit = 0 ;
    REPEAT
    SET i = i + 1 ;
    INSERT INTO student VALUES(
      null,
      (min_num + 30 * i + 5),
      rand_string(7),
      FLOOR(15 +RAND() * 10),
      null
    );
    UNTIL i = max_num
    END REPEAT;
    COMMIT;
END $$
DELIMITER;

添加数据

执行 insert_student 存储过程,往 student 表中添加100w 条数据。这个过程比较耗时,我用了 576 秒。

call insert_student(0, 1000000);

查看数据

mysql> select count(*) from student;
+----------+
| count(*) |
+----------+
|  1000000 |
+----------+
1 row in set (0.12 sec)

定位慢sql

设置慢查询日志参数

1.开启slow_query_log

通过查看 slow_query_log 我们可以获取慢查询参数的开启状态及日志位置,为了记录慢查询日志,我们需要将此参数设置为 ON。

mysql> set global slow_query_log = 'ON';
Query OK, 0 rows affected (0.20 sec)

mysql> show variables like 'slow_query_log%';
+---------------------+-----------------------------------+
| Variable_name       | Value                             |
+---------------------+-----------------------------------+
| slow_query_log      | ON                                |
| slow_query_log_file | /var/lib/mysql/localhost-slow.log |
+---------------------+-----------------------------------+
2 rows in set (0.00 sec)

2.修改long_query_time阈值

通过 long_query_time 我们可以获取慢查询的时间阈值,默认是 10,意思就是如果一条sql的响应时间超过了10s,系统会将此sql记录到慢日志中。我们将其设置为 0.5。

mysql> set global long_query_time = 0.5;
Query OK, 0 rows affected (0.00 sec)

-- 经过测试,发现设置global时,只针对新的会话有效,对当前会话无效。
-- 所以还需要针对当前会话设置一次。
mysql> set long_query_time = 0.5;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'long_query_time';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 0.500000 |
+-----------------+----------+
1 row in set (0.00 sec)

案例测试

mysql> select sql_no_cache * from student where age = 19 and name like '%xefobsK%';
+--------+----------+---------+------+----------+
| id     | stuno    | name    | age  | class_id |
+--------+----------+---------+------+----------+
| 999994 | 29999825 | xefobsK |   19 |     NULL |
+--------+----------+---------+------+----------+
1 row in set, 1 warning (0.60 sec)

此sql执行时间超出了 0.5s,根据我们上面 long_query_time 的设置,此sql 我们会认为是一条慢sql。

接下来需要去慢查询日志中,查看是否将此sql 记录了下来。

[root@localhost ~]# cd /var/lib/mysql
[root@localhost mysql]# cat localhost-slow.log 

# Time: 2022-09-11T04:38:01.726837Z
# User@Host: root[root] @  [192.168.2.3]  Id:    21
# Query_time: 0.695226  Lock_time: 0.000004 Rows_sent: 1  Rows_examined: 1000000
SET timestamp=1662871081;
select sql_no_cache * from student where age = 19 and name like '%xefobsK%';

由上可见,我们已经把慢sql 记录了下来。所以接下来,我们需要分析此sql 查询为何慢。

我们知道,设置 long_query_time 为 0.5 可以将时间超过0.5s的sql 记录到慢查询日志中。实际上 这里还有一个参数 min_examined_row_limit,这个参数的意思是 扫描过的最少记录,其值默认为 0。

mysql> show variables like 'min%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| min_examined_row_limit | 0     |
+------------------------+-------+
1 row in set (0.00 sec)

这个变量和查询时间阈值,共同组成了判定一个查询是否是慢查询的条件。
如果扫描过的记录大于等于这个变量,且查询执行时间超过阈值,那么此查询就被记录到慢查询日志中。反之,则不被记录到日志。

慢sql分析

通过查看慢查询日志,定位到慢sql之后,我们需要对此sql进行分析,它为什么会慢。

show profile介绍

show profile可以分析当前会话中mysql都做了什么,以及资源消耗的情况,可以用于sql调优的测量。默认情况是处于 关闭 状态,并保存最近15次的运行结果。

mysql> set profiling = 'ON';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show variables like 'profiling';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| profiling     | ON    |
+---------------+-------+
1 row in set (0.00 sec)

此功能开启后,我们可以通过 show profiles命令查看当前会话中sql的执行情况:

mysql> show profiles;
+----------+------------+----------------------------------+
| Query_ID | Duration   | Query                            |
+----------+------------+----------------------------------+
|        1 | 0.00063825 | select @@version_comment limit 1 |
|        2 | 0.00041000 | set profiling = 'ON'             |
|        3 | 0.00589550 | show variables like 'profiling'  |
+----------+------------+----------------------------------+
3 rows in set, 1 warning (0.00 sec)

由上可见,我们在当前会话中执行过的sql可以通过 show profiles 来查看资源消耗情况,比如我们想查看 Query_ID 为3 的这条sql的消息详细,可以通过以下命令:

mysql> show profile cpu, block io for query 3;
+----------------------+----------+----------+------------+--------------+---------------+
| Status               | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
+----------------------+----------+----------+------------+--------------+---------------+
| starting             | 0.000135 | 0.000062 |   0.000064 |            0 |             0 |
| checking permissions | 0.000104 | 0.000105 |   0.000000 |            0 |             0 |
| Opening tables       | 0.000214 | 0.000214 |   0.000000 |            0 |             0 |
| init                 | 0.000008 | 0.000007 |   0.000000 |            0 |             0 |
| System lock          | 0.000007 | 0.000007 |   0.000000 |            0 |             0 |
| optimizing           | 0.000004 | 0.000004 |   0.000000 |            0 |             0 |
| optimizing           | 0.000007 | 0.000006 |   0.000000 |            0 |             0 |
| statistics           | 0.000027 | 0.000027 |   0.000000 |            0 |             0 |
| preparing            | 0.000014 | 0.000013 |   0.000000 |            0 |             0 |
| statistics           | 0.000025 | 0.000027 |   0.000000 |            0 |             0 |
| preparing            | 0.000016 | 0.000014 |   0.000000 |            0 |             0 |
| executing            | 0.005103 | 0.005163 |   0.000000 |            0 |             0 |
| end                  | 0.000012 | 0.000007 |   0.000000 |            0 |             0 |
| query end            | 0.000012 | 0.000012 |   0.000000 |            0 |             0 |
| closing tables       | 0.000007 | 0.000007 |   0.000000 |            0 |             0 |
| freeing items        | 0.000187 | 0.000188 |   0.000000 |            0 |             0 |
| cleaning up          | 0.000017 | 0.000015 |   0.000000 |            0 |             0 |
+----------------------+----------+----------+------------+--------------+---------------+
17 rows in set, 1 warning (0.00 sec)

show profile常用查询参数:

  • all:显示所有的开销信息。
  • block io:显示块io开销。
  • context switches: 上下文切换开销。
  • cpu:显示cpu开销信息。
  • ipc:显示发送和接受开销信息。
  • memory:显示内存开销信息。
  • page faults:显示页面错误开销信息。
  • source:显示和 source_function,source_file,source_line 相关的开销信息。
  • swaps:显示交换次数开销信息。

那我们通过 show profile 查看资源消耗,如何判定一个sql 是否需要优化呢,这里列举出 4 点,如果在诊断结果中出现以下情况,则说明sql需要优化:

  • converting HEAP to MyISAM:查询结果太大,内存不够,数据往磁盘上搬了。
  • Creating tmp table:创建临时表。先拷贝数据到临时表,用完后再删除临时表。
  • Copying to tmp table on disk:把内存中临时表复制到磁盘上,警惕!
  • locked。

查看慢sql执行成本

我们可以将慢查询日志中的sql拿出来,在当前会话中执行一次,并分析其资源消耗情况。

mysql> show profiles;
+----------+------------+------------------------------------------------------------------------+
| Query_ID | Duration   | Query                                                                  |
+----------+------------+------------------------------------------------------------------------+
|       31 | 0.69543050 | select sql_no_cache * from student where age = 19 and name like '%xefobsK%'  |
+----------+------------+------------------------------------------------------------------------+
7 rows in set, 1 warning (0.00 sec)
mysql> show profile for query 31;
+--------------------------------+----------+
| Status                         | Duration |
+--------------------------------+----------+
| starting                       | 0.000096 |
| Executing hook on transaction  | 0.000007 |
| starting                       | 0.000008 |
| checking permissions           | 0.000007 |
| Opening tables                 | 0.000060 |
| init                           | 0.000026 |
| System lock                    | 0.000012 |
| optimizing                     | 0.000030 |
| statistics                     | 0.000022 |
| preparing                      | 0.000041 |
| executing                      | 0.694731 |
| end                            | 0.000014 |
| query end                      | 0.000005 |
| waiting for handler commit     | 0.000045 |
| closing tables                 | 0.000014 |
| freeing items                  | 0.000117 |
| logging slow query             | 0.000166 |
| cleaning up                    | 0.000032 |
+--------------------------------+----------+
18 rows in set, 1 warning (0.00 sec)

根据 show profile 的结果,我们发现sql在 executing 阶段消耗了0.694秒,所以判定此sql是在执行阶段慢了,就说明我们的sql 存在问题,所以接下来,需要通过 explain来做针对性的分析。

分析查询语句:explain

我们在编写完一个sql 执行后,mysql底层优化器并不一定会按照我们编写的sql来运行。比如我们在sql中使用了索引字段,优化器执行时并不一定使用索引;再比如我们写了子查询,优化器可能会优化成多表join方式来执行……

我们需要通过 explain关键字,来帮助我们查看sql的查询方式,比如多表连接的顺序、是否使用索引等等。有关 explain 的用法,由于细节众多,这里就不一一介绍了,后面会单独发布一篇《explain用法案例剖析》文章。

所以针对慢查询日志中的sql,我们使用 explain 来分析一下:

mysql> explain select sql_no_cache * from student where age = 19 and name like '%xefobsK%';
+----+-------------+---------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| id | select_type | table   | partitions | type | possible_keys | key  | key_len | ref  | rows   | filtered | Extra       |
+----+-------------+---------+------------+------+---------------+------+---------+------+--------+----------+-------------+
|  1 | SIMPLE      | student | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 998089 |     1.11 | Using where |
+----+-------------+---------+------------+------+---------------+------+---------+------+--------+----------+-------------+
1 row in set, 2 warnings (0.00 sec)

这里看几个重要指标:

  • type:type的值是 all,最熟悉的全表扫描,效率多低就不用再多介绍了。
  • key: key为null,说明一个索引都没有用到。
  • key_len:索引都没有用到,更别提索引长度了。
  • rows:预计读取的记录条数,此值越小越好。表中总共100w条数据,这里值是99w多,不言而喻了。
  • Extra:using where 表示搜索条件中,用到了非索引列的查询。

查询优化

针对上面分析出来的结果,我们需要对此查询进行优化。

1.我们发现在查询中没有用到索引,所以我们考虑对该表创建索引。

2.因为where 条件中用到了 age 和 name,所以我们需要针对这两个字段,创建联合索引。

mysql>  create index idx_age_name on student(age, name);
Query OK, 0 rows affected (8.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

添加索引成功后,我们再用explain来查看下sql执行计划:

mysql> explain select sql_no_cache * from student where age = 19 and name like '%xefobsK%';
+----+-------------+---------+------------+------+---------------+--------------+---------+-------+--------+----------+-----------------------+
| id | select_type | table   | partitions | type | possible_keys | key          | key_len | ref   | rows   | filtered | Extra                 |
+----+-------------+---------+------------+------+---------------+--------------+---------+-------+--------+----------+-----------------------+
|  1 | SIMPLE      | student | NULL       | ref  | idx_age_name  | idx_age_name | 5       | const | 203772 |    11.11 | Using index condition |
+----+-------------+---------+------------+------+---------------+--------------+---------+-------+--------+----------+-----------------------+
1 row in set, 2 warnings (0.00 sec)

我们再去观察几个重要的属性:

  • type:ref 说明用辅助索引的列与常量进行等值匹配了。
  • key: idx_age_name ,已经用到我们创建的索引了。
  • key_len:5,说明只是用到了联合索引中的age字段(int 4 + default null 1)。
  • rows:20多w,比没加索引的99w 优化太多了。
  • Extra:Using index condition。

此时我们再去执行慢查询中的sql:

mysql> select sql_no_cache * from student where age = 19 and name like '%xefobsK%';
+--------+----------+---------+------+----------+
| id     | stuno    | name    | age  | class_id |
+--------+----------+---------+------+----------+
| 999994 | 29999825 | xefobsK |   19 |     NULL |
+--------+----------+---------+------+----------+
1 row in set, 1 warning (0.04 sec)

我们发现,添加完索引之后的执行时间明显小于未添加索引的时间,且此时sql的耗时小于long_query_time的阈值,所以此sql已不属于慢sql,那基本就完成了我们想要达到的效果。

总结

通过以上案例,我们通过 slow_query_log 和 long_query_time 来定位到慢sql,然后通过 show profile 查看对应sql的执行成本,发现是在 执行阶段耗时后,又通过 explain 来分析sql,最后以添加索引的方式 来解决了慢sql的问题。

当遇到数据库调优问题的时候,我们可以把整个调优流程划分成 观察(show status)和行动(action)两个部分。字母 S 的部分代表观察(会使用相应的分析工具),字母 A 代表的是行动(对应分析可以采取的行动)。

流程图.png

以上添加索引的方式仅仅是sql优化的一种,当我们遇到了 通过索引方式也不能有效解决的时候,我们需要判定此sql 查询是否到达瓶颈,从而去考虑 是否做一些例如读写分离、分库分表等一系列的操作。

MySql学习之慢SQL优化和慢SQL案例 慢查询日志记录慢SQL explain查看分析SQL的执行计划 profile分析执行耗时 Optimizer Trace分析详情 确定慢SQL问题并采用相应的方案 隐式转换、最左匹配、深分页问题、in元素过多、order by 走文件排序、 索引字段上使用(!= 或者 < >)索引字段上使用is null, is not null,索引可能失效、 左右连接,关联的字段的编码格式不一样 、group by使用临时表、delete + in子查询不走索引、 其它索引失效场景,如like '%xxx' 阅读详情

相关推荐

线上遇到慢接口的解决方案

这个时候可以采用APM工具快速定位,常见的工具:skywalking、pinpoint,cat、zipkin假如我们应用没有接入APM,可以在生产环境装一下阿里的A.rthas,利用trace接口方法,大概能分析是哪一块比较慢,定位的力度稍微有点粗糙。. 循环调用改为单次调用(比如查数据库或查其他rpc或restful接口,能批量调用尽量批量调用,数据在内存组装处理).同步调用改为异步调用(采用completableFuture异步非阻塞,并行调用不同的rpc接口)我这里给大家分享以下。

qq_38667268的博客 1312

慢SQL,压垮团队的最后一根稻草!

我们都知道,我们每执行一次 SQL,数据库除了会返回执行结果以外,还会返回 SQL 执行耗时,以 MySQL 数据库为例,当我们开启了慢 SQL 监控开关后,默认配置下,当 SQL 的执行时长大于 10 秒,会被记录到慢 SQL 的日志文件中。本文主要围绕慢 SQL 的定位和可能存在的风险进行了简单的介绍,整篇介绍的算是一个入门级的知识,文章内容难免有些理解不到位的地方,欢迎网友留言指出!因此我们不难发现,在没有开启缓存的情况下,当表的数据量越大,如果 SQL 又没有走索引,很容易发生查询慢的问题。...

m0_71327177的博客 2564

【怎么发现SQL 执行慢了】

MySQL 提供了多种性能监控工具,例如 Performance Schema、MySQL Enterprise Monitor 等,可以实时监控数据库的性能指标,并且可以通过图表、报告等方式展示性能数据,帮助找到 SQL 查询慢的问题。除了 MySQL 自带的性能监控工具外,还有很多第三方 SQL 监控工具可以使用,例如 pt-query-digest、mytop、Navicat 等,可以方便地监控 SQL 查询的执行情况,快速定位查询慢的原因。

学无止境 1766

生产环境解决slowSQL 方案

慢SQL场景处理方案

py_tamir的博客 1785

百度慧眼人口位置数据:从原理到实战的GIS处理全流程

本文详细解析百度慧眼人口位置数据的处理全流程,从基本原理到实战应用。通过空间网格划分、终端数量统计等技术手段,百度慧眼数据能准确反映人群分布特征。文章涵盖坐标系转换、核密度分析、热力图制作等GIS处理技巧,并分享商业选址、城市规划等典型业务场景的解决方案,帮助读者高效利用这一数据资源。

weixin_30872157的博客 534

Smali语言基础语法

定义、声明、调用 Smali数据类型 定义:与Java相同,Smali中也有一套数据类型体系,且该体系实质上是同Java一一对照的。 示例1:Smali——Java数据类型对照表 PS:如上图所示,Smali语言中的数据类型的关键词基本上为Java中同名数据类型的首字母大写,需要着重记忆的例外为:1.long类型的关键词为大写J;2.boolean类型的关键词为大写Z;3.数组的关键词为左半边中括号[;4.object类型(各种类)的关键词为大写L加上该类的全类名路径,路径中的层级用/分割。

aketoshknight的博客 1万+

线上接口响应很慢?怎么处理

SQL太复杂(join超过3张表或者子查询比较多,建议拆分SQL为多个接口,比如先从某个主接口查某个表数据,然后关联字段作为条件从另外一个表查询,进行内存拼接)某一天早上,正在上班路上,突然手机不断收到大量告警提醒,赶紧查看了下,结果显示某个接口出现大量超时,平均响应时间超过3s,这个时候怎么办?循环调用,改为单次批量调用,减少IO损耗(比如调用AB接口,根据用户ID、分组ID多个,for调用改为一次传多个分组ID)加了索引,索引失效(对索引做了系统函数的一些转换、区分度很低比如枚举值、索引列大量空值)

King Gigi的博客 857

RAG开源框架深度评测:从RAGFlow到Dify的实战选型指南

本文深度评测了主流RAG开源框架(RAGFlow、Dify、WeKnora)的核心能力与实战表现,提供企业级选型指南。重点对比了文档解析、检索性能和生产部署等关键指标,揭示RAGFlow在复杂文档处理、Dify在低代码开发、WeKnora在腾讯生态集成的差异化优势,并给出技术选型决策树与成本优化方案。

weixin_29294597的博客 825

sql执行慢的原因?如何看是什么问题?

比如MySQL支持一主多从的分布式部署,我们可以将主库只用来处理写数据的操作,而多个从库只用来处理读操作。在流量比较大的场景中,可以增加从库来提高数据库的负载能力,从而提升数据库的总体性能。表切分规则一般分为两种,一种是水平切分,一种是垂直切分。将查询比较频繁的热点数据预存到缓存当中,比如Redis、MongoDB、ES等,以此来缓解数据的压力,从而提高数据库的响应速度。首先,可以打开MySQL的慢查询日志,收集一段时间的慢查询日志内容,然后找出耗时最长的SQL语句,对这些SQL语句进行分析。

jinchenga的博客 869

MS17-010(Eternal blue永恒之蓝)漏洞利用+修复方法

msf永恒之蓝漏洞复现过程以及修复建议

记录学习 8509

传感器采集信息的频率(采样频率)

较高的采集频率通常能提供更详细的信息,但也会增加数据处理和存储的负担。在某些应用中,较高的采样频率可能是必要的,而在其他情况下,则可能会选择适当的低采样频率以降低功耗和数据处理压力。传感器采集信息的频率(采样频率)是指传感器在一定时间内对输入信号进行采样的次数。对于一些需要快速检测和响应的应用,如运动传感器、声音传感器等,高采样频率是至关重要的。高采样频率通常需要更多的功耗和更大的存储容量,因为产生的数据量更大。例如,对于快速运动的对象,较低的采样频率可能无法捕捉到运动的真实轨迹。

chen的博客 5341

mysql慢查询个数阈值报警_mysql慢sql报警系统

前言:最近有同事反应有的接口响应时间时快时慢,经过排查有的数据层响应时间过长,为了加快定位定位慢sql的准确性,决定简单地搭建一个慢sql报警系统具体流程如下架构图第一步:记录日志每个业务系统都会在都会有自己的查询语句,所有的sql语句最红都会 我们先开启每个mysql的慢sql采集配置1.将 slow_query_log 全局变量设置为“ON”状态mysql> set global s...

weixin_39801475的博客 297

2026 年第十六届MathorCup数学应用挑战赛题目C题中老年人群高血脂症的风险预警及干预方案优化 2026妈妈杯 详细思路、代码、模型

2026 年第十六届MathorCup数学应用挑战赛题目 C题中老年人群高血脂症的风险预警及干预方案优化 人口老龄化进程的持续加快,使得40岁及以上中老年人群成为 慢性病防控的核心群体,其中高血脂症的发病率呈逐年攀升态势, 已成为诱发冠心病、脑梗死等心脑血管疾病的重要危险因素,严重 威胁中老年群体的心血管健康与生活质量,也加重了基层医疗的慢 病管理负担。从中医体质学视角来看,体质禀赋与偏颇是疾病发生 发展的内在根基,其中痰湿体质为中老年高血脂症的高发体质类型, 该体质人群存在痰湿内蕴、脾胃运化失常、水湿代谢

YOLO 754

山东项目系统慢问题分析和解决

排查此类问题最重要的是要弄清事情的问题的原因表象以及根本原因是什么,只要弄清楚是什么原因导致的我们才能解决此类问题,这也是一个过程,每个人的理解不同,所以说结果也是不同的. 这边文章就从技术的角度从问题分析>问题猜想>问题处理>验证结果 四个过程进行 排查我们的系统如何慢.ps:我这里是从后端的角度进行分析,关于前端分析这块可能会有描述差异。

vipxiaowenbo的博客 2337

Android NDK/JNI面试题大全及参考答案(3万字长文)

是一套工具集合,它允许开发者为Android平台编写原生应用程序或者应用程序的部分模块。NDK 主要用于开发那些需要高性能计算的应用程序,例如游戏引擎、图像处理软件或音频/视频编码解码器等。通过使用 C 或 C++ 编写代码,开发者可以利用硬件加速功能,提高应用性能。NDK 提供了一系列工具来帮助开发者完成从源代码到可执行文件的整个过程,包括编译、链接、调试等功能。

大模型大数据攻城狮的专栏 1256

【YOLOv8科研级优化】基于YOLOv9的GELAN模块重构C2f结构,实现精度与效率的同步提升

打开确保模型解析器能识别GELANBlock模块。通过将YOLOv9的GELAN模块集成到YOLOv8的C2f模块中,我们实现了一个“强特征表达+高效计算”的目标检测模型。这个改进不仅在工程上能提升复杂场景下的检测效果,更在科研上提供了“多分支特征融合”的创新思路——这种思路可以延伸到其他检测网络(如Faster R-CNN、SSD)的改进中,帮你在论文中打造独特的研究点。

know_F0727的博客 201

从基础到进阶:接口响应慢与数据库性能优化全指南

本文系统分析了接口响应慢、查询慢与慢查询的区别与关联,提供了从基础到进阶的优化方案。首先厘清三个术语的定义:慢查询指SQL执行效率低,查询慢涵盖数据库与应用层,接口响应慢则涉及全链路。接着详细介绍了排查流程,包括量化耗时、分环节定位问题(网络、接入层、应用层、数据库等)。针对高频成因如SQL不优化、索引缺失、缓存设计不合理等,提出低成本的基础优化方案(如SQL优化、开启缓存、拆分接口)和进阶方案(分库分表、读写分离)。通过系统化思维和针对性措施,可有效提升接口性能。

术不贱卖、道不轻传 795

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

mysql慢sql报警系统

 前言:最近有同事反应有的接口响应时间时快时慢,经过排查有的数据层响应时间过长,为了加快定位定位慢sql的准确性,决定简单地搭建一个慢sql报警系统 具体流程如下架构图    第一步:记录日志 每个业务系统都会在都会有自己的查询语句,所有的sql语句最红都会 我们先开启每个mysql的慢sql采集配置 1.将 slow_query_log 全局变量设置为“ON”状态my...

weixin_30735745的博客 415

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

系统响应慢应从以下几个方面着手

最近公司有关部门反馈erp系统响应慢,领导也在跟进这件事情,于是开搞从以下几方面着手。看下图就知道了,比蜗牛还慢(哈哈) 慢sql以及慢日志分析 慢sql ----阿里云rds需要提交工单授权 |-----select * from mysql.slow_log_view order by rows_examin...

养码哥 787

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

API接口响应速度突然变慢的原因及解决方案

引言 本文主要针对SQL优化,缓存方面的优化,第三方接口方面的优化,资源瓶颈,业务方面的优化,网络io方面的优化等,来将项目中接口访问的优化 一. 首先要分析接口响应慢的具体原因,列出一些常见原因 是不是资源层面的瓶颈(服务器性能问题) 是不是缓存没添加,如果加了,是不是热点数据导致负载不均衡 是不是有依赖于第三方接口 是不是接口涉及业务太多,导致程序跑很久 是不是sql层面的问题导致的等待时机加长,进而拖慢接口 网络层面的原因,带宽,DNS解析 二.相应的解决方案 资源紧张,加机器,SLB(负载均衡)搞起

weixin_41882200的博客 1万+

sql server 时间范围小反而慢_一文了解Mysql的慢日志,以及使用慢日志分析工具...

当应用程序响应慢时,你是不是首先想到数据的问题,慢怎么排查是否有慢sql呢,如果这个都不会是不是太渣了。Mysql的慢日志是mysql提供的一种日志记录,它用来记录在mysql中响应时间超过阈值的语句,具体指运行时间超过配置文件中long_query_time值的sql,则会被记录到慢查询日志中。如果需要使用慢日志查询记录首先需要开启慢日志查询。使用命令查看是否开启慢日志查询show variab...

weixin_29762229的博客 541

MyBatis-Plus 长SQL查询性能问题分析与解决方案

MyBatis-Plus 长SQL查询性能问题分析与解决方案 【免费下载链接】mybatis-plus mybatis 增强工具包,简化 CRUD 操作。 文档 http://baomidou.com 低代码组件库 http://aizuda.com ...

gitblog_01428的博客 916

mysql突然出现大量慢sql,随后redis访问超时

在亚马逊云买了多台的虚拟主机,一年多没有由于系统的原因出过故障。今天碰见了。 早上接到报警,从业务故障上来看,应该是数据库没有响应了。 SSH连数据库服务器,发现连不上。 重启数据库服务器,一直起不来。 最后用上周的数据库服务器的系统备份snapshot(我们的数据盘和系统盘是分开的)新建一个Volume,替换掉故障系统盘,重新启动服务器,才顺利进入系统。在用新的Volume挂靠服务器的...

黄湘龙的技术博客 504

SQL性能优化案例分析

这段时间做一个SQL性能优化的案例分析, 整理了一下过往的案例,发现一个比较有意思的,拿出来给大家分享。 这个项目是我在项目开展2期的时候才加入的, 之前一期是个金融内部信息门户, 里面有个功能是收集各个上市公司的财报, 然后做各种分析, 数据图表展示, 使用的人数并不多, 仅百人左右。 2期打算面向行外用户, 刚开始预计同时在线人数不超过50, 就以50访问用户/秒的性能测试, 结...

weixin_30445169的博客 172

震惊!提速几十倍,MySQL使用单索引引发的慢查询问题及解决办法

通过此次事件,我们可以发现,单个索引在使用过程中,有可能会出现的交叉问题以及使用联合索引可以解决这一问题的方法。所以在创建索引的时候,我们要根据具体业务场景和SQL语句来评判到底是使用单索引还是联合索引。

Java全生态技术分享 788

常见线上问题分析

堆内存(Heap):存储对象实例,是OOM最常发生的区域方法区(Method Area):存储类信息、常量、静态变量等虚拟机栈(VM Stack):存储局部变量表、操作数栈、动态链接等本地方法栈(Native Method Stack):为Native方法服务程序计数器(Program Counter Register):当前线程执行的字节码行号指示器。

weixin_45130169的博客 1027
上一篇: wmware创建虚拟机
下一篇: 实现无滚动条滑动效果
Zichen_Lin
博客等级 码龄9年 9粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值