Before 10G we can capture a SQL statement’s execution plan and save it
into a stored outline.
Thus we can change the execution plan without any SQL modification.
In 10G it is called SQL Profiles
.
In 11G it is called SQL Plan Management.
They take same fuctions although the ways of implementation are different.
See the example like below:
SQL> create table t (id number,name varchar2(100));
表已创建。
SQL> insert into t select rownum,object_name from dba_objects;
已创建72993行。
SQL> commit;
提交完成。
SQL> set autotrace traceonly exp stat;
SQL>
SQL> select * from t where id=3;
执行计划
----------------------------------------------------------
Plan hash value: 1601196873
----------------------------------
| Id | Operation | Name |
----------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | TABLE ACCESS FULL| T |
----------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("ID"=3)
Note
-----
- rule based optimizer used (consider using cbo)
统计信息
----------------------------------------------------------
2 recursive calls
1 db block gets
382 consistent gets
0 physical reads
176 redo size
480 bytes sent via SQL*Net to client
416 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> select sql_text,signature,sql_handle,plan_name,origin,enabled,accepted, autopurge
from dba_sql_plan_baselines where sql_text like '%select * from t where id=3%'
SQL> /
未选定行
SQL> alter session set optimizer_capture_sql_plan_baselines=true;
会话已更改。
SQL> select * from t where id=3;
ID
----------
NAME
--------------------------------------------------------------------------------
3
CON$
SQL> select sql_text,signature,sql_handle,plan_name,origin,enabled,accepted, autopurge
2 from dba_sql_plan_baselines where sql_text like '%select * from t where id=3%';
SQL_TEXT
--------------------------------------------------------------------------------
SIGNATURE SQL_HANDLE PLAN_NAME
---------- ------------------------------ ------------------------------
ORIGIN ENA ACC AUT
-------------- --- --- ---
select * from t where id=3
9.9679E+18 SYS_SQL_8a54f32d904f9eda SQL_PLAN_8np7m5q84z7qu94ecae5c
AUTO-CAPTURE YES YES YES
Add the index.
SQL> create index idx_t on t(id);
索引已创建。
SQL> exec dbms_stats.gather_table_stats(user,'t',cascade=>true)
PL/SQL 过程已成功完成。
SQL> select * from t where id=3;
ID
----------
NAME
--------------------------------------------------------------------------------
3
CON$
SQL> select sql_text,signature,sql_handle,plan_name,origin,enabled,accepted, autopurge
2 from dba_sql_plan_baselines where sql_text like '%select * from t where id=3%';
SQL_TEXT
--------------------------------------------------------------------------------
SIGNATURE SQL_HANDLE PLAN_NAME
---------- ------------------------------ ------------------------------
ORIGIN ENA ACC AUT
-------------- --- --- ---
select sql_text,signature,sql_handle,plan_name,origin,enabled,accepted, autopurg
8.0612E+18 SYS_SQL_6fdf0504e8efd004 SQL_PLAN_6zrs50mnfzn04391601ca
AUTO-CAPTURE YES YES YES
select * from t where id=3
9.9679E+18 SYS_SQL_8a54f32d904f9eda SQL_PLAN_8np7m5q84z7qu880b6daf
AUTO-CAPTURE YES NO YES
SQL_TEXT
--------------------------------------------------------------------------------
SIGNATURE SQL_HANDLE PLAN_NAME
---------- ------------------------------ ------------------------------
ORIGIN ENA ACC AUT
-------------- --- --- ---
select * from t where id=3
9.9679E+18 SYS_SQL_8a54f32d904f9eda SQL_PLAN_8np7m5q84z7qu94ecae5c
AUTO-CAPTURE YES YES YES
the changed plan(using index) was captured automatically but can not be used by itself becaue the first one is default.
SQL> select * from t where id=3;
ID
----------
NAME
--------------------------------------------------------------------------------
3
CON$
执行计划
----------------------------------------------------------
Plan hash value: 1601196873
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 29 | 96 (2)| 00:00:02 |
|* 1 | TABLE ACCESS FULL| T | 1 | 29 | 96 (2)| 00:00:02 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("ID"=3)
Note
-----
- SQL plan baseline "SQL_PLAN_8np7m5q84z7qu94ecae5c" used for this statement
See the accept column is NO for the second SQL PLAN.
Let us disable the first one .Then the second is not accepted either.
SQL> /
ID
----------
NAME
--------------------------------------------------------------------------------
3
CON$
执行计划
----------------------------------------------------------
Plan hash value: 1594971208
--------------------------------------------------------------------------------
-----
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
--------------------------------------------------------------------------------
-----
| 0 | SELECT STATEMENT | | 1 | 29 | 1 (0)| 00:00
:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| T | 1 | 29 | 1 (0)| 00:00
:01 |
|* 2 | INDEX RANGE SCAN | IDX_T | 1 | | 1 (0)| 00:00
:01 |
--------------------------------------------------------------------------------
-----
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("ID"=3)
Let us enable the second one.
Make it accepted.
SQL> /
ID
----------
NAME
--------------------------------------------------------------------------------
3
CON$
执行计划
----------------------------------------------------------
Plan hash value: 1594971208
--------------------------------------------------------------------------------
-----
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
--------------------------------------------------------------------------------
-----
| 0 | SELECT STATEMENT | | 1 | 29 | 1 (0)| 00:00
:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| T | 1 | 29 | 1 (0)| 00:00
:01 |
|* 2 | INDEX RANGE SCAN | IDX_T | 1 | | 1 (0)| 00:00
:01 |
--------------------------------------------------------------------------------
-----
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("ID"=3)
Note
-----
- SQL plan baseline "SQL_PLAN_8np7m5q84z7qu880b6daf" used for this statement
分享到:
相关推荐
Microsoft SQL Server has become an eminent relational database management system (RDBMS) in the marketplace. The SQL Server engine has come a long way from being just another RDBMS; it’s an end-to...
Chapter 3, SQL Server Tools, helps you understand the changes in the release management of SQL Server tools and explores small and handy enhancements in SQLServer Management Studio (SSMS). It also ...
working with or plan to switch to SQL Server, you’ll need it sooner or later. In addition, you’ll improve your Visual Basic programming. T-SQL is the native language of SQL Server. By seeing how the...
Plan and deploy Always On Availability Groups in your corporate environment. Manage Availability Groups to ensure constant readiness and high throughput. Monitor Availability Group performance and ...
Before we look at how SQL Server uses and manages its memory, we need to ensure a full understanding of the more common memory related terms. The following definitions will help you understand how SQL...
SOX001109700040 – INF: Queries with PREFETCH in the plan hold lock until the end of transaction Locking Concepts Delivery Tip Prior to delivering this material, test the class to see if they ...
Understand the importance of a fully implemented backup plan in SQL Server Agent Integrate backup and restore techniques into an existing environment Consider space and time requirements for backup...
you'll discover how to plan, design, deploy, and manage strategic solutions using SharePoint 2010, Microsoft SQL Server®, Windows PowerShell™, and other key technologies. Topics include ...
在SQL Server Management Studio或其他默认应用中打开计划 将计划保存到磁盘 入门 如果使用LINQPad 6,则必须使用此库的2.0版。 对于LINQPad 5,必须使用1.0版 该库可以显示LINQ to SQL驱动程序和Entity Framework ...
OEM and the Event Management System Chapter 14 Maintaining User Accounts Application Design Requirements Running the Application Documenting the User State A Sample Script Enhanced Oracle ...
Explain Plan 503 Pinned Code 504 Repair Chained Rows 505 Rebuild Table 506 Unix Kernel Parms 507 Windows Registry Parms 508 Analyze All Objects 509 Profilers 512 Oracle Tuning 523 Rebuild Multiple ...
Management tasks at the storage layer include configuring storage devices for optimum throughput, monitoring for device failure, tracking utilization, and ensuring that a backup plan exists and is ...
7.8 Test Plan 178 7.9 Test-Case Design 179 Chapter 8. Software-Testing Strategies 181 8.1 Static-Testing Strategies 181 8.2 Debugging 186 8.3 Error, Fault, and Failure 189 Chapter 9. ...
Learn about planning and deployment of three Cloud services models of WAP - IaaS, PaaS(WebSites , Service Bus) , DBaaS(SQL, MySQL) Plan and manage Azure Pack plans, subscriptions and add on's for ...
Plan, install, and configure a MySQL NDB Cluster environment Perform everyday tasks such as backing up, restoring, and upgrading Develop applications from Java, memcached, C++, and SQL Troubleshoot ...
It is also for anyone who needs to plan and execute migrations of systems to the Exadata platform. Finally, the book will be invaluable to those who support and maintain such systems. Table of ...
Above we discuss the basic functions of informatization platform in proxy industry, the remainder of this article will detail the system architecture that can help us plan and build SaaS application....
1.1.7 Lifecycle Management Components .................. 36 1.2 Basic Principles of In-Memory Technology ..................... 37 1.2.1 Hardware Innovations ....................................... 37 ...
Native Session Management Provides Plenty of Security 9 “My Application Isn’t Major Enough to Get Hacked” 9 The “Barbarians at the Gate” Syndrome 10 Wrapping It Up 10 Part II Is That Hole Really ...