ORACLE SQL输入的变量由于隐式转换无法使用索引的分析优化

近期,某客户在巡检分析AWR报告时,发现有个TOP SQL的执行效率偏慢,检查分析SQL,发现数据块读取量高,分析执行计划,发现有个查询条件未使用到索引;

对执行计划及表上的字段、索引进行分析,可以发现表上对应字段是有索引的;深入分析执行计划的Predicate Information部分,可以发现有:access("SOO"."PO"=SYS_OP_C2C("A"."PORDER_NO") AND,  SYS_OP_C2C是ORACLE的一个内部函数,它在VARCHAR2和NVARCHAR2数据类型之间进行转换。当必须执行隐式数据类型转换时,它由SQL引擎添加。

查看字段类型,确认是PORDER_NO   VARCHAR2(20):

SQL> desc test.TESTDATA;Name                                                                                                              Null?    Type----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------ID                                                                                                                NOT NULL VARCHAR2(36)REC_CREATOR                                                                                                                VARCHAR2(24)REC_CREATE_TIME                                                                                                            DATEREC_REVISOR                                                                                                                VARCHAR2(24)REC_REVISE_TIME                                                                                                            DATEPORDER_NO                                                                                                                  VARCHAR2(20)
……

分析过程如下:

1、SQL执行信息统计

SQL> set linesize 180 pagesize 1800
SQL> select sql_id,PLAN_HASH_VALUE,CHILD_number,EXECUTIONS,BUFFER_GETS/EXECUTIONS,ELAPSED_TIME/EXECUTIONS/1000 from v$sql where sql_id='bh0f095aumxth';SQL_ID        PLAN_HASH_VALUE CHILD_NUMBER EXECUTIONS BUFFER_GETS/EXECUTIONS ELAPSED_TIME/EXECUTIONS/1000
------------- --------------- ------------ ---------- ---------------------- ----------------------------
bh0f095aumxth      3442512347            0       7036             166804.411                   909.259484
bh0f095aumxth      3442512347            1       2234              167502.39                   928.837742

2、对表字段等数据的统计

SQL> select count(*) from test.TESTDATA;COUNT(*)
----------4294427SQL> select count(distinct PORDER_NO) from test.TESTDATA;COUNT(DISTINCTPORDER_NO)
------------------------230261

3、索引信息

SQL> set linesize 180 pagesize 180
SQL> col owner for a15
SQL> col COLUMN_NAME for a20
SQL> col index_name for a20
SQL> col table_name for a20
SQL> select  a.OWNER,a.INDEX_NAME,a.table_name,b.column_name,a.status,b.column_length from dba_indexes a,dba_IND_COLUMNS b 2   where a.index_name=b.index_name and a.owner=b.INDEX_OWNER and a.TABLE_OWNER=b.TABLE_OWNER and a.owner='test' and  a.TABLE_NAME in(upper('TESTDATA'));OWNER           INDEX_NAME           TABLE_NAME           COLUMN_NAME          STATUS   COLUMN_LENGTH
--------------- -------------------- -------------------- -------------------- -------- -------------
test      IDX_TESTDATA_PORD TESTDATA          PORDER_NO            VALID               20ER_NO
test      IDX_TESTDATA_PORM TESTDATA          PORDER_NO            VALID               20SC
test      IDX_TESTDATA_PORM TESTDATA          MSC_LINE_NO          VALID                4SC
test      IDX_SPEC_AIM         TESTDATA          OUT_SPEC_AIM         VALID               22
test      TESTDATA_PK       TESTDATA          ID                   VALID               36

4、使用SQL自动优化进行分析,建议添加函数索引

SQL> set serveroutput on
SQL> var tuning_task varchar2(100);  
SQL> DECLARE  2    l_sql_id v$session.prev_sql_id%TYPE;  3    l_tuning_task VARCHAR2(30);  4  BEGIN  5    l_sql_id:='bh0f095aumxth';  6    l_tuning_task := dbms_sqltune.create_tuning_task(sql_id => l_sql_id);  7    :tuning_task:=l_tuning_task;  8    dbms_sqltune.execute_tuning_task(l_tuning_task);  9    dbms_output.put_line(l_tuning_task);  10  END;  11  /
TASK_67147PL/SQL procedure successfully completed.SQL> set long 999999
SQL> set LONGCHUNKSIZE 999999
SQL> set serveroutput on size 999999
SQL> set linesize 200 pagesize 1000
SQL> SELECT dbms_sqltune.report_tuning_task('TASK_67147') FROM dual; DBMS_SQLTUNE.REPORT_TUNING_TASK('TASK_67147')
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GENERAL INFORMATION SECTION
-------------------------------------------------------------------------------
Tuning Task Name   : TASK_67147
Tuning Task Owner  : SYS
Workload Type      : Single SQL Statement
Scope              : COMPREHENSIVE
Time Limit(seconds): 1800
Completion Status  : COMPLETED
Started at         : 04/17/2025 15:33:52
Completed at       : 04/17/2025 15:34:18-------------------------------------------------------------------------------
Schema Name: WIPDBA
SQL ID     : bh0f095aumxth
SQL Text   : SELECT A.TREAT_DESC TH,A.MTR_TYPE_DESC AS CZ  ,B.TREAT_DESC ASSDTH,B.MTR_TYPE_DESC AS SDCZ  FROM VIEWER.V_QM_ORDER_MTR_DATA ALEFT JOIN VIEWER.V_QM_ORDER_MTR_DATA B ON A.PORDER_NO =B.PORDER_NO AND B.WHOLE_BACKLOG_SEQ = A.WHOLE_BACKLOG_SEQ-1INNER JOIN WIPDBA.Z_SHOPORDER_OMORDER SOO ON A.PORDER_NO =SOO.PO AND SOO.STEP_ID = A.WHOLE_BACKLOG_SEQ  INNER JOINWIPDBA.SHOP_ORDER SO ON SO.HANDLE = SOO.SHOPORDER_BO   WHEREA.WHOLE_BACKLOG_CODE =  :1   AND SO.SHOP_ORDER = :2
Bind Variables :1 -  (VARCHAR2(32)):Q2 -  (VARCHAR2(128)):SOB05-B250410002-------------------------------------------------------------------------------
FINDINGS SECTION (2 findings)
-------------------------------------------------------------------------------1- SQL Profile Finding (see explain plans section below)
--------------------------------------------------------A potentially better execution plan was found for this statement.Recommendation (estimated benefit<=10%)---------------------------------------- Consider accepting the recommended SQL profile.execute dbms_sqltune.accept_sql_profile(task_name => 'TASK_67147',task_owner => 'SYS', replace => TRUE);Validation results------------------The SQL profile was tested by executing both its plan and the original planand measuring their respective execution statistics. A plan may have beenonly partially executed if the other could be run to completion in less time.Original Plan  With SQL Profile  % Improved-------------  ----------------  ----------Completion Status:            COMPLETE          COMPLETEElapsed Time (s):            1.461191          1.002437      31.39 %CPU Time (s):                1.453814          1.001961      31.08 %User I/O Time (s):                  0                 0Buffer Gets:                   185326            173791       6.22 %Physical Read Requests:             7                 7          0 %Physical Write Requests:            0                 0Physical Read Bytes:           114688            114688          0 %Physical Write Bytes:               0                 0Rows Processed:                     1                 1Fetches:                            1                 1Executions:                         1                 12- Index Finding (see explain plans section below)
--------------------------------------------------The execution plan of this statement can be improved by creating one or moreindices.Recommendation (estimated benefit: 99.74%)------------------------------------------- Consider running the Access Advisor to improve the physical schema designor creating the recommended index.create index test.IDX$$_1064B0001 ontest.TESTDATA(SYS_OP_C2C("PORDER_NO"),"WHOLE_BACKLOG_SEQ");Rationale---------Creating the recommended indices significantly improves the execution planof this statement. However, it might be preferable to run "Access Advisor"using a representative SQL workload as opposed to a single statement. Thiswill allow to get comprehensive index recommendations which takes intoaccount index maintenance overhead and additional space consumption.-------------------------------------------------------------------------------
EXPLAIN PLANS SECTION
-------------------------------------------------------------------------------1- Original With Adjusted Cost
------------------------------
Plan hash value: 2019886439-----------------------------------------------------------------------------------------------------------
| Id  | Operation                        | Name                   | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                 |                        |    22 |  4840 |  5209K  (1)| 00:03:24 |
|   1 |  NESTED LOOPS                    |                        |    22 |  4840 |  5209K  (1)| 00:03:24 |
|   2 |   NESTED LOOPS OUTER             |                        |    22 |  4378 |  5209K  (1)| 00:03:24 |
|*  3 |    HASH JOIN                     |                        |    22 |  3036 | 55372   (2)| 00:00:03 |
|   4 |     NESTED LOOPS                 |                        |     1 |   105 |     5   (0)| 00:00:01 |
|   5 |      NESTED LOOPS                |                        |     1 |   105 |     5   (0)| 00:00:01 |
|   6 |       TABLE ACCESS BY INDEX ROWID| SHOP_ORDER             |     1 |    53 |     4   (0)| 00:00:01 |
|*  7 |        INDEX RANGE SCAN          | IDX_SHOP_ORDER         |     1 |       |     3   (0)| 00:00:01 |
|*  8 |       INDEX RANGE SCAN           | INDEX_SHOPORDER_BO     |     1 |       |     0   (0)| 00:00:01 |
|   9 |      TABLE ACCESS BY INDEX ROWID | Z_SHOPORDER_OMORDER    |     1 |    52 |     1   (0)| 00:00:01 |
|* 10 |     TABLE ACCESS FULL            | TESTDATA            |  1271K|    40M| 55353   (2)| 00:00:03 |
|* 11 |    VIEW PUSHED PREDICATE         | V_QM_ORDER_MTR_DATA    |     1 |    61 |   234K  (1)| 00:00:10 |
|  12 |     NESTED LOOPS                 |                        |    58 |  3016 |   234K  (1)| 00:00:10 |
|  13 |      NESTED LOOPS                |                        |   242K|  3016 |   234K  (1)| 00:00:10 |
|* 14 |       INDEX RANGE SCAN           | OM_LINE_DATA_IDX01     |   242K|  4983K|     3   (0)| 00:00:01 |
|* 15 |       INDEX RANGE SCAN           | IDX_TESTDATA_PORMSC |     1 |       |     0   (0)| 00:00:01 |
|  16 |      TABLE ACCESS BY INDEX ROWID | TESTDATA            |     1 |    31 |     1   (0)| 00:00:01 |
|* 17 |   INDEX RANGE SCAN               | OM_LINE_DATA_IDX01     |     1 |    21 |     0   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------3 - access("SOO"."PO"=SYS_OP_C2C("A"."PORDER_NO") AND"A"."WHOLE_BACKLOG_SEQ"=TO_NUMBER("SOO"."STEP_ID"))7 - access("SO"."SHOP_ORDER"=SYS_OP_C2C(:2))8 - access("SO"."HANDLE"="SOO"."SHOPORDER_BO")10 - filter("A"."WHOLE_BACKLOG_CODE"=:1)11 - filter("B"."WHOLE_BACKLOG_SEQ"(+)="A"."WHOLE_BACKLOG_SEQ"-1)14 - access("B"."PORDER_NO"="A"."PORDER_NO")filter(TO_NUMBER("B"."DEFAULT_FLAG")=0)15 - access("A"."PORDER_NO"="A"."PORDER_NO" AND "A"."MSC_LINE_NO"="B"."MSC_LINE_NO")filter("A"."PORDER_NO"="B"."PORDER_NO")17 - access("A"."PORDER_NO"="B"."PORDER_NO" AND "A"."MSC_LINE_NO"="B"."MSC_LINE_NO")filter(TO_NUMBER("B"."DEFAULT_FLAG")=0)2- Using SQL Profile
--------------------
Plan hash value: 330716963----------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                | Name                      | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                         |                           |     7 |  1540 | 55407   (2)| 00:00:03 |
|   1 |  NESTED LOOPS OUTER                      |                           |     7 |  1540 | 55407   (2)| 00:00:03 |
|   2 |   NESTED LOOPS                           |                           |     7 |  1113 | 55372   (2)| 00:00:03 |
|*  3 |    HASH JOIN                             |                           |    22 |  3036 | 55372   (2)| 00:00:03 |
|   4 |     NESTED LOOPS                         |                           |     1 |   105 |     5   (0)| 00:00:01 |
|   5 |      NESTED LOOPS                        |                           |     1 |   105 |     5   (0)| 00:00:01 |
|   6 |       TABLE ACCESS BY INDEX ROWID BATCHED| SHOP_ORDER                |     1 |    53 |     4   (0)| 00:00:01 |
|*  7 |        INDEX RANGE SCAN                  | IDX_SHOP_ORDER            |     1 |       |     3   (0)| 00:00:01 |
|*  8 |       INDEX RANGE SCAN                   | INDEX_SHOPORDER_BO        |     1 |       |     0   (0)| 00:00:01 |
|   9 |      TABLE ACCESS BY INDEX ROWID         | Z_SHOPORDER_OMORDER       |     1 |    52 |     1   (0)| 00:00:01 |
|* 10 |     TABLE ACCESS FULL                    | TESTDATA               |  1271K|    40M| 55353   (2)| 00:00:03 |
|* 11 |    INDEX RANGE SCAN                      | OM_LINE_DATA_IDX01        |     1 |    21 |     0   (0)| 00:00:01 |
|* 12 |   VIEW PUSHED PREDICATE                  | V_QM_ORDER_MTR_DATA       |     1 |    61 |     5   (0)| 00:00:01 |
|  13 |    NESTED LOOPS                          |                           |    58 |  3016 |     5   (0)| 00:00:01 |
|  14 |     TABLE ACCESS BY INDEX ROWID BATCHED  | TESTDATA               |    19 |   589 |     5   (0)| 00:00:01 |
|* 15 |      INDEX RANGE SCAN                    | IDX_TESTDATA_PORDER_NO |    19 |       |     3   (0)| 00:00:01 |
|* 16 |     INDEX RANGE SCAN                     | OM_LINE_DATA_IDX01        |     3 |    63 |     0   (0)| 00:00:01 |
----------------------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------3 - access("SOO"."PO"=SYS_OP_C2C("A"."PORDER_NO") AND "A"."WHOLE_BACKLOG_SEQ"=TO_NUMBER("SOO"."STEP_ID"))7 - access("SO"."SHOP_ORDER"=SYS_OP_C2C(:2))8 - access("SO"."HANDLE"="SOO"."SHOPORDER_BO")10 - filter("A"."WHOLE_BACKLOG_CODE"=:1)11 - access("A"."PORDER_NO"="B"."PORDER_NO" AND "A"."MSC_LINE_NO"="B"."MSC_LINE_NO")filter(TO_NUMBER("B"."DEFAULT_FLAG")=0)12 - filter("B"."WHOLE_BACKLOG_SEQ"(+)="A"."WHOLE_BACKLOG_SEQ"-1)15 - access("A"."PORDER_NO"="A"."PORDER_NO")16 - access("B"."PORDER_NO"="A"."PORDER_NO" AND "A"."MSC_LINE_NO"="B"."MSC_LINE_NO")filter("A"."PORDER_NO"="B"."PORDER_NO" AND TO_NUMBER("B"."DEFAULT_FLAG")=0)3- Using New Indices
--------------------
Plan hash value: 2552130591----------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                 | Name                      | Rows  | Bytes | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
----------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                          |                           |    13 |  2860 |   143   (1)| 00:00:01 |        |      |          |
|   1 |  PX COORDINATOR                           |                           |       |       |            |          |        |      |          |
|   2 |   PX SEND QC (RANDOM)                     | :TQ10001                  |    13 |  2860 |   143   (1)| 00:00:01 |  Q1,01 | P->S | QC (RAND)  |
|   3 |    NESTED LOOPS OUTER                     |                           |    13 |  2860 |   143   (1)| 00:00:01 |  Q1,01 | PCWP |          |
|   4 |     NESTED LOOPS                          |                           |    13 |  2067 |   106   (0)| 00:00:01 |  Q1,01 | PCWP |          |
|   5 |      NESTED LOOPS                         |                           |    39 |  5382 |   106   (0)| 00:00:01 |  Q1,01 | PCWP |          |
|   6 |       NESTED LOOPS                        |                           |     1 |   105 |     5   (0)| 00:00:01 |  Q1,01 | PCWP |          |
|   7 |        TABLE ACCESS BY INDEX ROWID BATCHED| SHOP_ORDER                |     2 |   106 |     4   (0)| 00:00:01 |  Q1,01 | PCWP |          |
|   8 |         BUFFER SORT                       |                           |       |       |            |          |  Q1,01 | PCWC |          |
|   9 |          PX RECEIVE                       |                           |     1 |       |     3   (0)| 00:00:01 |  Q1,01 | PCWP |          |
|  10 |           PX SEND HASH (BLOCK ADDRESS)    | :TQ10000                  |     1 |       |     3   (0)| 00:00:01 |  Q1,00 | S->P | HASH (BLOCK|
|  11 |            PX SELECTOR                    |                           |       |       |            |          |  Q1,00 | SCWC |          |
|* 12 |             INDEX RANGE SCAN              | IDX_SHOP_ORDER            |     1 |       |     3   (0)| 00:00:01 |  Q1,00 | SCWP |          |
|  13 |        TABLE ACCESS BY INDEX ROWID BATCHED| Z_SHOPORDER_OMORDER       |     1 |    52 |     1   (0)| 00:00:01 |  Q1,01 | PCWP |          |
|* 14 |         INDEX RANGE SCAN                  | INDEX_SHOPORDER_BO        |     1 |       |     0   (0)| 00:00:01 |  Q1,01 | PCWP |          |
|* 15 |       TABLE ACCESS BY INDEX ROWID BATCHED | TESTDATA               |    39 |  1287 |   182   (0)| 00:00:01 |  Q1,01 | PCWP |          |
|* 16 |        INDEX RANGE SCAN                   | IDX$$_1064B0001           |   415 |       |     0   (0)| 00:00:01 |  Q1,01 | PCWP |          |
|* 17 |      INDEX RANGE SCAN                     | OM_LINE_DATA_IDX01        |     1 |    21 |     0   (0)| 00:00:01 |  Q1,01 | PCWP |          |
|* 18 |     VIEW PUSHED PREDICATE                 | V_QM_ORDER_MTR_DATA       |     1 |    61 |     5   (0)| 00:00:01 |  Q1,01 | PCWP |          |
|  19 |      NESTED LOOPS                         |                           |    58 |  3016 |     5   (0)| 00:00:01 |  Q1,01 | PCWP |          |
|  20 |       TABLE ACCESS BY INDEX ROWID BATCHED | TESTDATA               |    19 |   589 |     5   (0)| 00:00:01 |  Q1,01 | PCWP |          |
|* 21 |        INDEX RANGE SCAN                   | IDX_TESTDATA_PORDER_NO |    19 |       |     3   (0)| 00:00:01 |  Q1,01 | PCWP |          |
|* 22 |       INDEX RANGE SCAN                    | OM_LINE_DATA_IDX01        |     3 |    63 |     0   (0)| 00:00:01 |  Q1,01 | PCWP |          |
----------------------------------------------------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------12 - access("SO"."SHOP_ORDER"=SYS_OP_C2C(:2))14 - access("SO"."HANDLE"="SOO"."SHOPORDER_BO")15 - filter("A"."WHOLE_BACKLOG_CODE"=:1)16 - access("SOO"."PO"="TESTDATA"."SYS_QSMMIX_VCOL_5001" AND "A"."WHOLE_BACKLOG_SEQ"=TO_NUMBER("SOO"."STEP_ID"))17 - access("A"."PORDER_NO"="B"."PORDER_NO" AND "A"."MSC_LINE_NO"="B"."MSC_LINE_NO")filter(TO_NUMBER("B"."DEFAULT_FLAG")=0)18 - filter("B"."WHOLE_BACKLOG_SEQ"(+)="A"."WHOLE_BACKLOG_SEQ"-1)21 - access("A"."PORDER_NO"="A"."PORDER_NO")22 - access("B"."PORDER_NO"="A"."PORDER_NO" AND "A"."MSC_LINE_NO"="B"."MSC_LINE_NO")filter("A"."PORDER_NO"="B"."PORDER_NO" AND TO_NUMBER("B"."DEFAULT_FLAG")=0)

5、添加索引后,查看SQL执行效率已经提升,单次SQL执行的读取数据库从16W下降到50个。

SQL> create index test.IDX$$_1064B0001 on test.TESTDATA(SYS_OP_C2C("PORDER_NO")) online;Index created.SQL> SQL> SQL> SQL>  select sql_id,PLAN_HASH_VALUE,CHILD_number,EXECUTIONS,BUFFER_GETS/EXECUTIONS,ELAPSED_TIME/EXECUTIONS/1000 from v$sql where sql_id='bh0f095aumxth';SQL_ID        PLAN_HASH_VALUE CHILD_NUMBER EXECUTIONS BUFFER_GETS/EXECUTIONS ELAPSED_TIME/EXECUTIONS/1000
------------- --------------- ------------ ---------- ---------------------- ----------------------------
bh0f095aumxth      3442512347            0       7104              166868.53                   909.808189
bh0f095aumxth      3442512347            1       2266             167586.396                   929.766665
新的执行计划:
SQL> /SQL_ID        PLAN_HASH_VALUE CHILD_NUMBER EXECUTIONS BUFFER_GETS/EXECUTIONS ELAPSED_TIME/EXECUTIONS/1000
------------- --------------- ------------ ---------- ---------------------- ----------------------------
bh0f095aumxth      1882491329            0         60             51.9166667                   3.27771667

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/77768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【锂电池SOH估计】RF随机森林锂电池健康状态估计,锂电池SOH估计(Matlab完整源码和数据)

目录 效果一览程序获取程序内容代码分享研究内容基于随机森林(RF)的锂电池健康状态(SOH)估计算法研究摘要1. 引言2. 锂电池SOH评估框架3. 实验与结果分析4. 未来研究方向6. 结论效果一览 程序获取 获取方式一:文章顶部资源处直接下载:【锂电池SOH估计】RF随机森林锂电池…

安全高效两不误,这款安全数据摆渡系统支持8种传输协议

安全高效两不误&#xff01;这款安全数据摆渡系统支持8种传输协议 传统的安全数据摆渡系统主要包括物理介质拷贝&#xff08;如光盘、U盘&#xff09;、网闸、光闸、防火墙文件交换模块等&#xff0c;这些安全数据摆渡系统和传输方式在传输协议支持及功能实现上各有优劣势。 …

(51单片机)LCD显示温度(DS18B20教程)(LCD1602教程)(延时函数教程)(单总线教程)

演示视频&#xff1a; LCD显示温度 源代码 如上图将9个文放在Keli5 中即可&#xff0c;然后烧录在单片机中就行了 烧录软件用的是STC-ISP&#xff0c;不知道怎么安装的可以去看江科大的视频&#xff1a; 【51单片机入门教程-2020版 程序全程纯手打 从零开始入门】https://www.…

【愚公系列】《Python网络爬虫从入门到精通》063-项目实战电商数据侦探(主窗体的数据展示)

&#x1f31f;【技术大咖愚公搬代码&#xff1a;全栈专家的成长之路&#xff0c;你关注的宝藏博主在这里&#xff01;】&#x1f31f; &#x1f4e3;开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主&#xff01; &#x1f…

日志分析工具快速统计电商系统单位时间内的请求总数

一、常用日志分析工具及操作步骤 ‌ELK Stack(Elasticsearch + Logstash + Kibana)‌核心操作‌ 日志收集‌:通过Logstash配置日志输入(如Nginx日志文件),使用grok插件解析日志格式。 数据存储‌:将解析后的日志存入Elasticsearch,利用其分布式搜索能力快速索引数据。…

Win10一体机(MES电脑设置上电自动开机)

找个键盘&#xff0c;带线的那种&#xff0c;插到电脑上&#xff0c;电脑开机&#xff1b;连续点按F11&#xff1b;通过↑↓键选择Enter Setup 然后回车&#xff1b; 选择 smart settings &#xff1b; 选择 Restore AC Power Loss By IO 回车&#xff1b; 将prower off 改为…

crontab 定时备份 mysql 数据库

1、使用 mysqldump 命令备份数据 1.1 备份全部数据库的数据和结构 mysqldump -uroot -p123456 -A > /data/backup/db.sql1.2 备份全部数据库的结构&#xff08;加 -d 参数&#xff09; mysqldump -uroot -p123456 -A -d > /data/backup/db.sql1.3 备份全部数据库的数据…

【Git】branch合并分支

在 Git 中&#xff0c;将分支合并到 main 分支是一个常见的操作。以下是详细的步骤和说明&#xff0c;帮助你完成这个过程。 1. 确保你在正确的分支上 首先&#xff0c;你需要确保当前所在的分支是 main 分支&#xff08;或者你要合并到的目标分支&#xff09;。 检查当前分支…

基于Python+Pytest实现自动化测试(全栈实战指南)

目录 第一篇&#xff1a;基础篇 第1章 自动化测试概述 1.1 什么是自动化测试 第2章 环境搭建与工具链配置 2.1 Python环境安装&#xff08;Windows/macOS/Linux&#xff09; 2.2 虚拟环境管理 2.3 Pytest基础配置&#xff08;pytest.ini&#xff09; 第3章 Pytest核心语…

什么是CRM系统,它的作用是什么?CRM全面指南

CRM&#xff08;Customer Relationship Management&#xff0c;客户关系管理&#xff09;系统是一种专门用于集中管理客户信息、优化销售流程、提升客户满意度、支持精准营销、驱动数据分析决策、加强跨部门协同、提升客户生命周期价值的业务系统工具。其中&#xff0c;优化销售…

纷析云开源财务软件:助力企业实现数字化自主权

在数字化转型浪潮中&#xff0c;企业财务管理面临高成本、低灵活性、数据孤岛等痛点。纷析云开源财务软件&#xff08;项目地址&#xff1a;https://gitee.com/shenxji/fxy&#xff09;凭借其开源基因与模块化设计&#xff0c;为企业提供了一条“低成本、高可控”的数字化路径。…

飞搭系列 | 组件增加标记,提升用户体验

前言 Preface 飞搭低代码平台&#xff08;FeiDa&#xff0c;以下简称“飞搭”&#xff09;&#xff0c;为企业提供在线化、灵活的业务应用构建工具&#xff0c;支持高低代码融合&#xff0c;助力企业低门槛、高效率和低成本地快速应对市场变化&#xff0c;加速复杂业务场景落地…

Docker 部署 Redis 缓存服务

Docker 部署 Redis 缓存服务 基于 Docker 部署 Redis 缓存服务一、拉取 Redis 镜像二、运行 Redis 容器三、运行命令参数详解四、查看容器运行状态 基于 Docker 部署 Redis 缓存服务 一、拉取 Redis 镜像 确保 Docker 环境已正确安装并运行&#xff0c;打开终端执行以下命令拉…

yarn的介绍与操作,yarn和npm的选择

&#x1f9f6; 一、Yarn 是什么&#xff1f; Yarn 是由 Facebook&#xff08;Meta&#xff09;开发的 JavaScript 包管理工具&#xff0c;用于替代 npm&#xff0c;解决它在早期版本中存在的一些问题。 ✅ Yarn 的优势&#xff08;v1.x&#xff09;&#xff1a; &#x1f4e…

vivado XMP使用

vivado XMP使用 文章目录 vivado XMP使用前言一、xpm_cdc_async_rst二、XPM_CDC_ARRAY_SINGLE三、XPM_CDC_PULSE四、 XPM_CDC_SINGLE五、 xpm_cdc_sync_rst总结 前言 使用XMP做跨时钟域&#xff0c;方便的是官方认证&#xff0c;好用且不会爆时序问题&#xff0c;懒得写 set fl…

P3416-图论-法1.BFS / 法2.Floyd

这道题虽然标签有floyd但是直接bfs也能过 其实事实证明还是bfs快&#xff0c;因为bfs只需要遍历特定的点&#xff0c;但是floyd需要考虑遍历所有可能的中介点 法1.BFS 用字典存储每个点所能普及的范围&#xff0c;然后用对每个点bfs进行拓展 nint(input())temp[]#xmax0;yma…

科普动画短视频制作:角色塑造的魅力法则

宝子们&#xff0c;在科普动画短视频的世界里&#xff0c;角色塑造可是让作品出彩的关键&#xff01;今天就来和大家唠唠那些超实用的角色塑造法则&#xff0c;还会给大家推荐一款超好用的工具哦~ 一、独特外形&#xff0c;吸睛第一步 在科普动画短视频制作中&#xff0c;角色…

代理模式(Proxy Pattern)详解:以延迟加载图片为例

在日常开发中&#xff0c;是否遇到过以下问题&#xff1a; “程序启动时图片太多&#xff0c;加载太慢&#xff01;” “用户还没看到图片就已经开始加载了&#xff0c;性能浪费&#xff01;” 此时&#xff0c;代理模式&#xff08;Proxy Pattern&#xff09;便派上了用场。本…

C++学习笔记(三十六)——STL之排序算法

一、STL 算法 C的STL&#xff08;Standard Template Library&#xff09; 提供了一组高效、通用的算法&#xff0c;这些算法适用于各种容器&#xff08;如 vector、list、set、map&#xff09;。 这些算法主要位于 <algorithm> 和 <numeric> 头文件中。 通用性&a…

Java基于SpringBoot的企业车辆管理系统,附源码+文档说明

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…