日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

consistent gets在Oracle使用特例

發布時間:2025/6/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 consistent gets在Oracle使用特例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Oracle數據庫中,consistent gets在判斷一段SQL的性能時非常有用,通常來講比較兩段SQL的性能好壞不是看誰的執行時間短,而是看誰的consistent gets小。不過這也不是絕對的,下面這個例子就是一個反例。 一:通常情況下,不在logical RAM buffer中的數據要通過physical reads來讀取,而physical reads后通常會緊跟著一個consistent gets.因此一般情況下consistent gets是要比physical reads大的。但是有一個特例,如果physical reads得到的數據直接用于HASH或者SORT,則只記為physical reads不記為consistent gets.所以加上order by后有可能physical reads多但consistent gets少。不過這個原因不是我這里現象產生的原因,因為我這個實驗里根本沒有physical reads. 二:arraysize的影響。arraysize是指讀取數據時一次讀取得到的行數。這個值默認為15,使用show arraysize命令可以查看。一個數據塊例如有100條記錄,那么并不是讀取這個塊一次就能取到所有數據,以arraysize=15為例,就要有 100/15=7次consistent gets.把arraysize設置得大一點可以降低consistent gets,不過有時候可能會消耗更多的資源。如果我們做select count(0) from test;操作,那么Oracle DBA會把arraysize暫時設為test的行數,因此consistent gets會很少: 代碼如下: ETL@RACTEST> select count(0) from test; Elapsed: 00:00:00.00 Execution Plan Plan hash value: 1950795681 -------------- | Id | Operation | Name | Rows | Cost (%CPU)| Time | | 0 | SELECT STATEMENT | | 1 | 6 (0)| 00:00:01 | | 1 | SORT AGGREGATE | | 1 | | | | 2 | TABLE ACCESS FULL| TEST | 10000 | 6 (0)| 00:00:01 | ------------------------------------------------------------------- Note - dynamic sampling used for this statement Statistics 0 recursive calls 0 db block gets 23 consistent gets 0 physical reads 0 redo size 515 bytes sent via SQL*Net to client 465 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed 可以看到select count(0)只需要23個邏輯讀。一共10000條數據,10000/15=666.667 ,好,667+23=690!和第1個SQL的consistent gets竟然驚人的一致!這不是巧合,這就是consistent gets的計算公式。我們還可以發現select count(0)和第2個SQL的consistent gets竟然也驚人地一致,都是23! TOM的解釋是: 在select * from test order by 1;時,Oracle也把arraysize臨時設為test表的行數,它把所有數據先全部取出來放到sort區做排序,而在sort區的讀取就不算在 consistent gets里了。所以雖然第2個SQL和select count(0)的consistent gets相同,但它的效率一定比select count(0)低,我們看執行計劃里的COST便可以得知,第2個SQL的COST為7,select count(0)的COST為6,第1個SQL的COST也為6.(COST相同并不代表執行效率完全相同)

轉載于:https://blog.51cto.com/19880614/858238

總結

以上是生活随笔為你收集整理的consistent gets在Oracle使用特例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。