AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.09.2015, 11:53   #1  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от mazzy Посмотреть сообщение
идея в том, чтобы сказать как то SQL'ю что не нужно делать выборку всех-всех-всех записей (а их там может быть сотни тысяч)
а достаточно выбрать первые 1000 или 100... но в случае необходимости, дозапросить еще.
Так Аксапта именно так и делает, что в Query, что в select'е - смотри серверные курсоры

Только, количеством записей, возвращаемых с сервера за раз мы не управляем

И, как правильно выше заметили - это не значит, что SQL не будет напрягаться и хранить результат, если запрос связан с сортировками/группировками/объединениями
__________________
Axapta v.3.0 sp5 kr2
Старый 25.09.2015, 12:43   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от AndyD Посмотреть сообщение
Так Аксапта именно так и делает, что в Query, что в select'е - смотри серверные курсоры
да, я в курсе, что так должно быть.
но судя по логам и счетчикам на SQL - это не совсем так. по крайней мере для 2009.

Цитата:
Сообщение от AndyD Посмотреть сообщение
Только, количеством записей, возвращаемых с сервера за раз мы не управляем
угу.
я также в курсе про параметр "размер буфера", который был в конфигурационной утилите прошлых версий.

хорошо, переформулирую вопрос.

в Аксапте 2009 в QueryRun появились методы, которые, судя по названию, позволяют каким-то образом управлять paging. в частности, включать(!!) paging. Ссылки на msdn с примерами я привел в самом начале.

Вопрос: У кого есть опыт работы с paging-методами в Query? Стоит ли этим заморачиваться?
Старый 27.09.2015, 12:23   #3  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от mazzy Посмотреть сообщение
Вопрос: У кого есть опыт работы с paging-методами в Query?
Я использовал (опосредованно) с AIF и его change tracking
Цитата:
Стоит ли этим заморачиваться?
Сначала определись, это "заморачивание ради заморачивания" или есть конкретная проблема которую надо решить. В моем случае (выдача недавно измененных данных через вэбсервис) оказалось проще принудительно один раз выставить разумный размер пакета чем бесконечно крутить свойства WCF сервиса, клиента и упереться в итоге где-нибудь в настройки клиентского прокси которые мне крутить никто не позволит. Если все это ради производительности, то мне кажется что для получения сколько-нибудь значимых улучшений крутить надо что-то другое
Цитата:
Сообщение от Maxim Gorbunov Посмотреть сообщение
Если верить вот этому - https://technet.microsoft.com/en-us/.../gg840967.aspx - paging автоматически включается для всех запросов через Query Service
Скорее, paging "поддерживается" - параметры для него опциональные и по умолчанию используется одна "безразмерная" страница - т.е. поведение ровно то же что и без него
Цитата:
If you pass a NULL paging object to the query service, it will not use any paging and will return all records for the specified query up to the maximum record limit
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: mazzy (2).
Старый 25.09.2015, 13:04   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от AndyD Посмотреть сообщение
И, как правильно выше заметили - это не значит, что SQL не будет напрягаться и хранить результат, если запрос связан с сортировками/группировками/объединениями
Похоже таки надо сказать несколько слов по поводу сортировок и "напрягаться".
определения:
  1. MS SQL хранит данные экстентами, которые состоят из 8Кб-страниц. MS SQL отравляет на диск команду чтения/записи для всего экстента. меньшими порциями MS SQL дисковые операции не делает.
  2. данные (record) хранятся в страницах. в каждой 8кб странице умещается несколько строк (record). В частности это означает, что максимальный объем хранения в одной записи в MS SQL - 8Кб
  3. индекс - это маленкая запись ))) Да с натяжкой, но в данном случае отличия не важны. Важно, что индексы также хранятся в страницах. столько индексов, сколько уместится на страницу.
  4. индексы как правило (Бггг!) отсортированы, и с огромной вероятностью нужные для выборки строки индекса хранятся рядом на одном экстенте.
  5. для сортировки MS SQL все равно прочтет с диска экстенты с индексами. Прочтет в любом случае (почти в любом - есть кластерные индексы, есть покрывающие индексы)
  6. важно! размер индекса как правило существенно меньше размера записи. обычно индексы содержат поля, сумма которых 60-200 байт. А размер записи с данными легко может составлять 1000-3000 байт. см. vendTrans, см. InventTrans, inventSellement.

собственно проблема:
  1. после сортировки, после того, как SQL определил какие записи нужно вернуть, для выдачи результатов в Аксапту MS SQL будет читать экстенты с записями (record). МНОГО. поскольку сами записи больше и раскиданы по разным экстентам, операций чтения данных будет много.
  2. поскольку прочитанные данные (record) достаточно объемные, СКЛю нужно очень много "временной" памяти, чтобы хранить полученные результаты и выдать их в Аксапту при следующем QueryRun.next
  3. да, вроде должен использоваться курсор... но... есть счетчики и мониторинг в СКЛ, который позволяет увидеть, что большую часть времени для алгоритмов типа "сопоставление" SQL читает экстенты с данными впустую. По крайней мере, у меня сложилось стойкое впечатление, что это так.

еще раз:
  • экстенты с индексами все равно будут прочитаны )))) даже не беспокойтесь об этом
  • число читаемых с диска экстентов в индексами в разы, на порядки меньше числа экстентов с данными (это сделано специально, в этом и суть индексов )
  • беспокоит число операций чтения самих данных, которые SQL готовит для отдачи Аксапте.
  • суть paging в том, что SQL хранит у себя ссылки на данные (небольшой объем памяти), а сами данные читает по мере запроса страниц. Причем программист может управлять размером порции, которая готовится SQL'ем и отдается в ответ на запрос.

В операциях, которые делают выборку, по каким-то бизнес-условиям забирают несколько записей из выборки и изменяют выборку (операции типа сопоставление)...
в таких операциях хотелось бы использовать управляемый paging.

собственно отсюда и вопрос - У кого есть опыт работы с paging-методами в Query? Стоит ли этим заморачиваться?
в частности, даст ли гемор с pagin'ом лучший результат, чем автоматическая работа с однонаправленным серверным курсором?

Последний раз редактировалось mazzy; 25.09.2015 в 13:31.
За это сообщение автора поблагодарили: gl00mie (3), -Dmitry- (0).
Теги
paging, подкачка данных

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: Microsoft Dynamics AX general performance analysis scripts page 5 Blog bot DAX Blogs 0 01.09.2014 14:11
dynamicsaxtraining: Purchase Blog bot DAX Blogs 0 11.03.2012 05:25
daxmusings: Query and New Related Objects in AX 2012 Blog bot DAX Blogs 0 28.09.2011 10:11
daxdilip: Whats New in Dynamics AX 2012 (A brief extract from the recently held Tech Conf.) Blog bot DAX Blogs 7 31.01.2011 12:35
Справка в файлах *.chm на русском у кого есть? ture DAX: Функционал 14 18.02.2004 19:21

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:26.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.