国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

Oracle9i中監視索引的使用(1)

2024-08-29 13:44:03
字體:
來源:轉載
供稿:網友
介紹

DBA和開發者都喜歡索引。它們可以加速查詢搜索,非凡是在一個數據倉庫的環境中,因為這時數據庫會接收到許多ad-hoc請求。要避免全表搜索,我們一般在每個可能被搜索的列中建立索引。不過索引會占用許多的表空間;在許多的情況下,索引比被索引的表消耗更多的存儲空間。在插入和刪除行的時候,索引還會引入額外的開銷。在Oracle9i之前,要知道一個索引是否被使用是困難的,因此許多數據庫都有許多沒用的索引。這篇文章的目的就是向你介紹通過Oracle9i中的新特性來辨別未使用的索引。

辨別未使用的索引

Oracle9i提供了一個新的技術來監控索引以辨別索引有否被使用。要開始監控一個索引的使用,使用這個命令:

ALTER INDEX index_name MONITORING USAGE;

要停止監控一個索引,輸入: ALTER INDEX index_name NOMONITORING USAGE;

在v$objec_usage視圖中包含有索引監控的使用信息。

CREATE OR REPLACE VIEW SYS.V$OBJECT_USAGE

(

INDEX_NAME,

TABLE_NAME,

MONITORING,

USED,

START_MONITORING,

END_MONITORING

)

AS

select io.name, t.name,

decode(bitand(i.flags, 65536), 0, NO, YES),

decode(bitand(ou.flags, 1), 0, NO, YES),

ou.start_monitoring,

ou.end_monitoring

from sys.obj$ io, sys.obj$ t, sys.ind$ i, sys.object_usage ou

where io.owner# = userenv(SCHEMAID)

and i.obj# = ou.obj#

and io.obj# = ou.obj#

and t.obj# = i.bo#

/

COMMENT ON TABLE SYS.V$OBJECT_USAGE IS

Record of index usage

/

GRANT SELECT ON SYS.V$OBJECT_USAGE TO "PUBLIC"

/

該視圖顯示了由數據庫中收集來的索引使用統計。以下就是該視圖中的列的描述:

 INDEX_NAME: sys.obj$.name 中的索引名字

 TABLE_NAME: sys.obj$obj$name 中的表名

 MONITORING: YES (索引正在被監控), NO (索引沒有被監控)

 USED: YES (索引已經被使用過), NO (索引沒有被使用過)

 START_MONITORING: 開始監控的時間

 END_MONITORING: 結束監控的時間

所有被使用過至少一次的索引都可以被監控并顯示到這個視圖中。不過,一個用戶只可以接收它自己模式中的索引使用。Oracle并沒有提供一個視圖來接收所有模式中的索引。要接收所有模式的索引使用,以SYS用戶登錄并且運行以下的腳本(注重:這并不是Oracle提供的一個腳本。v$all_object_usage是一個自定義的視圖。它包含多一個列,即索引的擁有者)

$ cat all_object_usage.sql

CREATE OR REPLACE VIEW SYS.V$ALL_OBJECT_USAGE

(

OWNER,

INDEX_NAME,

TABLE_NAME,

MONITORING,

USED,

START_MONITORING,

END_MONITORING

)

AS

select u.name, io.name, t.name,

decode(bitand(i.flags, 65536), 0, NO, YES),

decode(bitand(ou.flags, 1), 0, NO, YES),

ou.start_monitoring,

ou.end_monitoring

from sys.obj$ io, sys.obj$ t, sys.ind$ i, sys.object_usage ou, sys.user$ u

where i.obj# = ou.obj#

and io.obj# = ou.obj#

and t.obj# = i.bo#

and io.owner# = u.user#

/

COMMENT ON TABLE SYS.V$ALL_OBJECT_USAGE IS

Record of all index usage - developed by Daniel Liu

/

GRANT SELECT ON SYS.V$ALL_OBJECT_USAGE TO "PUBLIC"

/

CREATE PUBLIC SYNONYM V$ALL_OBJECT_USAGE

FOR SYS.V$ALL_OBJECT_USAGE

/

每次你使用MONITORING USAGE,視圖就會為非凡的索引而復位。所有以前的使用信息都會被清除和復位,并且會記錄下一個新的啟動時間。每次你執行NOMONITORING USAGE,就不會進行進一步的監控;監視期間的結束時間就會被記錄下來。假如你刪除一個正在被監控的索引,該索引的相關信息就會由V$OBJECT_USAGE和V$ALL_OBJECT_USAGE視圖中刪除。
介紹

DBA和開發者都喜歡索引。它們可以加速查詢搜索,非凡是在一個數據倉庫的環境中,因為這時數據庫會接收到許多ad-hoc請求。要避免全表搜索,我們一般在每個可能被搜索的列中建立索引。不過索引會占用許多的表空間;在許多的情況下,索引比被索引的表消耗更多的存儲空間。在插入和刪除行的時候,索引還會引入額外的開銷。在Oracle9i之前,要知道一個索引是否被使用是困難的,因此許多數據庫都有許多沒用的索引。這篇文章的目的就是向你介紹通過Oracle9i中的新特性來辨別未使用的索引。

辨別未使用的索引

Oracle9i提供了一個新的技術來監控索引以辨別索引有否被使用。要開始監控一個索引的使用,使用這個命令:

ALTER INDEX index_name MONITORING USAGE;

要停止監控一個索引,輸入: ALTER INDEX index_name NOMONITORING USAGE;

在v$objec_usage視圖中包含有索引監控的使用信息。

CREATE OR REPLACE VIEW SYS.V$OBJECT_USAGE

(

INDEX_NAME,

TABLE_NAME,

MONITORING,

USED,

START_MONITORING,

END_MONITORING

)

AS

select io.name, t.name,

decode(bitand(i.flags, 65536), 0, NO, YES),

decode(bitand(ou.flags, 1), 0, NO, YES),

ou.start_monitoring,

ou.end_monitoring

from sys.obj$ io, sys.obj$ t, sys.ind$ i, sys.object_usage ou

where io.owner# = userenv(SCHEMAID)

and i.obj# = ou.obj#

and io.obj# = ou.obj#

and t.obj# = i.bo#

/

COMMENT ON TABLE SYS.V$OBJECT_USAGE IS

Record of index usage

/

GRANT SELECT ON SYS.V$OBJECT_USAGE TO "PUBLIC"

/

該視圖顯示了由數據庫中收集來的索引使用統計。以下就是該視圖中的列的描述:

 INDEX_NAME: sys.obj$.name 中的索引名字

 TABLE_NAME: sys.obj$obj$name 中的表名

 MONITORING: YES (索引正在被監控), NO (索引沒有被監控)

 USED: YES (索引已經被使用過), NO (索引沒有被使用過)

 START_MONITORING: 開始監控的時間

 END_MONITORING: 結束監控的時間

所有被使用過至少一次的索引都可以被監控并顯示到這個視圖中。不過,一個用戶只可以接收它自己模式中的索引使用。Oracle并沒有提供一個視圖來接收所有模式中的索引。要接收所有模式的索引使用,以SYS用戶登錄并且運行以下的腳本(注重:這并不是Oracle提供的一個腳本。v$all_object_usage是一個自定義的視圖。它包含多一個列,即索引的擁有者)

$ cat all_object_usage.sql

CREATE OR REPLACE VIEW SYS.V$ALL_OBJECT_USAGE

(

OWNER,

INDEX_NAME,

TABLE_NAME,

MONITORING,

USED,

START_MONITORING,

END_MONITORING

)

AS

select u.name, io.name, t.name,

decode(bitand(i.flags, 65536), 0, NO, YES),

decode(bitand(ou.flags, 1), 0, NO, YES),

ou.start_monitoring,

ou.end_monitoring

from sys.obj$ io, sys.obj$ t, sys.ind$ i, sys.object_usage ou, sys.user$ u

where i.obj# = ou.obj#

and io.obj# = ou.obj#

and t.obj# = i.bo#

and io.owner# = u.user#

/

COMMENT ON TABLE SYS.V$ALL_OBJECT_USAGE IS

Record of all index usage - developed by Daniel Liu

/

GRANT SELECT ON SYS.V$ALL_OBJECT_USAGE TO "PUBLIC"

/

CREATE PUBLIC SYNONYM V$ALL_OBJECT_USAGE

FOR SYS.V$ALL_OBJECT_USAGE

/

每次你使用MONITORING USAGE,視圖就會為非凡的索引而復位。所有以前的使用信息都會被清除和復位,并且會記錄下一個新的啟動時間。
每次你執行NOMONITORING USAGE,就不會進行進一步的監控;監視期間的結束時間就會被記錄下來。假如你刪除一個正在被監控的索引,該索引的相關信息就會由V$OBJECT_USAGE和V$ALL_OBJECT_USAGE視圖中刪除。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 恩平市| 齐河县| 临沂市| 遵化市| 黑山县| 和政县| 内丘县| 长顺县| 睢宁县| 迭部县| 乐亭县| 松溪县| 武功县| 巍山| 五寨县| 大连市| 永年县| 宣汉县| 青河县| 扎囊县| 安徽省| 巨鹿县| 莱州市| 临洮县| 定州市| 虎林市| 鹤峰县| 兴国县| 鄂托克前旗| 大港区| 黎平县| 四子王旗| 抚远县| 茶陵县| 汤阴县| 福建省| 通道| 分宜县| 渝中区| 缙云县| 徐州市|