2016-12-08 75 views
0

假設oracle數據庫有40M字節的緩存內存。我是數據庫的唯一用戶,我想了解如何執行查詢以計算緩存命中率一個問題。在Oracle中解釋計劃和計算緩存命中率

比方說,我們有這個疑問:

SELECT column1, count(*) 
FROM table1 
GROUP BY column1 
ORDER BY column1 desc 

假設table1不到40M大小,現在解釋計劃說:(?I/O)

TABLE ACESS(FULL)有1330的成本,那麼成本1340和SELECT STATEMENT成本1340也SORT(GROUP BY)

我不明白,爲什麼SORTSELECT STATEMENT每個都花費1340個I/O?

由於當我們進行表訪問時我們的緩存大於表的大小,所以我們在緩存中加載磁盤內容,然後當我們想要排序和選擇時,我們只需要檢索緩存的內容,所以在我的頭腦應該是零排序和選擇的I/O。

另外我該如何計算該查詢的緩存命中率?

+0

你可以發佈執行計劃嗎? –

回答

1

成本是操作的預期時間,用等量的單個塊讀取來表示,這將花費該時間量。

因此,對於哪一個單塊讀取0.5ms的花費將有200

成本你描述聽起來像他們是累積的數字爲選擇一個系統,所以1340在100ms的操作包括1340 group by,它本身包含1330個表訪問。因此,該組按成本計算10.

查詢的高速緩存命中率取決於執行查詢之前SGA中該表的有多少 - 如果沒有它,BCHR將爲0% 。如果全部是,BCHR將是100%。

請注意,作爲系統調整工具,BCHR被廣泛棄用,因爲高BCHR和高效查詢計劃之間的相關性非常弱。事實上,您可以通過使查詢計劃效率低得多來提高您的BCHR。

+0

謝謝,但不排序和選擇計數塊讀取?那麼這會使緩存命中率達到66.6%,或者是在運行中完成排序和選擇,因此它們不會被視爲I/O? – user2241915

+0

不是真的 - 如果排序太大而無法在內存中執行(PGA,而不是SGA),那麼它會溢出到磁盤,但涉及的I/O不會影響BCHR(BCHR不是BCHR的另一個原因)系統效率的一個很好的衡量標準)。 –