Oracle 是分割槽表,但條件不帶分割槽條件的SQL
Oracle 是分割槽表,但條件不帶分割槽條件的SQL(篩選條件:當天,查詢超過1s,某些SQL型別)
/*
查詢是分割槽表,但條件不帶分割槽的SQL
COMMAND_TYPE:
查詢的檢視:V$SQLCOMMAND
2:INSERT
3:SELECT
6:UPDATE
7:DELETE
189:MERGE
註釋:
先透過SQL執行計劃檢視中查詢OPERATION||' '||OPTIONS=TABLE ACCESS FULL 對應ID上一層是PARTITION RANGE ALL
的SQL_ID,再查詢詳細的SQL語句(+篩選條件)
*/
SELECT S.SQL_TEXT,
S.SQL_FULLTEXT,
S.SQL_ID,
ROUND (ELAPSED_TIME / 1000000 / ( CASE
WHEN (EXECUTIONS = 0 OR NVL (EXECUTIONS, 1 ) = 1) THEN
1
ELSE
EXECUTIONS
END ),
2 ) "執行時間'S'",
P1.OBJECT_OWNER,
P1.OBJECT_NAME,
P1.OPERATION,
S.LAST_LOAD_TIME,
--P1.P_PLAN_HASH_VALUE,
S.PLAN_HASH_VALUE
FROM V$SQLAREA S
JOIN ( SELECT DISTINCT /*去重是因為 1SQL多次呼叫,執行計劃一樣 不去重會出現多值 最終SQL會出現多個*/
A.SQL_ID,
A.OBJECT_OWNER,
A.OBJECT_NAME,
P.OPERATION
FROM (SELECT P.SQL_ID,
P.OBJECT_OWNER,
P.OBJECT_NAME,
P.PLAN_HASH_VALUE,
P.OPERATION || ' ' || P.OPTIONS "OPERATION",
P.ID, --不帶ID 若一個SQL 2個分割槽表且2個分割槽表都沒有加分割槽條件 會產生笛卡爾集
P.HASH_VALUE,
P.PLAN_HASH_VALUE P_PLAN_HASH_VALUE
FROM V$SQL_PLAN P
WHERE P.OPERATION || ' ' || P.OPTIONS =
'PARTITION RANGE ALL' ) P --查詢執行計劃是‘PARTITION RANGE ALL’ 分割槽全掃 ,而不是‘PARTITION RANGE SINGLE’部分分割槽掃描
JOIN (SELECT SQL_ID,
P.OBJECT_OWNER,
P.OBJECT_NAME,
P.PLAN_HASH_VALUE,
P.OPERATION || ' ' || P.OPTIONS,
P.ID - 1 ID , --執行計劃 顯示‘PARTITION RANGE ALL’在‘TABLE ACCESS FULL’ 下一行 也就是id-1和分割槽全掃的id,全部關聯後才能過濾出真正的表
P.HASH_VALUE
FROM V$SQL_PLAN P
WHERE (P.OBJECT_NAME IN
( SELECT PT.TABLE_NAME FROM USER_PART_TABLES PT))
AND P.OPERATION || ' ' || P.OPTIONS = 'TABLE ACCESS FULL' --查詢執行計劃是‘TABLE ACCESS FULL’ 表全掃...
AND P.OBJECT_OWNER = '&USERNAME'
AND TO_CHAR(P.TIMESTAMP, 'YYYY-MM-DD' ) =
TO_CHAR( SYSDATE , 'YYYY-MM-DD' )) A
ON P.SQL_ID = A.SQL_ID
AND P.ID = A.ID --2個關聯條件最終得出 是分割槽表但沒帶分割槽條件的表/sql_id...等
) P1
ON S.SQL_ID = P1.SQL_ID
WHERE ROUND (ELAPSED_TIME / 1000000 / ( CASE
WHEN (EXECUTIONS = 0 OR NVL (EXECUTIONS, 1 ) = 1) THEN
1
ELSE
EXECUTIONS
END ),
2 ) > 1 --100 0000微秒=1S
AND S.PARSING_SCHEMA_NAME = '&USERNAME'
AND TO_CHAR(S.LAST_LOAD_TIME, 'YYYY-DD-MM' ) =
TO_CHAR( SYSDATE , 'YYYY-DD-MM' )
AND S.COMMAND_TYPE IN (2 , 3, 5 , 6 , 189)
ORDER BY S.ELAPSED_TIME DESC ;
祝好~
祝好~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1349447/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 高效的partition(使用分割槽條件)
- Oracle帶區域性分割槽索引的分割槽表刪除舊分割槽新增新分割槽Oracle索引
- oracle分割槽表和分割槽表exchangeOracle
- Oracle分割槽表及分割槽索引Oracle索引
- oracle實用sql(14)--查詢分割槽表的分割槽列和子分割槽列OracleSQL
- oracle分割槽表和非分割槽表exchangeOracle
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- 簡單ORACLE分割槽表、分割槽索引Oracle索引
- Oracle分割槽表全域性索引新增分割槽時不會失效Oracle索引
- Spark SQL解析查詢parquet格式Hive表獲取分割槽欄位和查詢條件SparkSQLHive
- Oracle 表分割槽Oracle
- oracle分割槽表Oracle
- oracle表分割槽Oracle
- Oracle 分割槽表Oracle
- 帶default分割槽的列表分割槽表的擴充套件套件
- oracle 分割槽表move和包含分割槽表的lob moveOracle
- SQL Server表分割槽SQLServer
- SQL server 分割槽表SQLServer
- 如何查詢分割槽表的分割槽及子分割槽
- 深入學習Oracle分割槽表及分割槽索引Oracle索引
- 全面認識oracle分割槽表及分割槽索引Oracle索引
- Oracle SQL調優之分割槽表OracleSQL
- PLSQL根據分割槽表的分割槽名批次truncate分割槽SQL
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- rebuild分割槽表分割槽索引的方法Rebuild索引
- HGDB的分割槽表實現SQL Server的分割槽檢視SQLServer
- Oracle分割槽表基礎運維-07增加分割槽(2 HASH分割槽)Oracle運維
- Oracle分割槽表基礎運維-06分割槽表索引Oracle運維索引
- Oracle 建立分割槽表Oracle
- ORACLE分割槽表管理Oracle
- Oracle 分割槽表的建立Oracle
- Oracle分割槽表的使用Oracle
- Oracle分割槽表的管理Oracle
- 全面學習分割槽表及分割槽索引(13)--分隔表分割槽索引
- INTERVAL分割槽表鎖分割槽操作
- SQL SERVER之分割槽表SQLServer
- Oracle分割槽表基礎運維-07增加分割槽(1範圍分割槽)Oracle運維
- 全面學習分割槽表及分割槽索引(9)--刪除表分割槽索引