Oracle执行计划的稳定(使用自动类型的SQL PROFILE)

稳定ORACLE的执行计划  很多时候可能我们都希望CBO能够帮我们生成正确、高效的执行计划,但是很多时候事实并非如此,可能因为各种各样的原因(如,统计信息不正确或者CBO天生的缺陷等)都会导致生成的执行计划特别的低效。之前的一家公司有一台专门用于批量做数据校验清洗的数据库,每次校验清洗完成数据就会清理掉,统计信息经常会发生较大的变更,之前跑得好好的SQL,可能有时候跑5-6个小时都跑不完了,这时候查看执行计划,发现不正确的... 阅读详情

SQL执行效率突然的衰减往往是因为目标SQL执行计划的改变。

一般情况下可以有如下方法来稳定执行计划
1、使用SQL PROFILE
2、使用SPM

而SQL PROFILE又分为自动类型的SQL PROFILE和手动类型SQL PROFLIE

1、使用自动类型的SQL PROFILE来稳定执行计划

环境准备:

SCOTT@TNS_PDB01>create table t1(n number);

Table created.

declare
begin
        for i in 1 .. 10000 loop
                insert into t1 values(i);
        end loop;
        commit;
end;
/

SCOTT@TNS_PDB01>select count(*) from t1;

  COUNT(*)
----------
     10000

SCOTT@TNS_PDB01>create index idx_t1 on t1(n);

Index created.

SCOTT@TNS_PDB01>exec dbms_stats.gather_table_stats(ownname => 'SCOTT',tabname => 'T1',estimate_percent => 100,method_opt => 'FOR ALL COLUMNS SIZE 1',cascade => true, no_invalidate => false);

PL/SQL procedure successfully completed.

SCOTT@TNS_PDB01>select /*+ no_index(t1 idx_t1) */* from t1 where n = 1;

	 N
----------
	 1

SCOTT@TNS_PDB01>select sql_text,sql_id,version_count,executions from v$sqlarea where sql_text like 'select /*+ no_index(t1 idx_t1) */* from t1 where n = 1%';

SQL_TEXT						     SQL_ID	   VERSION_COUNT EXECUTIONS
------------------------------------------------------------ ------------- --------
select /*+ no_index(t1 idx_t1) */* from t1 where n = 1	     dc4r0cyrd3fx0	       1	  1

SCOTT@TNS_PDB01>select * from table(dbms_xplan.display_cursor(sql_id => 'dc4r0cyrd3fx0',cursor_child_no => 0,format => 'advanced'));

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------
SQL_ID	dc4r0cyrd3fx0, child number 0
-------------------------------------
An uncaught error happened in prepare_sql_statement : ORA-01403: no data found

Plan hash value: 3617692013

--------------------------------------------------------------------------
| Id  | Operation	  | Name | Rows  | Bytes | Cost (%CPU)| Time	 |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |	 |	 |	 |     7 (100)| 	 |
|*  1 |  TABLE ACCESS FULL| T1	 |     1 |     4 |     7   (0)| 00:00:01 |
--------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$1 / T1@SEL$1

Outline Data
-------------

  /*+
      BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('19.1.0')
      DB_VERSION('19.1.0')
      ALL_ROWS
      OUTLINE_LEAF(@"SEL$1")
      FULL(@"SEL$1" "T1"@"SEL$1")
      END_OUTLINE_DATA
  */

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("N"=1)

Column Projection Information (identified by operation id):
-----------------------------------------------------------

   1 - "N"[NUMBER,22]

Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 1
---------------------------------------------------------------------------

   1 -	SEL$1 / T1@SEL$1
	   -  no_index(t1 idx_t1)

Query Block Registry:
---------------------

  <q o="2" f="y"><n><![CDATA[SEL$1]]></n><f><h><t><![CDATA[T1]]></t><s><![
	CDATA[SEL$1]]></s></h></f></q>



56 rows selected.

使用DBMS_SQLTUNE包中CREATE_TUNING_TASK方法来自动调整执行计划

declare
        lv_tuning_task_result varchar2(4000);
        lv_sql_text CLOB := 'select /*+ no_index(t1 idx_t1) */* from t1 where n = 1';
        lv_task_t1 varchar2(30) := 'tuning_task_t1';
begin
        lv_tuning_task_result := dbms_sqltune.create_tuning_task(
        sql_text => lv_sql_text,
        user_name => 'SCOTT',
        time_limit => 60,
        scope => 'COMPREHENSIVE',
        task_name => lv_task_t1,
        description => 'task on t1');
end;
/

PL/SQL procedure successfully completed.

执行调优任务
SCOTT@TNS_PDB01>exec dbms_sqltune.execute_tuning_task(task_name => 'tuning_task_t1');

PL/SQL procedure successfully completed.

查看任务报告
SCOTT@TNS_PDB01>select dbms_sqltune.report_tuning_task(task_name => 'tuning_task_t1') from dual;

DBMS_SQLTUNE.REPORT_TUNING_TASK(TASK_NAME=>'TUNING_TASK_T1')
--------------------------------------------------------------------------------
GENERAL INFORMATION SECTION
----------------------------------------------------
---------------------------
Tuning Task Name   : tuning_task_t1
Tuning Task Owner  : SCOTT
Workload Type	   : Single SQL Statement
Scope		   : COMPREHENSIVE
Time Limit(seconds): 60
Completion Status  : COMPLETED
Started at	   : 01/13/2020 12:26:34
Completed at	   : 01/13/2020 12:26:35

------------------------------------------------------
-------------------------
Schema Name   : SCOTT
Container Name: PDB01
SQL ID	      : dc4r0cyrd3fx0
SQL Text      : select /*+ no_index(t1 i
dx_t1) */* from t1 where n = 1

------------------------------------------------
-------------------------------
FINDINGS SECTION (1 finding)
-----------------------------------------------------------
--------------------

1- SQL Profile Finding (see explain plans section below)
-----------------------------------------
---------------
  A potentially better execution plan was fo
und for this statement.

  Recommendation (estimated benefit: 90.9%)
  -----------------------------------------
  - Consider accepting the recommended SQL prof
ile.
--查看给出的建议
    execute dbms_sqltune.accept_sql_profile(task_name =
> 'tuning_task_t1',
	    task_owner => 'SCOTT', repla
ce => TRUE);

  Validation results
  ------------------
  The SQL profile was tested by executing bo
th its plan and the original plan
  and measuring their respective execution sta
tistics. A plan may have been
  only partially executed if the other could be ru
n to completion in less time.

			   Original Plan  With SQ
L Profile  % Improved
			   -------------  ----------------
  ----------
  Completion Status:		COMPLETE
   COMPLETE
  Elapsed Time (s):		 .00009
  .000008      91.11 %
  CPU Time (s): 		 .00009 	  .000008
      91.11 %
  User I/O Time (s):		      0
	  0
  Buffer Gets:			     22
	 2	 90.9 %
  Physical Read Requests:	      0
0
  Physical Write Requests:	      0 		0

  Physical Read Bytes:		      0 		0

  Physical Write Bytes: 	      0 		0
  Rows Processed:		      1
		1
  Fetches:			      1
	       1
  Executions:			      1
	      1

  Notes
  -----
  1. Statistics for the original plan were ave
raged over 10 executions.
  2. Statistics for the SQL profile plan were averaged
 over 10 executions.

----------------------------------------------------------
---------------------
EXPLAIN PLANS SECTION
--------------------------------------------------------
-----------------------

1- Original With Adjusted Cost
------------------------------
Plan hash value: 3617692013

--------------------------------------------
------------------------------
| Id  | Operation	  | Name | Rows  | Bytes
| Cost (%CPU)| Time	|
------------------------------------------------------
--------------------
|   0 | SELECT STATEMENT  |	 |     1 |     4 |     7
(0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T1	 |     1 |
   4 |	   7   (0)| 00:00:01 |
-------------------------------------------------
-------------------------

Predicate Information (identified by operation id):
----------------------------------------
-----------

   1 - filter("N"=1)

Hint Report (identified by operation id / Q
uery Block Name / Object Alias):
Total hints for statement: 3 (U - Unused (3))
-----------------------------------------
----------------------------------

   0 -	STATEMENT
	 U -  IGNORE_OPTIM_EMBEDDED_HINTS / h
int overridden by another in parent quer
y block
	 U -  OPTIMIZER_FEATURES_ENABLE(default) / h
int overridden by another in parent quer
y block

   1 -	SEL$1 / T1@SEL$1
	 U -  no_index(t1 idx_t1) / rejected
by IGNORE_OPTIM_EMBEDDED_HINTS

2- Using SQL Profile
--------------------
Plan hash value: 1369807930

---------------------------------------------------------
------------------
| Id  | Operation	 | Name   | Rows
 | Bytes | Cost (%CPU)| Time	 |
---------------------------------------------
------------------------------
|   0 | SELECT STATEMENT |	  |	1 |	4
 |     1   (0)| 00:00:01 |
|*  1 |  INDEX RANGE SCAN| IDX_T1 |	1 |	4 |
   1   (0)| 00:00:01 |
---------------------------------------------------------
------------------

Predicate Information (identified by operation id):
-----------------------------------------------
----

   1 - access("N"=1)

Hint Report (identified by operation id / Query Bl
ock Name / Object Alias):
Total hints for statement: 1 (U - Unused (1))
------------------------------------------------
---------------------------

   1 -	SEL$1 / T1@SEL$1
	 U -  no_index(t1 idx_t1) / rejected
by IGNORE_OPTIM_EMBEDDED_HINTS

------------------------------------------------
-------------------------------


执行给出的建议
SCOTT@TNS_PDB01> execute dbms_sqltune.accept_sql_profile(task_name =>'tuning_task_t1',task_owner => 'SCOTT', replace => TRUE);

PL/SQL procedure successfully completed.

测试
SCOTT@TNS_PDB01>select /*+ no_index(t1 idx_t1) */* from t1 where n = 1;

	 N
----------
	 1

SCOTT@TNS_PDB01>select * from table(dbms_xplan.display_cursor(sql_id => null,cursor_child_no => null,format => 'advanced'));

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------
SQL_ID	dc4r0cyrd3fx0, child number 0
-------------------------------------
An uncaught error happened in prepare_sql_statement : ORA-01403: no data found

Plan hash value: 1369807930

---------------------------------------------------------------------------
| Id  | Operation	 | Name   | Rows  | Bytes | Cost (%CPU)| Time	  |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT |	  |	  |	  |	1 (100)|	  |
|*  1 |  INDEX RANGE SCAN| IDX_T1 |	1 |	4 |	1   (0)| 00:00:01 |
---------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$1 / T1@SEL$1

Outline Data
-------------

  /*+
      BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('19.1.0')
      DB_VERSION('19.1.0')
      ALL_ROWS
      OUTLINE_LEAF(@"SEL$1")
      INDEX(@"SEL$1" "T1"@"SEL$1" ("T1"."N"))
      END_OUTLINE_DATA
  */

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("N"=1)

Column Projection Information (identified by operation id):
-----------------------------------------------------------

   1 - "N"[NUMBER,22]

Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 3 (U - Unused (1))
---------------------------------------------------------------------------

   0 -	STATEMENT
	   -  IGNORE_OPTIM_EMBEDDED_HINTS
	   -  OPTIMIZER_FEATURES_ENABLE(default)

   1 -	SEL$1 / T1@SEL$1
	 U -  no_index(t1 idx_t1) / rejected by IGNORE_OPTIM_EMBEDDED_HINTS

Note
-----
   - SQL profile SYS_SQLPROF_016f9d28a5520002 used for this statement

Query Block Registry:
---------------------

  <q o="2" f="y"><n><![CDATA[SEL$1]]></n><f><h><t><![CDATA[T1]]></t><s><![
	CDATA[SEL$1]]></s></h></f></q>



64 rows selected.

**但是当改变谓词条件的值时,执行计划还是走的全表扫描**
SCOTT@TNS_PDB01>select /*+ no_index(t1 idx_t1) */* from t1 where n = 2;

	 N
----------
	 2

SCOTT@TNS_PDB01>select * from table(dbms_xplan.display_cursor(sql_id => null,cursor_child_no => null,format => 'advanced'));

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------
SQL_ID	bvwvfd5nnk9dq, child number 0
-------------------------------------
select /*+ no_index(t1 idx_t1) */* from t1 where n = 2

Plan hash value: 3617692013

--------------------------------------------------------------------------
| Id  | Operation	  | Name | Rows  | Bytes | Cost (%CPU)| Time	 |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |	 |	 |	 |     7 (100)| 	 |
|*  1 |  TABLE ACCESS FULL| T1	 |     1 |     4 |     7   (0)| 00:00:01 |
--------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$1 / T1@SEL$1

Outline Data
-------------

  /*+
      BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('19.1.0')
      DB_VERSION('19.1.0')
      ALL_ROWS
      OUTLINE_LEAF(@"SEL$1")
      FULL(@"SEL$1" "T1"@"SEL$1")
      END_OUTLINE_DATA
  */

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("N"=2)

Column Projection Information (identified by operation id):
-----------------------------------------------------------

   1 - "N"[NUMBER,22]

Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 1
---------------------------------------------------------------------------

   1 -	SEL$1 / T1@SEL$1
	   -  no_index(t1 idx_t1)

Query Block Registry:
---------------------

  <q o="2" f="y"><n><![CDATA[SEL$1]]></n><f><h><t><![CDATA[T1]]></t><s><![
	CDATA[SEL$1]]></s></h></f></q>



56 rows selected.

**调整系统给的建议加上force_match => true,强制匹配**
SCOTT@TNS_PDB01> execute dbms_sqltune.accept_sql_profile(task_name =>'tuning_task_t1',task_owner => 'SCOTT', replace => TRUE,force_match => true);

PL/SQL procedure successfully completed.


SCOTT@TNS_PDB01>select /*+ no_index(t1 idx_t1) */* from t1 where n = 2;

	 N
----------
	 2

SCOTT@TNS_PDB01>select * from table(dbms_xplan.display_cursor(sql_id => null,cursor_child_no => null,format => 'advanced'));

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------
SQL_ID	bvwvfd5nnk9dq, child number 1
-------------------------------------
An uncaught error happened in prepare_sql_statement : ORA-01403: no data found

Plan hash value: 1369807930

---------------------------------------------------------------------------
| Id  | Operation	 | Name   | Rows  | Bytes | Cost (%CPU)| Time	  |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT |	  |	  |	  |	1 (100)|	  |
|*  1 |  INDEX RANGE SCAN| IDX_T1 |	1 |	4 |	1   (0)| 00:00:01 |
---------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$1 / T1@SEL$1

Outline Data
-------------

  /*+
      BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('19.1.0')
      DB_VERSION('19.1.0')
      ALL_ROWS
      OUTLINE_LEAF(@"SEL$1")
      INDEX(@"SEL$1" "T1"@"SEL$1" ("T1"."N"))
      END_OUTLINE_DATA
  */

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("N"=2)

Column Projection Information (identified by operation id):
-----------------------------------------------------------

   1 - "N"[NUMBER,22]

Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 3 (U - Unused (1))
---------------------------------------------------------------------------

   0 -	STATEMENT
	   -  IGNORE_OPTIM_EMBEDDED_HINTS
	   -  OPTIMIZER_FEATURES_ENABLE(default)

   1 -	SEL$1 / T1@SEL$1
	 U -  no_index(t1 idx_t1) / rejected by IGNORE_OPTIM_EMBEDDED_HINTS

Note
-----
   - SQL profile SYS_SQLPROF_016f9d29d9d20003 used for this statement

Query Block Registry:
---------------------

  <q o="2" f="y"><n><![CDATA[SEL$1]]></n><f><h><t><![CDATA[T1]]></t><s><![
	CDATA[SEL$1]]></s></h></f></q>



64 rows selected.

SCOTT@TNS_PDB01>
SCOTT@TNS_PDB01>
SCOTT@TNS_PDB01>select /*+ no_index(t1 idx_t1) */* from t1 where n = 3;

	 N
----------
	 3

SCOTT@TNS_PDB01>select * from table(dbms_xplan.display_cursor(sql_id => null,cursor_child_no => null,format => 'advanced'));

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------
SQL_ID	bvjnppfwsg57p, child number 0
-------------------------------------
select /*+ no_index(t1 idx_t1) */* from t1 where n = 3

Plan hash value: 1369807930

---------------------------------------------------------------------------
| Id  | Operation	 | Name   | Rows  | Bytes | Cost (%CPU)| Time	  |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT |	  |	  |	  |	1 (100)|	  |
|*  1 |  INDEX RANGE SCAN| IDX_T1 |	1 |	4 |	1   (0)| 00:00:01 |
---------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$1 / T1@SEL$1

Outline Data
-------------

  /*+
      BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('19.1.0')
      DB_VERSION('19.1.0')
      ALL_ROWS
      OUTLINE_LEAF(@"SEL$1")
      INDEX(@"SEL$1" "T1"@"SEL$1" ("T1"."N"))
      END_OUTLINE_DATA
  */

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("N"=3)

Column Projection Information (identified by operation id):
-----------------------------------------------------------

   1 - "N"[NUMBER,22]

Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 3 (U - Unused (1))
---------------------------------------------------------------------------

   0 -	STATEMENT
	   -  IGNORE_OPTIM_EMBEDDED_HINTS
	   -  OPTIMIZER_FEATURES_ENABLE(default)

   1 -	SEL$1 / T1@SEL$1
	 U -  no_index(t1 idx_t1) / rejected by IGNORE_OPTIM_EMBEDDED_HINTS

Note
-----
   - SQL profile SYS_SQLPROF_016f9d29d9d20003 used for this statement

Query Block Registry:
---------------------

  <q o="2" f="y"><n><![CDATA[SEL$1]]></n><f><h><t><![CDATA[T1]]></t><s><![
	CDATA[SEL$1]]></s></h></f></q>



64 rows selected.


SCOTT@TNS_PDB01>select /*+ no_index(t1 idx_t1) */* from t1 where n = 5;

	 N
----------
	 5

SCOTT@TNS_PDB01>select * from table(dbms_xplan.display_cursor(sql_id => null,cursor_child_no => null,format => 'advanced'));

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------
SQL_ID	6km0nbhw11mvq, child number 0
-------------------------------------
select /*+ no_index(t1 idx_t1) */* from t1 where n = 5

Plan hash value: 1369807930

---------------------------------------------------------------------------
| Id  | Operation	 | Name   | Rows  | Bytes | Cost (%CPU)| Time	  |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT |	  |	  |	  |	1 (100)|	  |
|*  1 |  INDEX RANGE SCAN| IDX_T1 |	1 |	4 |	1   (0)| 00:00:01 |
---------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$1 / T1@SEL$1

Outline Data
-------------

  /*+
      BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('19.1.0')
      DB_VERSION('19.1.0')
      ALL_ROWS
      OUTLINE_LEAF(@"SEL$1")
      INDEX(@"SEL$1" "T1"@"SEL$1" ("T1"."N"))
      END_OUTLINE_DATA
  */

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("N"=5)

Column Projection Information (identified by operation id):
-----------------------------------------------------------

   1 - "N"[NUMBER,22]

Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 3 (U - Unused (1))
---------------------------------------------------------------------------

   0 -	STATEMENT
	   -  IGNORE_OPTIM_EMBEDDED_HINTS
	   -  OPTIMIZER_FEATURES_ENABLE(default)

   1 -	SEL$1 / T1@SEL$1
	 U -  no_index(t1 idx_t1) / rejected by IGNORE_OPTIM_EMBEDDED_HINTS

Note
-----
   - SQL profile SYS_SQLPROF_016f9d29d9d20003 used for this statement

Query Block Registry:
---------------------

  <q o="2" f="y"><n><![CDATA[SEL$1]]></n><f><h><t><![CDATA[T1]]></t><s><![
	CDATA[SEL$1]]></s></h></f></q>



64 rows selected.

可以看出在改变谓词条件后,还是走的索引。
oracle固定执行计划2-sql profile oracle固定执行计划2-sql profilemauanl类型的sql profile绑定已经存在的执行计划绑定不存在的执行计划--绑定加hint执行计划 上篇介绍了如何使用SQL Tuning Advisor来生成SQL Profile,以及生成的SQL Profile产生的Hint。本篇将介绍如何手工创建SQL Profiles(即不通过SQL Tuning Advisor)。 那么,这里最关键的一点是,如何来手工创建SQL Profiles? 使用DBMS_SQLTUNE.IMPORT_SQL_P 阅读详情

相关推荐

oracle 固定执行计划(一)之 sql_profile

到oracle11G 时,已经有三种方式来固定执行计划了 1.10G以前用的是存储大纲 2.10G多了一种,sql_profile 3.11G又多了sql plan management 今天先讲讲sql_profile,其他两种后面再补上 1.先创建一张测试表, SQL> create table emp as select * from scott.emp; Table

chengcheng的博客 8114

oracle数据库优化-稳定固定执行计划-sql profile+SPM

1 手工创建sql profile方式 SQL> explain plan for select * From t1; Explained. SQL> commit; Commit complete. SQL> select * From table(dbms_xplan.display(null,null,'advanced')); commit; Plan ha...

oradbm的博客 1953

Oracle执行计划不稳定?手把手教你用SQL Profile解决(含Query Block Name详解)

本文针对Oracle数据库执行计划不稳定的常见问题,提供了使用SQL Profile进行固化的实战解决方案。文章重点剖析了Query Block Name在确保Hint生效中的关键作用,并详细介绍了从v$sql_plan提取Outline Data、手工创建Profile以及使用coe_load_sql_profile脚本的完整流程,帮助DBA从根本上锁定最优执行计划,抵御统计信息变化带来的性能波动。

tomato的博客 945

Oracle定时任务的创建与禁用/删除

一、Oracle定时器是什么 Oracle定时器是一种用于在特定时间执行任务或存储过程的工具,可以根据需求设置不同的时间段和频率来执行相应的操作。 二、为什么使用Oracle定时器 使用Oracle定时器的好处在于可以自动化执行重复性的任务,比如每天、每周或每月执行一次数据库维护、数据备份等操作,从而减轻了人工操作的负担,提高了工作效率。 三、如何使用Oracle定时器 使用Oracle定时器的方法包括编写存储过程来定义需要执行的任务,然后创建一个定时器Job来调度这个存储过程。可以根据具体需求设置定时

clover_oreo的博客 4388

《基于ORACLE SQL优化》读书笔记-使用SPM稳定执行计划

SQL PROFILE:相对被动 SPM:主动,保证只有被验证过的执行计划才会被启用。只有DBA_SQL_PLAN_BASELINES中ENABLED和ACCEPTED值均为YES的SQLPLAN BASELINE对应的执行计划才会被ORACLE启用。   自动捕获: 对于重复执行的SQL,ORACLE会自动捕获其SQLPLAN BASELINE. 11gR2以上环境,ACCEPTED

JIANGJIAN12345的专栏 1617

NRF24L01模块的5个常见问题及解决方案:从信号干扰到功耗优化

本文深入探讨NRF24L01无线模块在STM32开发中的5大常见问题及解决方案,包括通信距离优化、数据丢失排查、电源噪声抑制、SPI通信故障处理以及低功耗设计。通过代码示例和电路图分析,提供实用的优化策略,帮助开发者提升无线通信的稳定性和效率。

weixin_28256233的博客 226

Oracle 19c 新特性 —— Hint Usage Reports

新特性作用 在添加hint时,可能会遇到hint被忽略无法改变sql执行计划的情况,但是hint被忽略的原因有时人可能难以发现。19c引入了Hint Usage Reports,显示使用和忽略了哪些hint,忽略的原因是什么(比如语法错误、无法解析的Hint、hint冲突、配置了OPTIMIZER_IGNORE_HINTS参数、配置了OPTIMIZER_IGNORE_PARALLEL_HINTS...

Hehuyi_In的博客 3766

STM32F103上跑mbedtls 2.24.0:手把手教你为MQTTS加密通信打好基础

本文详细介绍了如何在STM32F103上移植和裁剪mbedtls 2.24.0,为MQTTS加密通信打下坚实基础。通过版本选择、开发环境配置、深度裁剪策略和加密功能验证,帮助开发者在资源受限的MCU上实现安全通信。文章还提供了常见问题解决方案和性能优化技巧,助力物联网设备开发。

weixin_30321709的博客 462

固定执行计划

在遭遇执行计划不稳定或者执行计划错误的情况下,通过baseline来固定SQL执行计划以确保执行计划稳定性、提高性能。baseline是oracle 11G提供的稳固sql执行计划的功能,是spm功能的一部分。 步骤如下: SQL> set linesize 1000 SQL> col index_name for a40 SQL> col COLUMN_NAME for a20 SQL>

about database article 4873

进阶05:Labview与汇川PLC通过OPC UA通信(AM500系列)

本文介绍了LabVIEW与汇川PLC通过OPC UA通信的实现方法。主要内容包括:1)编写汇川AM521 PLC结构化文本程序,配置OPC UA服务器并导出变量;2)使用UaExpert客户端测试读取PLC变量;3)开发C#封装库实现OPC UA连接、读写和订阅功能;4)在LabVIEW中创建通信类,封装dll功能;5)设计LabVIEW界面实现变量读写和PLC程序触发。最终实现了PLC变量监控、数据读写及Y1-Y4输出控制功能,为自动化系统开发提供了基础框架。

weixin_38637405的博客 1304

openpi 入门教程(一)安装、训练、微调与推理

OpenPI是由物理智能团队发布的机器人开源模型和软件包,包含两种主要模型:基于流的扩散视觉-语言-动作模型(VLA)的π₀模型和基于FAST动作标记器的自回归VLA的π₀-FAST模型。这些模型已在超过10,000小时的机器人数据上进行了预训练,并提供了基础模型检查点,支持开箱即用或根据用户数据集进行微调。OpenPI的实验性质意味着它可能不适用于所有平台,但鼓励研究人员和从业者进行创造性实验。运行这些模型需要至少具备NVIDIA GPU,推荐使用RTX 4090或更高规格的显卡。OpenPI支持在Ubu

2506_90492529的博客 5110

Oracle 使用 sql profile 固定执行计划

Oracle 10g之前有outlines,10g之后 sql profile。如果针对非绑定变量的sql,outlines则效果不佳,不建议使用。4、创建sql profile(SQLPROFILE_01)5、查看是否使用 sql profile。2、获取新sql的sql_id。

Ahern_的博客 1407

机器人中的数值优化(十二)——带约束优化问题简介、LP线性规划

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例

慕羽★的博客 3852

一次搞定各种数据库 SQL 执行计划:MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite

执行计划(execution plan,也叫查询计划或者解释计划)是数据库执行 SQL 语句的具体步骤,例如通过索引还是全表扫描访问表中的数据,连接查询的实现方式和连接的顺序等。如果 SQL 语句性能不够理想,我们首先应该查看它的执行计划。本文主要介绍如何在各种数据库中获取和理解执行计划,并给出进一步深入分析的参考文档。

Tony.Dong的专栏 2万+

Buildroot RK3568系统中更改GPU驱动为:panfrost

1:Kernel中开启Panfrost 2:更新mesa 到mesa-24.0.2 3:查看/proc/interrupts 中的panfrost 中断 4:LInux启动日志 5:查看GPU负载

OpenWrt/WLAN/驱动/Android/嵌入式开发总结 2079

Neo4j:入门基础(二)之导入CSV文件

导入CSV文件的方式  主要的两种方式如下:   1、使用 Cypher 命令LOAD CSV,这种方式可以处理中小型数据(可达10 million条记录)   2、使用批量导入工具neo4j-admin ,用来直接导入大数据集 三、上述方式具体导入过程   1、Cypher 命令LOAD CSV 参数 1、USING PERIODIC COMMIT 300 使用批量提交,每满300条提交一次,防止内存溢出 2、WITH HEADERS 从文件中读取第一行作为参数名,...

Puzzle的博客 3万+

Oracle 23AI 稳定执行计划:SQL Profile

《Oracle 23AI中SQLProfile稳定执行计划的原理与实践》摘要 本文详细介绍了Oracle数据库中使用SQLProfile稳定执行计划的两种方法。自动SQLProfile通过SQL Tuning Advisor生成,动态修正优化器统计信息,适用于通用场景但灵活性有限;手动SQLProfile则通过coe_load_sql_profile脚本强制注入特定Hint组合,精准控制执行路径,特别适用于无法修改SQL文本的第三方系统。实验证明,自动类型易受统计信息影响,而手动类型能完全固定执行计划。通过

安呀智数据坊的博客 1023

基于STM32设计的智能水母投喂器(华为云IOT)_170

本项目利用STM32单片机控制各种传感器和水泵等设备,能够自动检测和调整水温和水质等参数,自动换水,自动供氧等等,充分满足了水母的养殖要求和需要。同时,根据水母喜欢的光环境,添加了RGB氛围灯,以及可以手动控制的喂食器等功能,提升了水母养殖的便利性和趣味性。

8808

oracle固定执行计划1-sql profile

oracle固定执行计划SQL Profileautomatic类型的sql profile SQL Profile 1、SQL profile在Oracle 10g引入 2、通过为特定的SQL文本指定优化器的一些信息,从而引导优化器生成更为合理的SQL执行计划。达到不修改SQL文本就可以改变并指定执行计划的目的。 3、通常和SQL Tuning Advisor一起用 4、也可以手工设置 automatic类型的sql profile 1、构造测试环境: session 1: conn scott/tige

fanzhuozhuo的博客 1594

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

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

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

使用sql profile 稳定执行计划的案例

使用sql profile 和coe_xfr_sql_profile稳定执行计划

weixin_43230594的博客 1161

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【Oracle优化】通过SQL_PROFILE固化执行计划

在生产环境中,随着数据量的变化、查询条件的不同,有时执行计划发生了突变而导致SQL性能急剧下降。此时如果调整代码,或者修改业务逻辑,一方面时间上可能来不及,另一方面可能成本较高,那么有没有办法,可以在不调整代码或业务逻辑的情况下,让SQL语句使用计划突变之前的执行计划呢?本篇将介绍通过SQL_PROFILE来固化执行计划的三种方法。 一 绑定已存在的执行计划 DECLARE v_ar_pr...

个人公众号:Alen的数据库学习笔记 2513

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

oracle sql profile固定执行计划

使用sql profile固定执行计划实验 已有表TACCOINFO create table TACCOINFO (   vc_tradeacco             VARCHAR2(17) not null ); create unique index IACCOINFO_TRADEACCO on TACCOINFO (VC_TRADEACCO); 下面是实验过

路人而已的专栏 1821

Oracle SQL Profile 固化执行计划实战说明

在 Oracle 数据库运维与性能优化过程中,执行计划漂移是一个极为常见、也极具风险的问题。 一次错误的执行计划选择,往往会导致 SQL 性能断崖式下降,甚至直接影响核心业务系统。

weixin_42329915的博客 644

Oracle 使用coe_xfr_sql_profile.sql迁移执行计划

前面Oracle 如何不改变SQL为其绑定构造的执行计划介绍了不改变sql语句而替换其执行计划的方法,但有一个问题是里面的方法都需要执行计划和目标sql在库中cache或AWR中存在,否则无法使用。 一、 问题背景 来看这样一个场景,有一个sql在测试环境执行很快,但在生产环境中执行很慢并且没有过好的执行计划。另外该sql特别复杂,难以通过简单分析判断出通过加哪些hint能生成出快的执行计划。 能否把测试环境中快的执行计划迁移到生产环境中给问题sql绑定? 二、 解决方法 coe_...

Hehuyi_In的博客 4181

Oracle Hint失效?手把手教你用SQL Profile强制固定NL连接执行计划

当Oracle Hint失效导致执行计划异常时,SQL Profile是强制固定嵌套循环连接等理想计划的强大工具。本文详细解析了Hint失效的原因,并手把手教你使用DBMS_SQLTUNE包,通过提取Outline Data和正确指定Query Block Name,手动创建SQL Profile来锁定执行计划,确保关键SQL性能稳定。

Jerry的专栏 986

Oracle执行计划绑定

点击上方"蓝字"关注我们,享更多干货!在Oracle中时长会出现一直运行正常的SQL突然运行很慢的问题。检查发现执行计划发生了改变,这时候就需要绑定执行计划。在Oracle...

Enmotech的博客 2031
上一篇: Oracle触发器常见实例
下一篇: Shell脚本在Oracle数据库中的使用(一)
Lissen_Gan
博客等级 码龄13年 11粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值