Oracle
Oracle 數據庫中的優化器如何使用 I/O 統計資訊?
我想幫助 Oracle 的查詢優化器做出更明智的決策。我一直無法找到關於優化器如何確定 I/O 操作成本的更多資訊,除了無源說明它使用檢索單個數據塊所需的時間。以下是我想知道的一些事情:
- 是否可以查看優化器目前使用的 I/O 基準?
- 是否可以觸發這些基準的更新?
- 優化器是否考慮了操作的目前I/O 成本?例如,如果儲存設備上的並發負載很大,導致性能下降,是否考慮到 I/O 的相對成本會暫時變高?
- 優化器是否考慮延遲/隨機訪問性能與吞吐量/順序性能?
- 如果您在具有不同性能特徵的多個儲存設備上擁有數據文件,優化器是否有並應用了特定於設備的成本?
- 您可以在 中查看目前使用的統計資訊
SYS.AUX_STATS$
。DBMS_STATS.GATHER_SYSTEM_STATS
收集系統統計資訊。執行它將gathering_mode='NOWORKLOAD'
擷取伺服器的 IO 相關統計資訊。您通常也會在工作負載下執行它(“START/STOP”、“INTERVAL”)。- (4,5) 在典型負載期間收集系統統計資訊應該可以解決您提到的潛在問題。另外,(4)會受到優化器模式(
ALL_ROWS
vsFIRST_ROWS
) 的影響此外,通過
dbms_stats
包中的過程,可以多次收集統計資訊,導出 (EXPORT_SYSTEM_STATS
)、導入 (EXPORT_SYSTEM_STATS
) 或刪除它 (DELETE_SYSTEM_STATS
)。
我沒有任何真正的答案。我主要有一些關於你可以去哪裡尋找更多資訊的指針。
查看 I/O 統計資訊 (1)
您可能會喜歡這個網址:
看來 Oracle 在 V$FILESTAT 中保留了“往返”資訊。
更新 I/O 統計資訊 (2)
Oracle ORION 是我首先想到的。快速搜尋後,似乎有一個 DBMS 包可以更新 I/O 統計資訊。
https://oracle-base.com/articles/misc/measuring-storage-performance-for-oracle-systems
問題 3 和 4
我只有自己的想法和推理。
SAS 與 SATA (5)
“不同特徵”的概念對於 Oracle 數據庫並不陌生(至少,不在文件中)。12c 的
ILM
子句允許您自動將數據從 ASM 磁碟組[+SAS]
上的表空間移動到 ASM 磁碟組上的表空間[+SATA]
。但是,我不會在同一個表空間中混合具有不同特徵的文件。
磁碟碟片的內部/外部部分
ASM 似乎有能力區分這些。我會查看文件。
https://docs.oracle.com/database/121/OSTMG/GUID-857680CA-35B0-4C88-9DF4-55537C8F1B7C.htm#OSTMG13790