SQL Server 2005資料頁讀取--高階掃描
在 SQL Server Enterprise Edition 中,高階掃描功能使得多項任務可以共享完全表掃描。如果 Transact-SQL 語句的執行計劃需要掃描表中的資料頁,並且資料庫引擎檢測到其他執行計劃正在掃描該表,則資料庫引擎會在第二個掃描的當前位置將第二個掃描加入第一個掃 描。資料庫引擎會一次讀取一頁,並將每一頁的行傳遞給這兩個執行計劃。此操作將一直持續到該表的結尾處。
此時,第一個執行計劃已有完整的掃描結果,而第二個執行計劃仍必須檢索在它加入正在進行的掃描之前讀取的資料頁。然後,第二個執行計劃中的掃描將繞 回到表的第一個資料頁,並從這裡向前掃描到它加入第一個掃描時所處的位置。可以按這種方式組合任意數量的掃描。資料庫引擎將迴圈遍歷資料頁,直到完成所有 掃描。這種機制也稱為“走馬燈式掃描”,說明了為何在沒有 ORDER BY 子句的情況下無法保證 SELECT 語句所返回結果的順序。
例如,假設某個表有 500,000 頁。UserA 執行了一條 Transact-SQL 語句,要求對該表進行掃描。當掃描已處理了 100,000 頁時,UserB 執行了另一條 Transact-SQL 語句,要對同一個表進行掃描。資料庫引擎將為頁 100,001 之後的頁安排一組讀取請求,並將每頁中的行同時傳遞迴兩個掃描。當掃描到頁 200,000 時,UserC 執行了另一條 Transact-SQL 語句,要對同一個表進行掃描。則從頁 200,001 開始,資料庫引擎將把它讀取的每一頁中的行傳遞迴所有三個掃描。當資料庫引擎讀取完第 500,000 行之後,UserA 的掃描就完成了,而 UserB 和 UserC 的掃描將繞回到頁 1 開始讀取。當資料庫引擎到達頁 100,000 時,UserB 的掃描就完成了。然後 UserC 的掃描將繼續進行,直到它讀取完頁 200,00。此時,所有掃描便均已完成。
在沒有高階掃描的情況下,每個使用者都必須要爭用緩衝區空間並因此導致磁碟臂爭用。然後,會分別為每個使用者讀取一次相同的頁,而不是一次讀取並由多個 使用者共享,這樣會降低效能並加重資源負擔。
在 SQL Server Enterprise Edition 中,高階掃描功能使得多項任務可以共享完全表掃描。如果 Transact-SQL 語句的執行計劃需要掃描表中的資料頁,並且資料庫引擎檢測到其他執行計劃正在掃描該表,則資料庫引擎會在第二個掃描的當前位置將第二個掃描加入第一個掃 描。資料庫引擎會一次讀取一頁,並將每一頁的行傳遞給這兩個執行計劃。此操作將一直持續到該表的結尾處。
此時,第一個執行計劃已有完整的掃描結果,而第二個執行計劃仍必須檢索在它加入正在進行的掃描之前讀取的資料頁。然後,第二個執行計劃中的掃描將繞 回到表的第一個資料頁,並從這裡向前掃描到它加入第一個掃描時所處的位置。可以按這種方式組合任意數量的掃描。資料庫引擎將迴圈遍歷資料頁,直到完成所有 掃描。這種機制也稱為“走馬燈式掃描”,說明了為何在沒有 ORDER BY 子句的情況下無法保證 SELECT 語句所返回結果的順序。
例如,假設某個表有 500,000 頁。UserA 執行了一條 Transact-SQL 語句,要求對該表進行掃描。當掃描已處理了 100,000 頁時,UserB 執行了另一條 Transact-SQL 語句,要對同一個表進行掃描。資料庫引擎將為頁 100,001 之後的頁安排一組讀取請求,並將每頁中的行同時傳遞迴兩個掃描。當掃描到頁 200,000 時,UserC 執行了另一條 Transact-SQL 語句,要對同一個表進行掃描。則從頁 200,001 開始,資料庫引擎將把它讀取的每一頁中的行傳遞迴所有三個掃描。當資料庫引擎讀取完第 500,000 行之後,UserA 的掃描就完成了,而 UserB 和 UserC 的掃描將繞回到頁 1 開始讀取。當資料庫引擎到達頁 100,000 時,UserB 的掃描就完成了。然後 UserC 的掃描將繼續進行,直到它讀取完頁 200,00。此時,所有掃描便均已完成。
在沒有高階掃描的情況下,每個使用者都必須要爭用緩衝區空間並因此導致磁碟臂爭用。然後,會分別為每個使用者讀取一次相同的頁,而不是一次讀取並由多個 使用者共享,這樣會降低效能並加重資源負擔。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-630487/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Logstash : 從 SQL Server 讀取資料SQLServer
- SQL Server 2005實現資料庫快取依賴SQLServer資料庫快取
- sql server 2005資料庫快照SQLServer資料庫
- <<SQL Server 2005 高階程式設計>> 學習筆記(2)SQLServer程式設計筆記
- Text Scanner Mac高階版ocr文字掃描神器Mac
- 高階掃描技術及原理介紹(轉)
- 非掃描式定位攻擊域內SQL ServerSQLServer
- SQL Server之旅(2):理解萬惡的表掃描SQLServer
- Sql Server 2005資料庫分割槽SQLServer資料庫
- sql server 2005資料庫載入SQLServer資料庫
- java poi讀取Excel資料 插入到SQL SERVER資料庫中JavaExcelSQLServer資料庫
- [zt] SQL存取Oracle當中掃描資料的方法SQLOracle
- C# 掃描並讀取圖片中的文字C#
- sql-server高階查詢SQLServer
- Oracle中存取資料掃描Table及索引的方式(全表掃描,索引掃描等)Oracle索引
- SQL Server 2005和SQL Server 2000資料的相互匯入SQLServer
- Sql Server之旅——第二站 理解萬惡的表掃描SQLServer
- SQL 掃描引數(SARG)SQL
- SQL SERVER 2005分頁儲存過程SQLServer儲存過程
- 解讀Oracle 索引掃描Oracle索引
- sql server 2005 資料修改的內部原理SQLServer
- 爛泥:SQL Server 2005資料庫安裝SQLServer資料庫
- SQL Server 2005對海量資料的處理SQLServer
- SQL Server 2005 常用資料型別詳解SQLServer資料型別
- SQL Server 2005 'Text,nText,image'資料型別SQLServer資料型別
- 讀取SQL Server 表結構SQLServer
- 理解資料庫掃描方法-利用掃描方法對資料儲存進行優化資料庫優化
- SQL Server 2005快速Web分頁的實現SQLServerWeb
- 分頁按頁碼讀取redis資料Redis
- SQL Server 資料頁損壞修復SQLServer
- 匯出Sql server 2005資料庫中某表的資料SQLServer資料庫
- 如何建立和還原SQL Server 2005資料庫?SQLServer資料庫
- 在 SQL Server 2005 中配置資料庫郵件SQLServer資料庫
- SQL Server 2005 管理併發資料訪問[zt]SQLServer
- SQL Server 2005+ 中的資料塊種類SQLServer
- 小白讀iOS冗餘資源掃描指令碼iOS指令碼
- Sql最佳化(十一) 避免對資料的重複掃描(1)SQL
- SQL Server 2005 實現資料庫快取依賴的實現步驟整理SQLServer資料庫快取