索引監控-查詢從未被使用過的索引
方法一:在索引上應用monitoring usage子句,然後查詢v$object_usage表,如下所示:
BEGIN
FOR r IN (SELECT index_name FROM user_indexes) LOOP
BEGIN
EXECUTE IMMEDIATE 'alter index ' || r.index_name ||
' monitoring usage';
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
END LOOP;
END;
SELECT t.index_name, t.table_name, t.used, t.start_monitoring
FROM v$object_usage t
WHERE t.monitoring = 'YES';
注意:查詢結果used為NO的表示從監控開始,該索引從未使用過。
方法二:通過檢查檢視v$sql_plan。這樣可以避免對索引使用monitoring usage子句,但是一些使用過的索引的sql有可能被擠出快取,查詢語句如下所示:
WITH in_plan_objects AS
(SELECT DISTINCT t.object_name
FROM v$sql_plan t
WHERE t.object_owner = 'H2')
SELECT t1.table_name,
t1.index_name,
CASE
WHEN t2.object_name IS NULL THEN
'NO'
ELSE
'YES'
END AS in_cached_plan
FROM user_indexes t1
LEFT OUTER JOIN in_plan_objects t2
ON (t1.index_name = t2.object_name);
注意:查詢結果in_cached_plan為NO的表示在快取sql計劃中找不到該索引。
沒有被使任何查詢使用的非鍵索引(非主鍵、非唯一鍵、非外來鍵)或許可以考慮刪除,使用monitoring usage或者查詢v$sql_plan可以找出這些索引,方式如上面所提。
BEGIN
FOR r IN (SELECT index_name FROM user_indexes) LOOP
BEGIN
EXECUTE IMMEDIATE 'alter index ' || r.index_name ||
' monitoring usage';
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
END LOOP;
END;
SELECT t.index_name, t.table_name, t.used, t.start_monitoring
FROM v$object_usage t
WHERE t.monitoring = 'YES';
注意:查詢結果used為NO的表示從監控開始,該索引從未使用過。
方法二:通過檢查檢視v$sql_plan。這樣可以避免對索引使用monitoring usage子句,但是一些使用過的索引的sql有可能被擠出快取,查詢語句如下所示:
WITH in_plan_objects AS
(SELECT DISTINCT t.object_name
FROM v$sql_plan t
WHERE t.object_owner = 'H2')
SELECT t1.table_name,
t1.index_name,
CASE
WHEN t2.object_name IS NULL THEN
'NO'
ELSE
'YES'
END AS in_cached_plan
FROM user_indexes t1
LEFT OUTER JOIN in_plan_objects t2
ON (t1.index_name = t2.object_name);
注意:查詢結果in_cached_plan為NO的表示在快取sql計劃中找不到該索引。
沒有被使任何查詢使用的非鍵索引(非主鍵、非唯一鍵、非外來鍵)或許可以考慮刪除,使用monitoring usage或者查詢v$sql_plan可以找出這些索引,方式如上面所提。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21251711/viewspace-1991286/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 為何在查詢中索引未被使用索引
- 為何在查詢中索引未被使用(二)——問題解答索引
- 為何在查詢中索引未被使用 (文件 ID 1549181.1)索引
- 【MOS:1549181.1】為何在查詢中索引未被使用--為什麼索引沒有被使用索引
- ORACLE 監控索引的使用Oracle索引
- 【索引】oracle查詢使用索引和不使用索引的比較索引Oracle
- 如何監控oracle的索引是否使用Oracle索引
- Oracle 監控索引的使用率Oracle索引
- 監控Oracle索引的使用情況Oracle索引
- Oracle索引的監控Oracle索引
- ElasticSearch分片互動過程(建立索引、刪除索引、查詢索引)Elasticsearch索引
- 監控Oracle索引是否被使用?Oracle索引
- 【索引】Oracle查詢指定索引提高查詢效率索引Oracle
- 從例項看oracle的索引監控與無效索引維護Oracle索引
- 監控mysql索引使用效率的指令碼MySql索引指令碼
- indexedDB 通過索引查詢資料Index索引
- 理解索引(中):MySQL查詢過程和高階查詢索引MySql
- 【索引】反向索引--條件 範圍查詢索引
- elasticsearch之多索引查詢Elasticsearch索引
- Elasticsearch(三):索引查詢Elasticsearch索引
- 查詢索引 常用SQL索引SQL
- 查詢相似的索引索引
- 【索引】反向索引--條件 範圍查詢(二)索引
- cassandra的索引查詢和排序索引排序
- 【Oracle】如何查詢檢視時使用索引Oracle索引
- 在標準MySQL 5.6上查詢沒有使用過的索引的SQLMySql索引
- MongoDB慢查詢與索引MongoDB索引
- 字母索引查詢ListView元件索引View元件
- mysql查詢索引結構MySql索引
- 反向索引與模糊查詢索引
- 走索引掃描的慢查詢索引
- 查詢某個表的索引資訊索引
- Mysql建表、索引、函式、查詢使用中的坑!!!MySql索引函式
- 使用組合索引處理包含空值的查詢索引
- MySQL索引與查詢優化MySql索引優化
- (利用索引)大資料查詢索引大資料
- 根據表查詢索引資訊索引
- 全文索引和查詢概念索引