同樣SQL同樣執行計劃在不同節點執行時間差很遠
Oracle 10.2.0.4 , Linux AS 5.4 64bit , 4 Nodes RAC
設定上因為節點4是作為report用處的,所以我們將它與其他3個節點徹底分割開(透過remote_listener=''來設定,其他節點
都有設定), 同樣的一個report SQL ,在4個節點上的cost及執行步驟,執行計劃一模一樣, 但是在專用於report的節點4上
執行比較快 (大約1分鐘), 但是在其他節點居然需要 8 分多鐘, 我是在平常生產階段做的測試, 其他同事在非生產階段(比較
少的DML) 做測試也是一樣 。 4個節點的前端Server配置及OS配置都一樣。 節點1,2,3用於OLTP生產系統, 而節點4主要
用於報表查詢, web中也有很少量的insert, update維護動作, 而且1,2,3的負載比較低, 平均只有 2.5 左右 (24核CPU),
節點4負載稍微高一些,平均 8.5 左右 。
sga設定了20G, 節點1,2,3 buffer cache 命中率約為 99.5% 左右,節點4為 99.91% .
檢視一下sql trace統計,不一樣的地方是主要是 physical reads , 節點4上是9w多, 節點1,2,3是30w左右 。
以下統計前提都是在每個節點上事先有執行過這個相同SQL .
在節點4上的2次統計:
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1124242 consistent gets
96969 physical reads
220 redo size
1234109 bytes sent via SQL*Net to client
15789 bytes received via SQL*Net from client
721 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
10798 rows processed
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1125569 consistent gets
93146 physical reads
860 redo size
1258173 bytes sent via SQL*Net to client
15910 bytes received via SQL*Net from client
732 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
10957 rows processed
在節點1上的2次統計:
Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
1135486 consistent gets
289516 physical reads
116 redo size
1234703 bytes sent via SQL*Net to client
15800 bytes received via SQL*Net from client
722 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
10802 rows processed
Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
1133003 consistent gets
306163 physical reads
0 redo size
1258394 bytes sent via SQL*Net to client
15909 bytes received via SQL*Net from client
732 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
10961 rows processed
在節點3上的2次統計:
Statistics
----------------------------------------------------------
759 recursive calls
0 db block gets
1141367 consistent gets
338301 physical reads
552 redo size
1263503 bytes sent via SQL*Net to client
15844 bytes received via SQL*Net from client
726 SQL*Net roundtrips to/from client
31 sorts (memory)
0 sorts (disk)
10865 rows processed
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1150321 consistent gets
347188 physical reads
0 redo size
1281392 bytes sent via SQL*Net to client
15899 bytes received via SQL*Net from client
731 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
10948 rows processed
設定上因為節點4是作為report用處的,所以我們將它與其他3個節點徹底分割開(透過remote_listener=''來設定,其他節點
都有設定), 同樣的一個report SQL ,在4個節點上的cost及執行步驟,執行計劃一模一樣, 但是在專用於report的節點4上
執行比較快 (大約1分鐘), 但是在其他節點居然需要 8 分多鐘, 我是在平常生產階段做的測試, 其他同事在非生產階段(比較
少的DML) 做測試也是一樣 。 4個節點的前端Server配置及OS配置都一樣。 節點1,2,3用於OLTP生產系統, 而節點4主要
用於報表查詢, web中也有很少量的insert, update維護動作, 而且1,2,3的負載比較低, 平均只有 2.5 左右 (24核CPU),
節點4負載稍微高一些,平均 8.5 左右 。
sga設定了20G, 節點1,2,3 buffer cache 命中率約為 99.5% 左右,節點4為 99.91% .
檢視一下sql trace統計,不一樣的地方是主要是 physical reads , 節點4上是9w多, 節點1,2,3是30w左右 。
以下統計前提都是在每個節點上事先有執行過這個相同SQL .
在節點4上的2次統計:
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1124242 consistent gets
96969 physical reads
220 redo size
1234109 bytes sent via SQL*Net to client
15789 bytes received via SQL*Net from client
721 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
10798 rows processed
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1125569 consistent gets
93146 physical reads
860 redo size
1258173 bytes sent via SQL*Net to client
15910 bytes received via SQL*Net from client
732 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
10957 rows processed
在節點1上的2次統計:
Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
1135486 consistent gets
289516 physical reads
116 redo size
1234703 bytes sent via SQL*Net to client
15800 bytes received via SQL*Net from client
722 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
10802 rows processed
Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
1133003 consistent gets
306163 physical reads
0 redo size
1258394 bytes sent via SQL*Net to client
15909 bytes received via SQL*Net from client
732 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
10961 rows processed
在節點3上的2次統計:
Statistics
----------------------------------------------------------
759 recursive calls
0 db block gets
1141367 consistent gets
338301 physical reads
552 redo size
1263503 bytes sent via SQL*Net to client
15844 bytes received via SQL*Net from client
726 SQL*Net roundtrips to/from client
31 sorts (memory)
0 sorts (disk)
10865 rows processed
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1150321 consistent gets
347188 physical reads
0 redo size
1281392 bytes sent via SQL*Net to client
15899 bytes received via SQL*Net from client
731 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
10948 rows processed
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-687128/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- selenium-grid 有多個節點,但 pytest.main 批次執行用例,每次只有一個節點執行用例,不能同時多個節點執行,要怎樣才能多個節點同時執行AI
- [20221104]執行計劃一樣Plan hash value不同.txt
- 故障分析 | MySQL 相同 SQL 不同環境執行時間不一樣案例分析MySql
- python程式計算執行時間差Python
- 避免DbContext同時在多個執行緒呼叫Context執行緒
- Oracle sql執行計劃OracleSQL
- oracle查詢sql執行耗時、執行時間、sql_idOracleSQL
- 什麼?一個核同時執行兩個執行緒?執行緒
- IDEA如何同時執行兩個ModulesIdea
- MyBatis列印SQL執行時間MyBatisSQL
- Java併發程式設計(二)如何保證執行緒同時/交替執行Java程式設計執行緒
- 怎樣在sqlite3上執行SQL語句SQLite
- TiDB與MySQL的SQL差異及執行計劃簡析TiDBMySql
- mysql主從庫執行計劃不同MySql
- PHP 避免同時執行一個指令碼PHP指令碼
- springBoot @Scheduled多工同時開始執行Spring Boot
- 怎樣在 Kubernetes 上執行 PostgreSQLSQL
- 怎樣在Python中執行cmdPython
- 執行計劃-1:獲取執行計劃
- 自適應查詢執行:在執行時提升Spark SQL執行效能SparkSQL
- 怎樣在windows上定時執行python指令碼WindowsPython指令碼
- 如何檢視SQL的執行計劃SQL
- 在MySQL中使用explain查詢SQL的執行計劃MySqlAI
- 執行計劃沒變,執行時快時慢是怎麼回事?
- 為啥同樣的邏輯在不同前端框架中效果不同前端框架
- DBeaver同時執行多條insert into報錯處理
- Oracle SQL Profile固定執行計劃的方法OracleSQL
- 利用SSIS在SQL Azure中執行計劃任務(下)KCSQL
- 利用SSIS在SQL Azure中執行計劃任務(上)DJSQL
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- 執行計劃執行步驟原則
- MySQL執行計劃MySql
- SYBASE執行計劃
- MySQL 執行計劃MySql
- Stopwatch 計算程式執行時間
- 怎樣停止一個正在執行的執行緒執行緒
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- ThreadPoolExecutor執行緒池任務執行失敗的時候會怎樣thread執行緒
- 同個執行緒裡,如果執行緒正在忙過程中,定時器時間到了會被延遲觸發嗎?執行緒定時器