測試SQLPLUS的ARRAYSIZE對效能的影響
這個過程就是統計資訊中的SQL*Net roundtrips to/from client。
因為arraysize 預設是15行,那麼就有一個問題,因為我們一個block中的記錄數一般都會超過15行,所以如果按照15行掃描一次,那麼每次掃描要多掃描一個資料塊,一個資料塊也可能就會重複掃描多次。
重複的掃描會增加consistent gets 和 physical reads。 增加physical reads,這個很好理解,掃描的越多,物理讀的可能性就越大。
consistent gets,這個是從undo裡讀的數量,Oracle 為了保證資料的一致性,當一個查詢很長,在查詢之後,資料塊被修改,還未提交,再次查詢時候,Oracle根據Undo 來構建CR塊,這個CR塊,可以理解成資料塊在之前某個時間的狀態。 這樣通過查詢出來的資料就是一致的。
那麼如果重複掃描的塊越多,需要構建的CR塊就會越多,這樣讀Undo 的機會就會越多,consistent gets 就會越多。
如果資料每次傳到客戶端有中斷,那麼這些資料會重新掃描,這樣也就增加邏輯讀,所以調整arraysize可以減少傳的次數,減少邏輯讀。
所以通過上面的說明,arraysize 引數如果過低,會影響如physical reads,consistent gets 還有SQL*Net roundtrips to/from client次數。 ---本段引自DAVE部落格。
實驗結論:實驗用表是由dba_objects;建立。通過設定arraysize為1、15、200,可以通過最後的彙總表格得出將arraysize設定為200,可以得到更好的查詢效能。
具體表現在:SQL語句執行時間大幅減少,通過Oracle Net從客戶端收到的位元組總數大幅減少,SQL * Net傳送和從客戶端接收的位元組總數大幅減少--減幅比例接近arraysize尺寸的比例。
所以在使用SQLPLUS客戶端查取大資料、SPOOL輸出時,可以考慮將arraysize設定的大一點,提高效能。永久設定此引數可以在$ORACLE_HOME/sqlplus/admin/glogin.sql中寫入set arraysize 15 這樣。
1,使用SQLPLUS的ARRAYSIZE預設值15來進行測試
BYS@bys1>create tabele test2 as select * from dba_objects;
BYS@bys1>alter system flush shared_pool;
System altered.
BYS@bys1>alter system flush buffer_cache;
System altered.
BYS@bys1>set arraysize 15 因為我已經更改過,所以手動再改為預設的15
此設定只在當前SESSION中有用,如果需要永久設定,可以在$ORACLE_HOME/sqlplus/admin/glogin.sql中寫入set arraysize 15 這樣。
BYS@bys1>select * from test2;
72465 rows selected.
Elapsed: 00:00:02.12
----------------------------------------------------------
606 recursive calls
0 db block gets
5882 consistent gets
1052 physical reads
0 redo size
8036433 bytes sent via SQL*Net to client
53549 bytes received via SQL*Net from client
4832 SQL*Net roundtrips to/from client
6 sorts (memory)
0 sorts (disk)
72465 rows processed
彙總:執行時間:02.12秒,606次遞迴呼叫,5882 一致讀,1052 物理讀,8036433 bytes傳送,53549 bytes接收,4832次往返
2.將SQLPLUS的ARRAYSIZE值設定為200
BYS@bys1>alter system flush buffer_cache;
System altered.
BYS@bys1>alter system flush shared_pool;
System altered.
BYS@bys1>set arraysize 200
BYS@bys1>set autotrace traceonly stat 只顯示統計資訊不顯示輸出結果
BYS@bys1>select * from test2;
72465 rows selected.
Elapsed: 00:00:00.62
Statistics
----------------------------------------------------------
606 recursive calls
0 db block gets
1491 consistent gets
1049 physical reads
0 redo size
7455593 bytes sent via SQL*Net to client
4401 bytes received via SQL*Net from client
364 SQL*Net roundtrips to/from client
6 sorts (memory)
0 sorts (disk)
72465 rows processed 彙總:執行時間:00.62秒,606次遞迴呼叫,1491一致讀,1049物理讀,7455593 bytes傳送,4401 bytes接收,364次往返
3.將SQLPLUS的ARRAYSIZE值設定為1
BYS@bys1>alter system flush buffer_cache;System altered.
BYS@bys1>alter system flush shared_pool;
System altered.
BYS@bys1>set autotrace traceonly stat
BYS@bys1>set arraysize 1
BYS@bys1>select * from test2;
72465 rows selected.
Elapsed: 00:00:08.71
Statistics
----------------------------------------------------------
606 recursive calls
0 db block gets
36830 consistent gets
1049 physical reads
0 redo size
12118659 bytes sent via SQL*Net to client
398971 bytes received via SQL*Net from client
36234 SQL*Net roundtrips to/from client
6 sorts (memory)
0 sorts (disk)
72465 rows processed
彙總:執行時間:08.71秒,606次遞迴呼叫,36830一致讀,1049物理讀,12118659 bytes傳送,398971bytes接收,36234次往返
三種引數的效能彙總表格如下:
ARRAYSIZE | 執行時間/秒 | 遞迴呼叫 | 一致讀 | 物理讀 | 客戶端接收 | 客戶端傳送 | Oracle網路訊息傳送和從客戶端接收總數 |
1 | 8.17 | 606 | 36830 | 1049 | 12118659 | 398971 | 36234 |
15 | 2.12 | 606 | 5882 | 1052 | 8036433 | 53549 | 4832 |
200 | 0.62 | 606 | 1491 | 1049 | 7455593 | 4401 | 364 |
倍數 | |||||||
15與1=15各項效能對比(倍) | 8.17/2.12=3.85 | 36830/5882=6.2 | 1.5 | 7.4 | 7.5 | ||
15與200=13各項效能對比-倍 | 3.4 | 3.9 | 1.07 | 12.6 | 13.2 |
相關文章
- Arraysize的設定以及對查詢效能的影響
- Arraysize 對consistent get的影響
- arraysize/TDU/SDU的設定對sql執行代價的影響SQL
- stopkey對索引掃描的影響測試TopK索引
- 人工智慧對軟體測試的影響人工智慧
- mysql的DDL操作對業務產生影響測試MySql
- Oracle 11g 測試停庫對job的影響Oracle
- 測試truncate,delete 對rman 備份集大小的影響delete
- JAVA 異常對於效能的影響Java
- MogDB/openGauss 壞塊測試-對啟動的影響-測試筆記1筆記
- 測試多分支開發對合並程式碼的影響
- 軟體測試對軟體質量的影響有那些?
- DB2 HADR對效能的影響DB2
- InnoDB 隔離模式對 MySQL 效能的影響模式MySql
- css屬性的選擇對動畫效能的影響CSS動畫
- 分支對程式碼效能的影響和優化優化
- JavaScript 事件對記憶體和效能的影響JavaScript事件記憶體
- mysql刪除和更新操作對效能的影響MySql
- 磁碟排序對Oracle資料庫效能的影響排序Oracle資料庫
- 硬體環境對系統效能的影響
- try catch 對程式碼執行的效能影響
- 測試修改作業系統時間&時區對oracle的影響作業系統Oracle
- Java中的Exception拋異常對效能的影響 - BaeldungJavaException
- 軟體測試對軟體質量有哪些影響?
- 物料主資料中日期對MRP影響測試
- 伺服器IO瓶頸對MySQL效能的影響伺服器MySql
- 磁碟排序對Oracle資料庫效能的影響PT排序Oracle資料庫
- 容器化對資料庫的效能有影響嗎?資料庫
- table_open_cache引數對mysql效能的影響MySql
- 可觀測性對測試的影響:QCon倫敦大會上對Amy Phillips的訪談
- RAID的概念和RAID對於SQL效能的影響AISQL
- [zt] 影響SQL效能的原因SQL
- Oracle exp中compress引數的影響測試Oracle
- Oracle 物化檢視快速重新整理對效能的影響Oracle
- [zt] segment size(strip size)對磁碟陣列效能的影響陣列
- 【AWR】測試AWR手動取樣對系統自動取樣的影響
- 軟體的效能設計(一)介面設計對軟體效能的影響 (轉)
- 軟體的效能設計(二) 臨時物件對軟體效能的影響 (轉)物件