- Oracle Exadata性能優化
- 石云華 陳浩 饒冰
- 1124字
- 2020-05-21 18:00:34
2.1 存儲索引工作原理
存儲索引是Exadata存儲管理軟件中非常強大的一個特性,有助于避免存儲節點的IO掃描操作。Exadata存儲管理軟件會在存儲服務器的內存中創建和維護一個存儲索引。存儲索引的維護工作對用戶而言都是透明的,無需用戶的參與。
存儲服務器上存放的數據被邏輯地分成若干小的分區,每個分區大小為1MB。這些小分區稱為Storage Region。存儲管理軟件將每個Storage Region中存儲的物理對象的某一列或多個列的最小值和最大值保存在內存中,每一個Storage Region在內存中保存的最小值和最大值的信息條目叫作Region Index,若干條這樣的內存Region Index條目統稱為存儲索引。
存儲索引與傳統數據庫中的索引是完全不同的兩種概念,主要體現在如下幾點。
(1)傳統數據庫中的索引是在物理上真實存在的,有物理地址可以直接定位到磁盤位置;而存儲索引不是物理存在的,它沒有物理塊地址,它只是存儲節點內存中的一片區域,臨時地存放一些統計信息。
(2)傳統數據庫中的索引的作用是為了快速定位需要訪問的數據塊;而存儲索引的作用是盡量減少數據發生物理IO掃描的區域。
(3)存儲節點重啟不會導致傳統數據庫中的索引丟失;而存儲節點重啟會導致存儲索引丟失,因為它只是臨時存放在內存區域的一些統計信息而已。
存儲索引的作用類似于傳統Oracle數據庫中的“分區”(Partition),都是減少需要訪問的數據量,減少存儲服務器上的物理IO掃描。
注意:只有在智能掃描的前提下,才有可能利用上存儲索引特性,所以并不是所有的應用系統都能利用上存儲索引特性。只有那些數據倉庫性質的,同時帶有謂詞查詢條件過濾的SQL語句才會從存儲索引特性中獲益,而那些OLTP的業務系統基本上不會進行智能掃描操作,也就基本上無法利用存儲索引特性了。
存儲索引的工作原理如圖2.1所示。

圖2.1 存儲索引工作原理
在圖2.1中,對于每一個ASM磁盤上的存儲空間,邏輯上將每1MB大小的區域稱為一個Storage Region。假設T1表占用了2個Storage Region空間,T2表占用了1個Storage Region空間。當第一次訪問T1表的B字段時,存儲節點會自動地在內存中維護T1這張表的Region Index。從Region Index部分可以看出,B:1/5也即這1MB的物理區域中,T1表的B字段最小值為1,最大值為3;B:3/8也即這1MB的物理區域中,T1表的B字段最小值為3,最大值為8。當再次訪問T1表,同時B字段作為過濾條件時(如SQL語句:SELECT?FROM T1 WHERE B<2;),則會先搜索存儲節點內存中存儲索引中的Region Index條目。當發現第一個Storage Region空間包含需要訪問的數據,而第二個Storage Region空間不包含需要訪問的數據時,則只會物理掃描第一個Storage Region空間,而跳過第二個Storage Region空間。
注意:無論SQL語句是否使用智能掃描,數據庫節點都要求存儲節點實際掃描所請求的數據塊,而只有使用了智能掃描,同時存儲索引生效時,才會真正減少存儲節點實際掃描的數據塊數量,這樣才會真正地減少物理IO的使用率,同樣也意味著更快的處理速度和更快的IO響應時間。
- Mastering NetBeans
- Web前端開發技術:HTML、CSS、JavaScript(第3版)
- OpenDaylight Cookbook
- Python for Secret Agents:Volume II
- Interactive Data Visualization with Python
- WSO2 Developer’s Guide
- Mastering Kali Linux for Web Penetration Testing
- 名師講壇:Spring實戰開發(Redis+SpringDataJPA+SpringMVC+SpringSecurity)
- Hands-On Natural Language Processing with Python
- Mastering Drupal 8 Views
- Python入門很輕松(微課超值版)
- 虛擬現實建模與編程(SketchUp+OSG開發技術)
- 用Go語言自制編譯器
- SOA Patterns with BizTalk Server 2013 and Microsoft Azure(Second Edition)
- jBPM6 Developer Guide