oracle稳定执行计划
二、稳定执行计划
(一)sql profile的好处
稳定执行计划
在不能修改目标sql的sql文本的情况下使目标sql语句按照指定的执行计划运行。
1、automatic类型的sql profile
本质是针对目标sql的一些额外的调整信息,这些额外的调整信息需要与原目标sql的相关统计信息等内容一起作用才能得到新的执行计划,即原始sql的统计信息等内容一旦发生变化,即使原有的automatic类型的sql profile并没有改变,该sql的执行计划也可能发生变化。
SQL> exec dbms_sqltune.accept_sql_profile(task_name =>'my_sql_tuning_task_4',task_owner =>'SCOTT',replace => TRUE,force_match=>true);
说明:
force_match=>true 相当于绑定变量
(1)t1表原本有索引idx_t1,使用hint让它不走索引
SQL> grant select on v_$session to scott;
SQL> grant select on v_$sql_plan_statistics_all to scott;
SQL> grant select on v_$sql_plan to scott;
SQL> connect scott/tiger;
SQL> create table t1(n number);
SQL> declare
2 begin
3 for i in 1 .. 10000
4 loop
5 insert into t1 values(i);
6 commit;
7 end loop;
8 end;
9 /
SQL> select count(*) from t1;
COUNT(*)
----------
10000
SQL> create index idx_t1 on t1(n);
SQL> exec dbms_stats.gather_table_stats(ownname=>'SCOTT',tabname=>'T1',method_opt=>'for all columns size 1',CASCADE=>true);
SQL> select /*+ no_index(t1 idx_t1) */ * from t1 where n=1
SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
该执行计划会走全表扫描
(2)建立一个自动调整任务(my_sql_tuning_task_4)
SQL> declare
2 my_task_name VARCHAR2(30);
3 my_sqltext CLOB;
4 begin
5 my_sqltext := 'select /*+ no_index(t1 idx_t1) */ * from t1 where n=1';
6 my_task_name := dbms_sqltune.create_tuning_task(
7 sql_text => my_sqltext,
8 user_name => 'SCOTT',
9 scope => 'COMPREHENSIVE',
10 time_limit => 60,
11 task_name => 'my_sql_tuning_task_4',
12 description => 'Task to tune a query on table t1');
13 END;
14 /
(备注:删除自动任务 : exec dbms_sqltune.drop_tuning_task('my_sql_tuning_task_4');
补充:删除sql_profile : exec dbms_sqltune.drop_sql_profile(name =>'my_sql_tuning_task_4');
(3)执行上述自动调整任务
SQL> begin
2 dbms_sqltune.execute_tuning_task(task_name => 'my_sql_tuning_task_4');
3 end;
4 /
(4)查看该自动调整任务的结果确实走了索引。
SQL> set long 900
SQL> set longchunksize 1000
SQL> set linesize 800
SQL> select dbms_sqltune.report_tuning_task('my_sql_tuning_task_4') from dual;
(5)接受这个sql profile
SQL> exec dbms_sqltune.accept_sql_profile(task_name =>'my_sql_tuning_task_4',task_owner =>'SCOTT',replace => TRUE,force_match=>true);
(补充:删除sql_profile : exec dbms_sqltune.drop_sql_profile(name =>'my_sql_tuning_task_4');
(6)接着再执行如下sql时会走索引
SQL> select /*+ no_index(t1 idx_t1) */ * from t1 where n=20
SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
2、manual类型的sql profile
本质是一堆hint的组合。这一堆hint的组合实际上来源于执行计划中outline data部分的hint组合。manual类型的sql profile可以起到很好的稳定目标sql的执行计划的作用。
使用脚本coe_xfr_sql_profile.sql针对目标sql生成manual类型的sql profile,并通过"偷梁换柱"的方式在不修改目标sql的sql文本的情况下调整其执行计划。
步骤如下:
(1)针对目标sql使用脚本coe_xfr_sql_profile.sql产生能生成其manual类型的sql profile的脚本A.
(2)改写目标sql的文本,在其中使用合适的hint,直到加入hint后的sql能走出我们想要的执行计划。然后对加入合适hint后的sql使用脚本coe_xfr_sql_profile.sql,产生能生成其manual类型的sql profile的脚本B
(3)用脚本B中的Outline Data部分的hint组合替换掉脚本A中的Outline Data部分的hint组合。
(4)执行脚本A生成针对原目标sql的manual类型的sql profile.
SQL> select /*+ no_index(t1 idx_t1) */ * from t1 where n=20;
因为上一步automatic类型的sql profile使用了自动调整任务,所以该sql的执行计划会走索引
SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
INDEX RANGE SCAN
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
- SQL profile coe_gkdzg1fk71sc0_3617692013 used for this statement
删除sql profile
SQL> exec dbms_sqltune.drop_sql_profile('coe_gkdzg1fk71sc0_3617692013');
执行走索引的profile
SQL> select /*+ index(t1 idx_t1) */ * from t1 where n=20;
SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
PLAN_TABLE_OUTPUT
SQL_ID 2a4g5h03mm877, child number 0
Plan hash value: 1369807930
|* 1 | INDEX RANGE SCAN| IDX_T1 | 1 | 4 | 1 (0)| 00:00:01 |
SQL> col SQL_TEXT for a85
SQL> set pagesize 900;
SQL> set linesize 900;
SQL> select sql_text,sql_id,version_count from v$sqlarea where sql_text like '%n=20%'
SQL_TEXT SQL_ID VERSION_COUNT
---------------------------------------------------------------------------------- ------------- -------------
select /*+ no_index(t1 idx_t1) */ * from t1 where n=20 fyrgtpxw26btv 1
select /*+ index(t1 idx_t1) */ * from t1 where n=20 2a4g5h03mm877 1
select sql_text,sql_id,version_count from v$sqlarea where sql_text like '%n=20%' gtfnngky67bj6 1
原sql对应的plan_hash_value
SQL> select plan_hash_value from v$sql where sql_id='fyrgtpxw26btv';
PLAN_HASH_VALUE
3617692013
加了强制索引的sql对应的plan_hash_value
SQL> select plan_hash_value from v$sql where sql_id='2a4g5h03mm877';
PLAN_HASH_VALUE
---------------
1369807930
针对原sql使用脚本coe_xfr_sql_profile.sql产生能生产其manual类型sql profile脚本。
SQL> @?/rdbms/admin/coe_xfr_sql_profile.sql; (oracle官方文档ID 215187.1)
Parameter 1:
SQL_ID (required)
Enter value for 1: fyrgtpxw26btv
PLAN_HASH_VALUE AVG_ET_SECS
--------------- -----------
3617692013 .006
Parameter 2:
PLAN_HASH_VALUE (required)
Enter value for 2: 3617692013
Values passed to coe_xfr_sql_profile:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL_ID : "fyrgtpxw26btv"
PLAN_HASH_VALUE: "3617692013"
SQL>BEGIN
2 IF :sql_text IS NULL THEN
3 RAISE_APPLICATION_ERROR(-20100, 'SQL_TEXT for SQL_ID &&sql_id. was not found in memory (gv$sqltext_with_newlines) or AWR (dba_hist_sqltext).');
4 END IF;
5 END;
6 /
SQL>SET TERM OFF;
SQL>BEGIN
2 IF :other_xml IS NULL THEN
3 RAISE_APPLICATION_ERROR(-20101, 'PLAN for SQL_ID &&sql_id. and PHV &&plan_hash_value. was not found in memory (gv$sql_plan) or AWR (dba_hist_sql_plan).');
4 END IF;
5 END;
6 /
SQL>SET TERM OFF;
Execute coe_xfr_sql_profile_fyrgtpxw26btv_3617692013.sql
on TARGET system in order to create a custom SQL Profile
with plan 3617692013 linked to adjusted sql_text.
COE_XFR_SQL_PROFILE completed.
SQL>
针对强制索引的sqlsql使用脚本coe_xfr_sql_profile.sql产生能生产其manual类型sql profile脚本。
SQL>@?/rdbms/admin/coe_xfr_sql_profile.sql;
Parameter 1:
SQL_ID (required)
Enter value for 1: 2a4g5h03mm877
PLAN_HASH_VALUE AVG_ET_SECS
--------------- -----------
1369807930 .007
Parameter 2:
PLAN_HASH_VALUE (required)
Enter value for 2: 1369807930
Values passed to coe_xfr_sql_profile:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL_ID : "2a4g5h03mm877"
PLAN_HASH_VALUE: "1369807930"
SQL>BEGIN
2 IF :sql_text IS NULL THEN
3 RAISE_APPLICATION_ERROR(-20100, 'SQL_TEXT for SQL_ID &&sql_id. was not found in memory (gv$sqltext_with_newlines) or AWR (dba_hist_sqltext).');
4 END IF;
5 END;
6 /
SQL>SET TERM OFF;
SQL>BEGIN
2 IF :other_xml IS NULL THEN
3 RAISE_APPLICATION_ERROR(-20101, 'PLAN for SQL_ID &&sql_id. and PHV &&plan_hash_value. was not found in memory (gv$sql_plan) or AWR (dba_hist_sql_plan).');
4 END IF;
5 END;
6 /
SQL>SET TERM OFF;
Execute coe_xfr_sql_profile_2a4g5h03mm877_1369807930.sql
on TARGET system in order to create a custom SQL Profile
with plan 1369807930 linked to adjusted sql_text.
COE_XFR_SQL_PROFILE completed.
SQL>
参考coe_xfr_sql_profile_2a4g5h03mm877_1369807930.sql修改coe_xfr_sql_profile_fyrgtpxw26btv_3617692013.sql脚本内容,再执行coe_xfr_sql_profile_fyrgtpxw26btv_3617692013.sql脚本
h := SYS.SQLPROF_ATTR(
q'[BEGIN_OUTLINE_DATA]',
q'[IGNORE_OPTIM_EMBEDDED_HINTS]',
q'[OPTIMIZER_FEATURES_ENABLE('12.1.0.2')]',
q'[DB_VERSION('12.1.0.2')]',
q'[ALL_ROWS]',
q'[OUTLINE_LEAF(@"SEL$1")]',
q'[FULL(@"SEL$1" "T1"@"SEL$1")]',
q'[END_OUTLINE_DATA]');
改为
h := SYS.SQLPROF_ATTR(
q'[BEGIN_OUTLINE_DATA]',
q'[IGNORE_OPTIM_EMBEDDED_HINTS]',
q'[OPTIMIZER_FEATURES_ENABLE('12.1.0.2')]',
q'[DB_VERSION('12.1.0.2')]',
q'[ALL_ROWS]',
q'[OUTLINE_LEAF(@"SEL$1")]',
q'[INDEX(@"SEL$1" "T1"@"SEL$1" ("T1"."N"))]',
q'[END_OUTLINE_DATA]');
force_match=FALSE
改为
force_match=TRUE
执行coe_xfr_sql_profile_fyrgtpxw26btv_3617692013.sql脚本
SQL> @coe_xfr_sql_profile_fyrgtpxw26btv_3617692013.sql
SQL> connect scott/tiger;
Connected.
( 补充:删除sql_profile : exec DBMS_SQLTUNE.DROP_SQL_PROFILE(name =>'my_sql_tuning_task_4'); )
最后可以走索引。
SQL> select /*+ no_index(t1 idx_t1) */ * from t1 where n=20;
SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
|* 1 | INDEX RANGE SCAN| IDX_T1 | 1 | 4 | 1 (0)| 00:00:01 |
二、spm稳定执行计划
oracle 11g以及以上版本上,有如下2种方法产生目标sql的sql plan baseline:
自动捕获:
手工生成/批量导入(批量导入尤其适用于oracle数据库大版本升级,它可以确保升级后原有系统所有的sql的执行计划不会发生改变)
手工生成单个sql plan baseline的步骤
(1)针对目标sql使用dbms_spm.load_plans_from_cursor_cache手工生成其初始执行计划所对应的sql plan baseline,此时,使用dbms_spm.load_plans_from_cursor_cache传入的参数为:
dbms.spm.load_plans_from_cursor_cache
(
sql_id => '原目标sql的sql_id',
plan_hash_value =>'原目标sql的plan hash value'
)
(2)改写目标sql的sql文本,在其中加入合适的hint,直到加入hint后的所该写的sql能走出我们想要的执行计划,然后对改写后的sql使用dbms_spm.load_plans_from_cursor_cache手工生成新的执行计划所对应的sql plan baseline.此时,使用dbms_spm.load_plans_from_cursor_cache传入的参数为如下所示:
dbms.spm.load_plans_from_cursor_cache
(
sql_id => '加入合适hint后的改写sql的sql_id',
plan_hash_value =>'加入合适hint后的改写sql的plan hash value',
sql_handle=>'原目标sql在步骤(1)中所产生的sql plan baseline的sql_handle'
)
(3)使用dbms_spm.drop_sql_plan_baseline删除步骤(1)中手工生成的原目标sql的初始执行计划所对应的sql plan baseline.此时,使用dbms_spm.drop_sql_plan_baseline传入的参数为如下所示:
dbms_spm.drop_sql_plan_baseline
(
sql_handle=>'原目标sql在步骤(1)中所产生的sql plan baseline的sql_handle',
plan_name=>'原目标sql在步骤(1)中所产生的sql plan baseline的plan_name'
)
var temp varchar2(10000);
exec:temp:=dbms_spm.drop_sql_plan_baseline(sql_handle=>'SQL_75b06ae056223f5f',plan_name=>'SQL_PLAN_7bc3aw1b24guzb55f43d8');
exec:temp:=dbms_spm.drop_sql_plan_baseline(sql_handle=>'SQL_75b06ae056223f5f',plan_name=>'SQL_PLAN_7bc3aw1b24guzb860bcf2');
创建测试表,建立索引,收集统计信息,执行查询
SQL> create table t2 as select * from dba_objects;
SQL> create index idx_t2 on t2(object_id);
SQL> exec dbms_stats.gather_table_stats(ownname=>'SCOTT',tabname=>'T2',estimate_percent=>100,cascade=>true);
SQL> select /*+ no_index(t2 idx_t2) */object_name,object_id from t2 where object_id=4;
SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
SQL_ID 76td2qkxcrn9v, child number 0
Plan hash value: 1513984157
|* 1 | TABLE ACCESS FULL| T2 | 1 | 30 | 430 (1)| 00:00:01 |
--------------------------------------------------------------------------
没有开启sql_plan_baseline自动捕获,所以没有sql_plan_baseline
SQL> set pagesize 900;
SQL> set linesize 900;
SQL> col PLAN_NAME for a30;
SQL> col SQL_HANDLE for a25;
SQL> col SQL_TEXT for a80;
SQL> select sql_handle,plan_name,origin,enabled,accepted,sql_text from dba_sql_plan_baselines where sql_text like 'select /*+ no_index(t2 idx_t2) */object%';
no rows selected
SQL>
(1)
使用目标sql的初始执行计划(即对T2表的全表扫描)所对应的sql id 和plan hash_value 来手工生成对应的sql plan baseline
SQL > var temp number;
SQL> exec :temp := dbms_spm.load_plans_from_cursor_cache(sql_id =>'76td2qkxcrn9v',plan_hash_value=>1513984157);
PL/SQL procedure successfully completed
SQL> select sql_handle,plan_name,origin,enabled,accepted,sql_text from dba_sql_plan_baselines where sql_text like 'select /*+ no_index(t2 idx_t2) */object%';
SQL_HANDLE PLAN_NAME ORIGIN ENA ACC SQL_TEXT
------------------------- ------------------------------ -------------- --- --- --------------------------------------------------------------------------------
SQL_75b06ae056223f5f SQL_PLAN_7bc3aw1b24guzb860bcf2 MANUAL-LOAD YES YES select /*+ no_index(t2 idx_t2) */object_name,object_id from t2 where object_id=4
SQL>
改写目标sql,强制索引hint
SQL> select /*+ index(t2 idx_t2) */object_name,object_id from t2 where object_id=4;
SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
SQL_ID 795jg57h9tryx, child number 0
Plan hash value: 1306670842
|* 2 | INDEX RANGE SCAN | IDX_T2 | 1 | | 1 (0)| 00:00:01 |
原目标sql现在依然只有其原执行计划(即对T2表的全表扫描)所对应的sql plan baseline
SQL> select sql_handle,plan_name,origin,enabled,accepted,sql_text from dba_sql_plan_baselines where sql_text like 'select /*+ no_index(t2 idx_t2) */object%';
SQL_HANDLE PLAN_NAME ORIGIN ENA ACC SQL_TEXT
------------------------- ------------------------------ -------------- --- --- --------------------------------------------------------------------------------
SQL_75b06ae056223f5f SQL_PLAN_7bc3aw1b24guzb860bcf2 MANUAL-LOAD YES YES select /*+ no_index(t2 idx_t2) */object_name,object_id from t2 where object_id=4
SQL>
(2)
使用改写后的sql的新执行计划(强制索引hint)所对应的sql id 和plan hash_value 以及原目标sql的sql plan baseline的sql_handle来手工生成对应的sql plan baseline
SQL> exec :temp :=dbms_spm.load_plans_from_cursor_cache(sql_id =>'795jg57h9tryx',plan_hash_value=>1306670842,sql_handle=>'SQL_75b06ae056223f5f');
SQL> select sql_handle,plan_name,origin,enabled,accepted,sql_text from dba_sql_plan_baselines where sql_text like 'select /*+ no_index(t2 idx_t2) */object%';
SQL_HANDLE PLAN_NAME ORIGIN ENA ACC SQL_TEXT
------------------------- ------------------------------ -------------- --- --- --------------------------------------------------------------------------------
SQL_75b06ae056223f5f SQL_PLAN_7bc3aw1b24guzb55f43d8 MANUAL-LOAD YES YES select /*+ no_index(t2 idx_t2) */object_name,object_id from t2 where object_id=4
SQL_75b06ae056223f5f SQL_PLAN_7bc3aw1b24guzb860bcf2 MANUAL-LOAD YES YES select /*+ no_index(t2 idx_t2) */object_name,object_id from t2 where object_id=4
SQL>
(3)
drop 掉原执行计划(即对T2表的全表扫描)所对应的sql plan baseline
SQL> exec:temp:=dbms_spm.drop_sql_plan_baseline(sql_handle=>'SQL_75b06ae056223f5f',plan_name=>'SQL_PLAN_7bc3aw1b24guzb860bcf2');
SQL> select sql_handle,plan_name,origin,enabled,accepted,sql_text from dba_sql_plan_baselines where sql_text like 'select /*+ no_index(t2 idx_t2) */object%';
SQL_HANDLE PLAN_NAME ORIGIN ENA ACC SQL_TEXT
------------------------- ------------------------------ -------------- --- --- --------------------------------------------------------------------------------
SQL_75b06ae056223f5f SQL_PLAN_7bc3aw1b24guzb55f43d8 MANUAL-LOAD YES YES select /*+ no_index(t2 idx_t2) */object_name,object_id from t2 where object_id=4
SQL>
再次执行原目标sql
SQL> select /*+ no_index(t2 idx_t2) */object_name,object_id from t2 where object_id=4;
SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
SQL_ID 76td2qkxcrn9v, child number 1
Plan hash value: 1306670842
|* 2 | INDEX RANGE SCAN | IDX_T2 | 1 | | 1 (0)| 00:00:01 |
Note
- SQL plan baseline SQL_PLAN_7bc3aw1b24guzb55f43d8 used for this statement
相关文章:
oracle稳定执行计划
二、稳定执行计划 (一)sql profile的好处 稳定执行计划 在不能修改目标sql的sql文本的情况下使目标sql语句按照指定的执行计划运行。 1、automatic类型的sql profile 本质是针对目标sql的一些额外的调整信息,这些额外的调整信息需要与原目标s…...

docker安装neo4j
参考文章: 1、Mac 本地以 docker 方式配置 neo4j_neo4j mac docker_Abandon_first的博客-CSDN博客 2、https://www.cnblogs.com/caoyusang/p/13610408.html 安装的时候,参考了以上文章。遇到了一些问题,记录下自己的安装过程: …...

第十五章 定义 HL7 的 DTL 数据转换
文章目录 第十五章 定义 HL7 的 DTL 数据转换 第十五章 定义 HL7 的 DTL 数据转换 每个接口可能需要一定数量的数据转换。创建转换时,不要使用保留的包名称。 重要提示:请勿在数据转换中手动更改 HL7 转义序列;自动处理这些。 可以使用“数…...

【笔记】移动光猫改桥接
1. 登录后台 移动光猫的超管和密码(百度的) 账号:CMCCAdmin 密码:aDm8H%MdA 浏览器访问 192.168.1.1 并登录 2. 选择连接 点击“网络”,在“连接名称”下拉框选择 INTENET_R_VID 字样的连接,并截图备…...

网络安全进阶学习第十四课——MSSQL注入
文章目录 一、MSsql数据库二、MSsql结构三、MSsql重点表1、master 数据库中的Sysdatabases 表2、Sysobjects 表3、Syscolumns 表 四、Mssql常用函数五、Mssql的报错注入六、Mssql的盲注常用以下函数进行盲注: 七、联合注入1、获取当前表的列数2、获取当前数据库名3、…...

【C语言】初阶结构体
🎈个人主页:库库的里昂 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:C语言初阶 ✨其他专栏:代码小游戏 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论…...

24届近5年南京理工大学自动化考研院校分析
今天学长给大家带来的是南京理工大学控制考研分析 满满干货~还不快快点赞收藏 一、南京理工大学 学校简介 南京理工大学是隶属于工业和信息化部的全国重点大学,学校由创建于1953年的新中国军工科技最高学府——中国人民解放军军事工程学院…...

5.PyCharm基础使用及快捷键
在前几篇文章中介绍了PyCharm的安装和汉化,本篇文章一起来看一下PyCharm的基本用法和一些快捷键的使用方法。 本篇文章PyCharm的版本为PyCharm2023.2 新建项目和运行 打开工具,在菜单中——文件——新建项目 选择项目的创建位置(注意最好不要使用中文路径和中文名项目名称…...

RabbitMQ的安装
RabbitMQ的安装 1、Windows环境下的RabbitMQ安装步骤 使用的版本:otp_win64_23.2 rabbitmq-server-3.8.16 版本说明:https://www.rabbitmq.com/which-erlang.html#compatibility-matrix 1.1 下载并安装erlang RabbitMQ 服务端代码是使用并发式语言…...

GPU版PyTorch对应安装教程
一、正确安装符合自己电脑的对应GPU版本的PyTorch之前需要了解三个基本概念 算力、CUDA driver version、CUDA runtime version ①算力:需要先知道你的显卡,之后根据官网表格进行对应,得到算力 ②CUDA driver version:电脑上显卡…...

医学影像PACS临床信息系统源码
医学影像临床信息系统(Picture Archiving and Communication Systems)PACS是指从医疗影像设备中获得数字影像,利用高速网络进行存储、管理、传输的医疗影像信息管理系统。通过该系统,能实现影像数字化、无胶片化管理。 登记系统 …...

Python(Web时代)——jinja2模板
简介 Jinja2是Flask框架默认支持的模板引擎,是python的web项目中被广泛应用的一种模板引擎,jinja2的作者与Flask是同一个人。 jinja2具有以下特点: 非常灵活,提供了控制结构、表达式与继承等 性能好 可读性强 渲染一个模板&a…...

酷开系统 | 酷开科技,让数据变得更有价值!
身处信息时代,我们每个人时刻都在生成、传递和应用数据,数据已经成为了现代社会中宝贵的资源之一,而在人工智能领域,数据更是被称为人工智能的“燃料”。 而在AI的发展中,只有拥有高质量、多样性且充分代表性的数据集…...

uni——tab切换
案例展示 案例代码 <view class"tablist"><block v-for"(item,index) in tabList" :key"index"><view class"tabItem" :class"current item.id?active:" click"changeTab(item)">{{item.nam…...

类图的6种关系和golang应用
文章目录 1. 依赖和关联1.1 依赖(Dependency)概念类图示例代码示例 1.2 关联(Association)概念类图示例代码示例 2. 组合和聚合(特殊的关联关系)2.1 聚合(Aggregation)概念类图示例代…...
Linux tar 备忘清单
tar 备忘清单 语法选项创建一个 tar 格式的压缩文件创建压缩后的 tar.gz 存档文件生成压缩率更高的 tar.bz2 文件解压缩 tar 文件解压缩 tar.gz 文件解压缩 tar.bz2 文件列出归档内容从 tar 归档文件中提取单个文件从 tar 归档文件中提取多个文件使用通配符提取文件组添加文件或…...

76. 最小覆盖子串
题目链接:力扣 解题思路:滑动窗口 因为只需要最小子串中包含t中的所有字符即可,顺序不重要,所以可以先统计一下 t 中每个字符出现的次数,使用map进行统计: key表示t中的字符,value表示字符的个…...
科兴未来|2023“数智未来,聚放神采”医疗科技创新挑战赛
一、赛事亮点 聚焦前沿神经科学与脑科学领域 展示优质创新产品、技术、平台与服务 汇聚学术端、产业端、投资端多维专业视角 搭建合作交流、产业赋能与生态融合平台 共话行业发展方向与动态趋势 二、赛事简介 2023医疗科技创新挑战赛聚焦于神经科学及脑科学领域的前沿技…...

第56步 深度学习图像识别:CNN梯度权重类激活映射(TensorFlow)
基于WIN10的64位系统演示 一、写在前面 类激活映射(Class Activation Mapping,CAM)和梯度权重类激活映射(Gradient-weighted Class Activation Mapping,Grad-CAM)是两种可视化深度学习模型决策过程的技术…...

云道资本:2023中国氢能源产业-氢制备深度研究报告(附下载)
关于报告的所有内容,公众【营销人星球】获取下载查看 核心观点 中国可再生能源消纳能力提升远远滞后于发电占比的提升。大规模的可再生能源发电是实现碳中和的关键一步,但风电、光伏发电间歌性、波动性强,电网消纳压力较大,且电…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...