Повышение производительности SQL Server в Windows NT

Переводы статьи Переводы статьи
Код статьи: 160606 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

Новый интерфейс был добавлен как улучшение производительности для SQL Server при работе в системе Windows NT. Это усовершенствование включает в себя функциональные возможности разбросом ввода-вывода.

Дополнительная информация

Что такое Точечная/сбор?

Разбивки/сборки — это стандартный прием, используемый в некоторых ситуациях высокой производительности операций ввода-вывода. Обычно относится к передаче прямого доступа К памяти (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 для указания асинхронного ввода-вывода, а FILE_FLAG_NO_BUFFERING без кэширования ввода-вывода.

aSegmentArray

Указывает массив указателей на сегменты. Сегмент является буфер памяти, куда следует поместить часть передаваемых данных. Сегменты являются размера страницы системы и должны быть выровнены по границе размер страницы.

Сегмент памяти может выделяться VirtualAllocVlm или может быть обычное 32-битной адресации памяти, но не оба одновременно.

NNumberOfBytesToRead

Указывает количество байтов, считываемых из файла.

lpReserved

Зарезервированные должен иметь значение NULL.

lpOverlapped

Указатель на структуру OVERLAPPED. Эта структура является обязательным и должно указывать допустимый структуры OVERLAPPED.

Начинается операция чтения, заданного смещением в структуре OVERLAPPED в и ReadFileScatter может возвращать до завершения операции чтения. В этом случае возвращает FALSE, ReadFileScatter и функция GetLastError возвращает ERROR_IO_PENDING. Это позволяет вызывающим процессом продолжить работу во время завершения операции чтения. Приложение может использовать либо GetOverlappedResult/HasOverlappedIoCompleted для получения уведомления о завершении ввода/вывода или GetQueuedCompletionStatus забрать завершения ввода/вывода.

Возвращаемые значения

Если функция успешно выполнена, возвращается ненулевое значение. Если операция завершается ошибкой, возвращаемое значение равно нулю. Чтобы получить расширенные сведения об ошибке, вызовите GetLastError. Если ReadFileScatter предпринимается попытка чтения за пределами конца файла, функция возвращает ноль и GetLastError возвращает ERROR_HANDLE_EOF

Заметки.

Каждый FILE_SEGMENT_ELEMENT составляет 64 бита в длинные. Все 64 бита используются для расчета буфера указателя; таким образом, приложения должны явно нуля верхние 32 бита самого большого элемента на системах, которые не поддерживает 64-разрядные указатели.

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 для указания асинхронного ввода-вывода, а FILE_FLAG_NO_BUFFERING без кэширования ввода-вывода.

aSegmentArray

Указывает массив указателей на сегменты. Сегмент является буфер памяти, куда следует поместить часть передаваемых данных. Сегменты являются размера страницы системы и должны быть выровнены по границе размер страницы. Сегмент памяти может выделяться VirtualAllocVlm или может быть обычное 32-битный адрес памяти, но не оба.

NNumberOfBytesToWrite

Указывает число байтов для записи в файл.

В отличие от операционной системы MS-DOS Windows NT интерпретирует значение 0 как пустой записи. Операция записи значение null не записывает все байты, но нарушают штампа времени для изменения.

lpReserved

Зарезервированные должен иметь значение NULL.

LpOverlapped

Указатель на структуру OVERLAPPED. Эта структура является обязательным и должно указывать допустимый структуры OVERLAPPED. Операция записи начинается со смещением, указанный в структуре OVERLAPPED и WriteFileGather может возвращать до завершения операции записи. В этом случае возвращает FALSE, WriteFileGather и функция GetLastError возвращает ERROR_IO_PENDING. Это позволяет продолжать обработку во время завершения операции записи вызывающего процесса. Приложение может использовать либо GetOverlappedResult/HasOverlappedIoCompleted снимков ввод-вывод уведомления о завершении или GetQueuedCompletionStatus забрать ввода/вывода завершения.

Возвращаемые значения

Если функция успешно выполнена, возвращается ненулевое значение. Если операция завершается ошибкой, возвращаемое значение равно нулю. Чтобы получить расширенные сведения об ошибке, вызовите GetLastError.

Заметки.

Каждый FILE_SEGMENT_ELEMENT составляет 64 бита в длинные. Все 64 бита используются для расчета буфера указателя; таким образом, приложения должны явно нуля верхние 32 бита самого большого элемента на системах, которые не поддерживает 64-разрядные указатели.

Если часть файла заблокирована другим процессом и заблокированные часть накладывается на операцию записи, эта функция не выполняется.

В отличие от операционной системы MS-DOS Windows NT интерпретирует 0 байт, записываемое как значение null, записи и WriteFileGather не усечения или расширения файла. Для усечения или расширения файла, используйте функцию SetEndOfFile.

Статус

Windows NT 4.0 с пакетом обновления 2 (SP2) представила новый интерфейс, который действует как enhancer производительности для SQL Server при работе в системе Windows NT. Это усовершенствование включает в себя функции ввода вывода и разбивки/сборки.

За дополнительной информацией о получении последнего пакета обновления для Windows NT 4.0 щелкните следующий номер статьи базы знаний Майкрософт:
152734Как получить последний пакет обновления для Windows NT 4.0

Свойства

Код статьи: 160606 - Последний отзыв: 14 ноября 2010 г. - Revision: 2.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Windows NT Workstation 4.0 Developer Edition
  • Microsoft Windows NT Server 4.0 Standard Edition
Ключевые слова: 
kbnetwork kbmt KB160606 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:160606

Отправить отзыв

 

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