Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Количество строк запрашиваемых клиентской программой у БД за один раз  [new]
expimp
Member

Откуда:
Сообщений: 573
Скажите, пожалуйста,
может ли быть в программах, обращающихся к SQL Server'у, параметр, определяющий, сколько строк за одно обращение
считывает клиентский запрос из найденной страницы?
Например, программа SQL*plus обращаясь к БД Oracle считывает по умолчанию 15 строк из блока (страницы).
Если же нужных строк больше да еще эти строки расположены в блоке (на странице) подряд,
то программа снова и снова вынуждена обращаться к этому же блоку. Увеличивается количество логических чтений в памяти.
А если мы увеличим значение этого параметра и будем считывать, например, по 100 строк,
то число обращений к блоку упадет - блок можно будет целиком прочитать за меньшее количество раз.

Кажется, в Java/JDBC есть метод "упреждающей выборки".
Подскажите, что это за параметр. Дайте ссылку, а то и пример использования...
13 янв 14, 15:42    [15408716]     Ответить | Цитировать Сообщить модератору
 Re: Количество строк запрашиваемых клиентской программой у БД за один раз  [new]
Glory
Member

Откуда:
Сообщений: 104760
expimp
сколько строк за одно обращение
считывает клиентский запрос из найденной страницы?
Например, программа SQL*plus обращаясь к БД Oracle считывает по умолчанию 15 строк из блока (страницы).

Страницы в MSSQL читаются целиком
13 янв 14, 15:45    [15408731]     Ответить | Цитировать Сообщить модератору
 Re: Количество строк запрашиваемых клиентской программой у БД за один раз  [new]
expimp
Member

Откуда:
Сообщений: 573
Glory
Страницы в MSSQL читаются целиком


Спасибо.
Вот MSSQL находит уже когда-то считанные в память страницы.
Обращается к ним за данными.
Даже если нужна одна строка MSSQL читает из страницы данных в индексе все строки.
Но сколько тогда страниц он может прочитать за раз? Есть ли параметр управления.

Проблема проста-
В Профайлере вижу линейное увеличение времени отклика процедуры в зависимости
от количества полученных строк.
Скажем, 300 строк - 0.3 секунды, 30000 строк - 5 секунд.
Предполагаю, что сам процесс обработки запроса базой данных не может так сильно отличаться.
Планы выполнения вполне разумные.
Подозреваю, что "висим" на процессе передачи данных клиенту и по аналогии с Oracle пытаюсь это время уменьшить.
Физическое изменение параметров сети, к сожалению невозможно.
13 янв 14, 15:59    [15408857]     Ответить | Цитировать Сообщить модератору
 Re: Количество строк запрашиваемых клиентской программой у БД за один раз  [new]
Glory
Member

Откуда:
Сообщений: 104760
expimp
Но сколько тогда страниц он может прочитать за раз? Есть ли параметр управления.

Что значит "за раз" ? Если серверу нужна страница данных для выполнения запроса, то она читается

expimp
В Профайлере вижу линейное увеличение времени отклика процедуры в зависимости
от количества полученных строк.
Скажем, 300 строк - 0.3 секунды, 30000 строк - 5 секунд.

Полученных откуда ?

expimp
Подозреваю, что "висим" на процессе передачи данных клиенту и по аналогии с Oracle пытаюсь это время уменьшить.

Так надо чтобы клиент вычитывал запрошенные данные. Иначе зачем он их запрашивает ?
13 янв 14, 16:02    [15408894]     Ответить | Цитировать Сообщить модератору
 Re: Количество строк запрашиваемых клиентской программой у БД за один раз  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
Планы выполнения вполне разумные.


И Вы можете их показать, а также статистику IO?

автор
Подозреваю, что "висим" на процессе передачи данных клиенту


Это Вы выявили по ожиданию ASYNC_NETWORK_IO у сессии, которая выполняет запрос?
13 янв 14, 16:03    [15408896]     Ответить | Цитировать Сообщить модератору
 Re: Количество строк запрашиваемых клиентской программой у БД за один раз  [new]
expimp
Member

Откуда:
Сообщений: 573
Спасибо всем!

Сегодня осмыслю, попробую сформулировать вопрос по-новой.
13 янв 14, 16:45    [15409245]     Ответить | Цитировать Сообщить модератору
 Re: Количество строк запрашиваемых клиентской программой у БД за один раз  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31429
expimp
Подозреваю, что "висим" на процессе передачи данных клиенту и по аналогии с Oracle пытаюсь это время уменьшить.
Во первых, попробуйте поменять параметр размер "сетевого пакета".
Во вторых, по возможности используйте более эффективные средства чтения результатов от сиквела (например, в .NET есть альтернативный метод получения строки целиком, а не чтение отдельными полями - это ускоряет приём данных раза в два).
В общем, понимайте, что сиквел не может отдать данные быстрее, чем принимает приложение, его тоже нужно учитывать.
expimp
В Профайлере вижу линейное увеличение времени отклика процедуры в зависимости
от количества полученных строк.
Скажем, 300 строк - 0.3 секунды, 30000 строк - 5 секунд.
Ну, это как раз хорошо, что линейно, всё как и должно быть.
13 янв 14, 16:52    [15409296]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить