一模一樣的SQL重新解析即重新生成執行計劃的方法
1.對SQL中的物件analyze收集統計資訊
SQL> analyze table TEST_OWNER.TEST_TABLE compute statistics;
2.對SQL中的物件gather_table_stats加no_invalidate=>FALSE收集統計資訊
SQL> exec dbms_stats.gather_table_stats('TEST_OWNER','TEST_TABLE',no_invalidate=>FALSE);
3.SQL長時間沒有執行,被刷出SHARED POOL,或直接重新整理共享池,再次執行時需要重新解析。
SQL> alter system flush shared_pool;
4.在SQL引用的物件上執行了DDL操作,甚至是結構發生了變化,比如新增一個索引或comment。
SQL> comment on column TEST_TABLE.TEST_COLUMN is 'column is test for sqlplan';
5.對SQL引用的物件進行了許可權更改。
SQL> grant all on TEST_OWNER.TEST_TABLE to TEST_OWNER2
6.還可以單獨清除這個sql在共享池中的資訊
Exec DBMS_SHARED_POOL.PURGE('v$sql.ADDRESS,v$sql.HASH_VALUE','c')
雖說10G開始sql_id等同於address+hash value的作用,但此處不能使用sql_id
TEST_OWNER使用者執行select * from TEST_TABLE已經N次了
以上6項任意一項執行後,TEST_OWNER使用者再次執行select * from TEST_TABLE都會重新解析,即下面語句中的EXECUTIONS為1,不再是N+1
select sql_id,first_load_time,last_load_time,last_active_time,EXECUTIONS,child_number,sql_text from v$sql where PARSING_SCHEMA_NAME='TEST_OWNER' and sql_text like 'select * from TEST_TABLE'
SQL> analyze table TEST_OWNER.TEST_TABLE compute statistics;
2.對SQL中的物件gather_table_stats加no_invalidate=>FALSE收集統計資訊
SQL> exec dbms_stats.gather_table_stats('TEST_OWNER','TEST_TABLE',no_invalidate=>FALSE);
3.SQL長時間沒有執行,被刷出SHARED POOL,或直接重新整理共享池,再次執行時需要重新解析。
SQL> alter system flush shared_pool;
4.在SQL引用的物件上執行了DDL操作,甚至是結構發生了變化,比如新增一個索引或comment。
SQL> comment on column TEST_TABLE.TEST_COLUMN is 'column is test for sqlplan';
5.對SQL引用的物件進行了許可權更改。
SQL> grant all on TEST_OWNER.TEST_TABLE to TEST_OWNER2
6.還可以單獨清除這個sql在共享池中的資訊
Exec DBMS_SHARED_POOL.PURGE('v$sql.ADDRESS,v$sql.HASH_VALUE','c')
雖說10G開始sql_id等同於address+hash value的作用,但此處不能使用sql_id
TEST_OWNER使用者執行select * from TEST_TABLE已經N次了
以上6項任意一項執行後,TEST_OWNER使用者再次執行select * from TEST_TABLE都會重新解析,即下面語句中的EXECUTIONS為1,不再是N+1
select sql_id,first_load_time,last_load_time,last_active_time,EXECUTIONS,child_number,sql_text from v$sql where PARSING_SCHEMA_NAME='TEST_OWNER' and sql_text like 'select * from TEST_TABLE'
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2137437/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 生成執行計劃的方法
- 檢視SQL的執行計劃方法SQL
- Oracle如何手動重新整理執行計劃Oracle
- MV快速重新整理時執行的SQLSQL
- 如何解決執行計劃繫結變數bind peeking重新硬解析變數
- 一個執行計劃解析的小問題分析
- Oracle SQL Profile固定執行計劃的方法OracleSQL
- oracle中跟蹤sql執行計劃的方法OracleSQL
- SQL的執行計劃SQL
- 控制執行計劃之-SQL Profile(一)SQL
- 物化檢視重新整理遞迴SQL獲取執行計劃報錯遞迴SQL
- 決定一個SQL執行效率的是執行計劃, 而不是SQL的寫法SQL
- sql執行計劃變更和刪除快取中執行計劃的方法SQL快取
- 檢視SQL執行計劃的方法(有待於進一步補充)SQL
- 一條SQL語句的執行計劃變化探究SQL
- Oracle 獲取SQL執行計劃方法OracleSQL
- SQL Server 重新組織生成索引SQLServer索引
- sql的執行計劃 詳解SQL
- sql 執行計劃SQL
- SQLServer統計監控SQL執行計劃突變的方法SQLServer
- 檢視一個正在執行的sql的執行計劃(explain for connection processlist_id)SQLAI
- AutoTRACE是分析SQL的執行計劃,執行效率的一個非常簡單方便的工具SQL
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- 怎樣看懂Oracle的執行計劃Oracle
- 檢視SQL執行計劃的幾種常用方法YQSQL
- 獲得目標SQL語句執行計劃的方法SQL
- 儲存過程中檢視sql執行計劃的方法儲存過程SQL
- 解析Oracle執行計劃的結果Oracle
- 檢視sql執行計劃方法彙總SQL
- Oracle中檢視已執行sql的執行計劃OracleSQL
- MySQL執行計劃解析MySql
- MongoDB重新命名database的方法一例MongoDBDatabase
- vue元件el-dialog重新執行mounted方法的技巧Vue元件
- 獲取執行計劃的方法
- 執行計劃的閱讀方法
- 檢視執行計劃的方法
- 如何檢視SQL的執行計劃SQL
- 獲取SQL執行計劃的方式:SQL