在 [Windows NT 的 SQL Server 的效能增強功能

文章翻譯 文章翻譯
文章編號: 160606 - 檢視此文章適用的產品。
本文已封存。本文係以「現狀」提供且不會再更新。
全部展開 | 全部摺疊

在此頁中

結論

新的介面已新增為效能增強功能為 SQL Server 時 Windows NT 底下執行。這個增強功能牽涉到散佈/收集 I/O 功能。

其他相關資訊

散佈圖/蒐集是什麼?

散佈圖/蒐集是一種標準技術,用於某些高效能的 I/O 狀況。它通常指的是直接記憶體存取 (DMA) 傳輸。給定的資料區塊可能存在於記憶體中,為幾個不連續的緩衝區。 不散佈/收集記憶磁碟傳輸作業系統設定通常會為每個緩衝區做一個傳輸或封鎖時移動至單一較大的緩衝區之前啟始之傳輸。這兩個這些都沒有效率。如果作業系統/驅動程式/硬體會從記憶體中不連續的位置中收集資料,而 「 就地 」 傳輸成為單一的作業,但是會是比較好的作法。同樣地上輸入的磁碟,, 如果直接散佈資料區塊中記憶體而中繼區塊不必要的位置移動,而且等等,更快。

介面規格

ReadFileScatter

ReadFileScatter 函式會從檔案位移 OVERLAPPED] 結構中所指示的位置開始,一個檔案讀取資料,並將資料分配到多個使用者緩衝區。
BOOL ReadFileScatter(
<WWBLOCKQUOTE>
    HANDLE hFile,                         // handle of file to read
    FILE_SEGMENT_ELEMENT aSegmentArray[], // array of buffer segments that
receives data
    DWORD nNumberOfBytesToRead,           // number of bytes to read
    LPDWORD lpReserved,                   // reserved must be NULL
    LPOVERLAPPED lpOverlapped             // address of structure for data
   );
				

參數

hFile


識別要讀取檔案。檔案控制代碼必須以建立 GENERIC_READ 存取的檔案。

必須使用 FILE_FLAG_OVERLAPPED 指定非同步 I/O 及 FILE_FLAG_NO_BUFFERING,若要指定非快取的 I/O,開啟檔案。

aSegmentArray

區段會指向陣列的指標。一個區段是記憶體緩衝區,應該放置已傳輸資料的一部份。區段是系統頁面大小,且必須對齊於某頁的大小界限上。

[記憶體] 區段可使用 VirtualAllocVlm,配置,或者可以是標準的 32 位元位址記憶體,但不可同時擁有兩者。

NNumberOfBytesToRead

指定要從檔案讀取的位元組數。

lpReserved

保留必須是 NULL。

lpOverlapped

指向 OVERLAPPED 結構。這個結構是必要的且必須指向有效的 OVERLAPPED 結構。

讀取的作業開始於 OVERLAPPED 結構中所指定的位移,並讀取的作業完成之前,可能會傳回 ReadFileScatter。在這種情況下,ReadFileScatter 傳回 FALSE 並且 GetLastError 函式會傳回 ERROR_IO_PENDING。這可讓繼續讀取的作業完成時呼叫的程序。應用程式可以使用任一 GetOverlappedResult/HasOverlappedIoCompleted 去收取 I/O 完成通知或 GetQueuedCompletionStatus 收取 I/O 完成。

傳回值

如果函式成功,傳回值是零。如果函式失敗,傳回的值會是零。若要延伸的錯誤資訊呼叫 GetLastError。如果讀取超過檔案結尾嘗試 ReadFileScatter,函式會傳回零,並 GetLastError 傳回 ERROR_HANDLE_EOF

註解

每個 FILE_SEGMENT_ELEMENT 是 64 位元。所有 64 位元用來計算緩衝區指標,因此,應用程式必須明確地零不支援 64 位元指標的系統上之項目的上方的 32 位元。

WriteFileGather

WriteFileGather 函式會從多個緩衝區收集資料,並將資料寫入至檔案。 函式是為非同步作業而設計的。 函式會開始將資料寫入至檔案以 OVERLAPPED 結構所指定位置。
BOOL WriteFileGather(
    HANDLE hFile,                // handle to file to write to
    FILE_SEGMENT_ELEMENT aSegmentArray [], // array of buffer segments
containing the data
    DWORD nNumberOfBytesToWrite,    // number of bytes to write
    LPDWORD lpReserved,             // Reserved must be NULL
    LPOVERLAPPED lpOverlapped       // pointer to structure needed for
overlapped I/O
   );
				

參數

hFile


識別要寫入檔案。檔案控制代碼必須以建立 GENERIC_WRITE 存取的檔案。必須使用 FILE_FLAG_OVERLAPPED 指定非同步 I/O 及 FILE_FLAG_NO_BUFFERING,若要指定非快取的 I/O,開啟檔案。

aSegmentArray

區段會指向陣列的指標。一個區段是記憶體緩衝區,應該放置已傳輸資料的一部份。區段是系統頁面大小,且必須對齊於某頁的大小界限上。[記憶體] 區段可使用 VirtualAllocVlm,配置,或者可以是標準的 32 位元位址記憶體,但不可同時擁有兩者。

NNumberOfBytesToWrite

指定要寫入檔案的位元組數。

與 MS-DOS] 作業系統不同的是 Windows NT 會解譯為指定 null 的寫入作業的零值。null 的寫入作業不會寫入任何位元組,但不會造成時間戳記來變更。

lpReserved

保留必須是 NULL。

LpOverlapped

指向 OVERLAPPED 結構。這個結構是必要的且必須指向有效的 OVERLAPPED 結構。寫入作業開始於 OVERLAPPED 結構中所指定的位移,並寫入作業完成之前,可能會傳回 WriteFileGather。在這種情況下,WriteFileGather 傳回 FALSE 並且 GetLastError 函式會傳回 ERROR_IO_PENDING。這可讓呼叫的程序繼續處理完成後寫入作業。應用程式可以使用任一 GetOverlappedResult/HasOverlappedIoCompleted 去收取 I/O 完成通知或 GetQueuedCompletionStatus 收取 I/O 完成。

傳回值

如果函式成功,傳回值是零。如果函式失敗,傳回的值會是零。若要延伸的錯誤資訊呼叫 GetLastError。

註解

每個 FILE_SEGMENT_ELEMENT 是 64 位元。所有 64 位元用來計算緩衝區指標,因此,應用程式必須明確地零不支援 64 位元指標的系統上之項目的上方的 32 位元。

如果被另一個處理序鎖定檔案的一部份,而寫入作業與重疊鎖定的部份此功能將會失敗。

與 MS-DOS] 作業系統不同的是 Windows NT 會解譯要寫入為 null 的寫入作業指定零個位元組且 WriteFileGather 並不截斷或延伸檔案。若要截斷或擴充檔案,請使用 SetEndOfFile 函式。

狀況說明

Windows NT 4.0 Service Pack 2 引進了新的介面做為 SQL Server 的效能 enhancer 當 Windows NT 底下執行。這個增強功能牽涉到散佈/收集並輸入/輸出功能。

如需取得最新的 Service Pack 的 Windows NT 4.0 的詳細資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
152734如何取得最新的 Windows NT 4.0 Service Pack

屬性

文章編號: 160606 - 上次校閱: 2013年10月4日 - 版次: 1.1
這篇文章中的資訊適用於:
  • Microsoft Windows NT Workstation 4.0 Developer Edition
  • Microsoft Windows NT Server 4.0 Standard Edition
關鍵字:?
kbnosurvey kbarchive kbmt kbnetwork KB160606 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:160606
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com