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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.04.2007, 10:13   #1  
vesna dba is offline
vesna dba
Участник
 
147 / 16 (1) ++
Регистрация: 16.02.2007
Всем привет!

Мониторю длительные запросы SQL на пользователях.
В планах запросов наблюдаю TABLE SCAN например по таблице CUSTINVOICETRANS.
Смотрю через репозитарий свойства таблицы
[attachment=603:CustInvoiceTrans.JPG]
Наблюдаю отсутсвие PrimaryIndex, ClusterIndex
(и во многоих таблицах, по которым встречаю в планах запросов сканирование таблиц такое положение)

В тестовой базе например делаю имеющийся индекс по полю InvoiceId как кластерный,
повторно запускаю отчет, мониторю, смотрю план запроса - сканирования таблицы уже нет.
Соответственно нет уже огромной очереди на диске, где отдельно выложил данную таблицу (даже отдельно она лежит от своих индексов).
Все это хорошо, НО не хотелось бы огрести проблем в другом месте, так как все сделано чисто интуитивно.

Прошу меня наставить на путь истинный, дать ссылки на доки (теорию по индексам знаю , практики мало) и т.п., какую инфу требовать от программистов.
Наверняка кто то уже занимался этой проблемой.
Потери производительности на этой неоптимальности просто огромные, особенно когда в конце месяца активно работают продажники, логистика, бухгалтерия..
Миниатюры
Нажмите на изображение для увеличения
Название: CustInvoiceTrans.JPG
Просмотров: 305
Размер:	58.1 Кб
ID:	10126  
__________________
Axapta 3.0 CIS SP3 CU1
---
Народу собралось - яблоку плюнуть негде!
Старый 11.04.2007, 10:27   #2  
AlGol is offline
AlGol
Участник
 
277 / 93 (4) ++++
Регистрация: 24.12.2001
Адрес: Тверь.
Если по условию которое установлено в запросе есть индекс, то сканирование таблицы не должно делаться. Максимум сканирование индекса.

Попробуй для начала сделать проверку/синхронизацию по таблицам в которых наблюдаешь сканирование.
Это вызывается из Администрирование/ Периодические операции/ SQL Администрирование.

Если проверка не даст ошибок, то сделай реиндексацию по таблице (делается там же).

Если после этого все равно все плохо - то надо смотреть что за индексы на таблице, что за запросы долго работают и тд.
методики есть и у mazzy - http://axapta.mazzy.ru/lib/querytuning/
__________________
Ален ноби, ностра алис.
Что означает - если один человек построил, другой завсегда разобрать может.
Старый 11.04.2007, 10:28   #3  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
отчет стандартный?
все очень сильно зависит от кода
к примеру, между теми же строками и шапкой накладной связь далеко не по одному полю InvoiceId, и одному InvoiceId может соответствовать несколько накладных
так что (как вариант) - доля вины программистов здесь присутствует (может присутствовать)
__________________
-ТСЯ или -ТЬСЯ ?
Старый 11.04.2007, 11:05   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от vesna dba Посмотреть сообщение
Наблюдаю отсутсвие PrimaryIndex, ClusterIndex
(и во многоих таблицах, по которым встречаю в планах запросов сканирование таблиц такое положение)
PrimaryIndex - это индекс который будет использоваться по умолчанию в формах и отчетах, если индекс не указан явно. Если не указан PrimaryIndex, то формы и отчеты не будут указывать индекс при получении записей.

Насчет ClusterIndex.
Таковая была стратегия разработчиков. Они считали, что кластерные индексы - это зло.
Исходя из этого тезиса, ядро может сделать уникальным любой индекс, добавив поле recid в к индексу.
__________________
полезное на axForum, github, vk, coub.
Старый 11.04.2007, 11:07   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от AlGol Посмотреть сообщение
Если по условию которое установлено в запросе есть индекс, то сканирование таблицы не должно делаться.
Может делаться и сканирование.
Если оптимизатор решит, что сканирование дешевле просмотра индекса.
А вот на основании каких данных оптимизатор принимает такое решение - вопрос.
__________________
полезное на axForum, github, vk, coub.
Старый 11.04.2007, 15:23   #6  
vesna dba is offline
vesna dba
Участник
 
147 / 16 (1) ++
Регистрация: 16.02.2007
Цитата:
Сообщение от AlGol Посмотреть сообщение
..то сделай реиндексацию по таблице ..
На тестовой базе (недавняя копия рабочей) после изменений индексов (в части - один из индексов делал кластерным(см.начало)) решил вернуть все в исходное. Вернул, реиндексировал таблицу, и .. - НЕТ TABLE SCAN по этой таблице.

В ночь реиндексирую на рабочей базе. Посмотрим..
(полную реиндексацию делал давно уже, обхожусь ежедневной дефрагментацией индексов. Видимо надо пересмотреть план обслуживания..)
__________________
Axapta 3.0 CIS SP3 CU1
---
Народу собралось - яблоку плюнуть негде!
Старый 12.04.2007, 08:19   #7  
vesna dba is offline
vesna dba
Участник
 
147 / 16 (1) ++
Регистрация: 16.02.2007
Цитата:
Сообщение от vesna dba Посмотреть сообщение
На тестовой базе (недавняя копия рабочей) после изменений индексов (в части - один из индексов делал кластерным(см.начало)) решил вернуть все в исходное. Вернул, реиндексировал таблицу, и .. - НЕТ TABLE SCAN по этой таблице.

В ночь реиндексирую на рабочей базе. Посмотрим..
(полную реиндексацию делал давно уже, обхожусь ежедневной дефрагментацией индексов. Видимо надо пересмотреть план обслуживания..)
Реиндексация базы данных не помогла.
Чето не то творится.. План запроса не изменился (TABLE SCAN остался). А в тестовой базе, с такими же свойствами таблицы (поля, индексы ..) нет сканирования. Размерами правда таблицы отличаются. Рабочая в 1,5 раза больше - >3Gb.
Буду делать свежую копию рабочей базы и повторять изменение индекса на кластерный и потом откат - для повтора\подтверждения эффекта.
__________________
Axapta 3.0 CIS SP3 CU1
---
Народу собралось - яблоку плюнуть негде!
Старый 12.04.2007, 10:31   #8  
AlGol is offline
AlGol
Участник
 
277 / 93 (4) ++++
Регистрация: 24.12.2001
Адрес: Тверь.
Запрос покажи, который вызывает сканирование и индексы, которые есть на таблице.
Вслепую можно долго угадывать. Идей еще будет много

Ну, в качестве предположения, можно еще статистику по таблице обновить.
__________________
Ален ноби, ностра алис.
Что означает - если один человек построил, другой завсегда разобрать может.
Старый 12.04.2007, 11:15   #9  
fedka is offline
fedka
Участник
 
69 / 15 (1) ++
Регистрация: 12.04.2007
Цитата:
Сообщение от AlGol Посмотреть сообщение
Запрос покажи, который вызывает сканирование и индексы, которые есть на таблице.
Вслепую можно долго угадывать. Идей еще будет много

Ну, в качестве предположения, можно еще статистику по таблице обновить.
Разве индексация не включает в себя и статистику?
Старый 12.04.2007, 11:26   #10  
vesna dba is offline
vesna dba
Участник
 
147 / 16 (1) ++
Регистрация: 16.02.2007
- Создал копию базы рабочей. Построил план запроса в QA (запроса, который отловил в Аксапте через мониторинг запросов SQL (см.первое сообщ.)). - есть сканирование таблицы.
- Делаю индекс (см.первое сообщ.) кластерным (кстати я был не точен в первом сообщ. - индекс составной по нескольким полям). - нет скана таблицы.
- Возвращаю все назад. - есть скан той же таблицы, план запроса тот же.
---
Чуть позже выложу скриншоты запроса и плана запроса до и после изменения индекса, спиок индексов на таблице и комментарий программиста по поводу отчета, в запросе которого получается скан таблицы.
__________________
Axapta 3.0 CIS SP3 CU1
---
Народу собралось - яблоку плюнуть негде!
Старый 12.04.2007, 13:46   #11  
vesna dba is offline
vesna dba
Участник
 
147 / 16 (1) ++
Регистрация: 16.02.2007
Запрос и его план
SELECT MAX(A.NAMEALIAS),MAX(A.VSN_CUSTTYPE),MAX(A.LINEOFBUSINESSID),A.CUSTACCOUNT,MAX(B
.INVOICINGNAME),B.VSN_BONDCODE,SUM(C.VSN_QTY),SUM(C.LINEAMOUNTMST),SUM(C.TAXAMOU
N
TMST),SUM(C.VSN_QTYPCS),SUM(C.QTY),MAX(D.REFINVENTCLASS),MAX(D.REFINVENTRAITING)
,
MAX(D.REFFUNCTIONALSUBGROUP),MAX(D.REFTRADEMARK),MAX(D.VSN_AGGREGATPACKID),MAX(D
.
VSN_GENERALNAME),MAX(D.NAMEALIAS),MAX(D.ITEMNAME),MAX(D.PACKING_RU),D.ITEMID
FROM SMMBUSRELTABLE A,VSN_CUSTINVOICEJOURCONTR B,CUSTINVOICETRANS C,INVENTTABLE D
WHERE (A.DATAAREAID='VC')
AND (((B.DATAAREAID='DAT')
AND (B.DATAAREAID#2='VC'))
AND ((((((B.INVOICEDATE>={TS '2007-02-01 00:00:00.000'})
AND (B.INVOICEDATE<={TS '2007-02-28 00:00:00.000'}))
AND (B.INVOICETYPE=0))
AND (B.VSN_STORNED=0))
AND
NOT ((B.INVOICEACCOUNT=' КЛ-00235')))
AND (A.CUSTACCOUNT=B.INVOICEACCOUNT)))
AND ((C.DATAAREAID='DAT')
AND ((((B.NUMBERSEQUENCEGROUP=C.NUMBERSEQUENCEGROUP)
AND (B.INVOICEDATE=C.INVOICEDATE))
AND (B.INVOICEID=C.INVOICEID))
AND (B.SALESID=C.SALESID)))
AND ((D.DATAAREAID='VC')
AND (C.ITEMID=D.ITEMID))
GROUP BY A.CUSTACCOUNT,B.VSN_BONDCODE,D.ITEMID
ORDER BY A.CUSTACCOUNT,B.VSN_BONDCODE,D.ITEMID OPTION(FAST 15)
[attachment=605:Plan1_Cu...iceTrans.JPG]

Запрос и его план после изменения индекса INVOICEIDX (сделан кластерным)
[attachment=606:Plan2_Cu...iceTrans.JPG]

Индексы на таблице CUSTINVOICETRANS:
I_064INVOICEIDX
по полям:
- DATAAREAID
- SALESID
- INVOICEDATE
- INVOICEID
- LINENUM
- NUMBERSEQUENCEGROUP
I_064ITEMIDIDX
- DATAAREAID
- ITEMID
- INVOICEDATE
I_064RECID
- DATAAREAID
- RECID
I_064TRANSIDIDX
- DATAAREAID
- INVENTTRANSID
- INVOICEID
- INVOICEDATE
I_064VSN_INVOICEID
- DATAAREAID
- INVOICEID

Индексы кроме I_064VSN_INVOICEID из стандартного функционала.
--
Комментарий программиста относительно отчета, в котором разбираем запрос к базе данных, который вызывает TABLE SCAN:
"Отчет не из стандартного функционала Аксапты.
Создан сотрудниками отдела программирования.
Отчет создан стандартными визуальными средствами разработки с использованием объекта Query.
Запросы формируются на уровне ядра и возможности вмешаться в построение запроса к базе данных у нас нет."
---
Гуру, отзовитесь. Наверняка это касается многих.
Миниатюры
Нажмите на изображение для увеличения
Название: Plan1_CustInvoiceTrans.JPG
Просмотров: 540
Размер:	176.8 Кб
ID:	10128   Нажмите на изображение для увеличения
Название: Plan2_CustInvoiceTrans.JPG
Просмотров: 558
Размер:	160.1 Кб
ID:	10129  

__________________
Axapta 3.0 CIS SP3 CU1
---
Народу собралось - яблоку плюнуть негде!
Старый 12.04.2007, 16:51   #12  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
я бы для начала отказался от VIEW VSN_CUSTINVOICEJOURCONTR
__________________
-ТСЯ или -ТЬСЯ ?
Старый 13.04.2007, 07:30   #13  
vesna dba is offline
vesna dba
Участник
 
147 / 16 (1) ++
Регистрация: 16.02.2007
Цитата:
Сообщение от Vadik Посмотреть сообщение
я бы для начала отказался от VIEW VSN_CUSTINVOICEJOURCONTR
Это вьюшник по custinvoicejour и rcontracttable т.е . по шапкам накладных и договорам (Отчет в модуле РК, отчет по продажам).
Отказ невозможен.
__________________
Axapta 3.0 CIS SP3 CU1
---
Народу собралось - яблоку плюнуть негде!
Старый 13.04.2007, 08:57   #14  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от vesna dba Посмотреть сообщение
Это вьюшник по custinvoicejour и rcontracttable т.е . по шапкам накладных и договорам (Отчет в модуле РК, отчет по продажам).
это я понял

Цитата:
Отказ невозможен.
попробуйте вместо этого view использовать в запросе две таблицы
__________________
-ТСЯ или -ТЬСЯ ?
Старый 17.04.2007, 11:56   #15  
vesna dba is offline
vesna dba
Участник
 
147 / 16 (1) ++
Регистрация: 16.02.2007
Цитата:
Сообщение от Vadik Посмотреть сообщение
попробуйте вместо этого view использовать в запросе две таблицы
А смысл?
Сканирование таблицы вообще не в той стороне.
__________________
Axapta 3.0 CIS SP3 CU1
---
Народу собралось - яблоку плюнуть негде!
Старый 17.04.2007, 22:25   #16  
vesna dba is offline
vesna dba
Участник
 
147 / 16 (1) ++
Регистрация: 16.02.2007
Народ! Есть результат! Интересный и положительный! Завтра на работе буду - опишу все подробно!
__________________
Axapta 3.0 CIS SP3 CU1
---
Народу собралось - яблоку плюнуть негде!
Старый 17.04.2007, 22:45   #17  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от vesna dba Посмотреть сообщение
Народ! Есть результат! Интересный и положительный! Завтра на работе буду - опишу все подробно!
Спасибо. Ждем
__________________
полезное на axForum, github, vk, coub.
Старый 18.04.2007, 10:01   #18  
vesna dba is offline
vesna dba
Участник
 
147 / 16 (1) ++
Регистрация: 16.02.2007
Цитата:
Сообщение от vesna dba Посмотреть сообщение
Народ! Есть результат! Интересный и положительный! Завтра на работе буду - опишу все подробно!
Я извиняюсь что каким либо образом обнадежил вас..
Поспешил. Ложная тревога.
--
В результате работы отчета формируются несколько запросов к базе данных. На один из них (не тот, который нужен, но очень был похож) я наткнулся и поспешил с выводами. Стал делать разбор и понял что ушел не туда.
--
Итак топчемся на месте.
Таблица CUSTINVOICETRANS, идет скан таблицы в запросе по полю DATAAREAID.
Поле DATAAREAID входит в состав индексов построенных на этой таблице (индексы из стандартного функционала).
Но при выполнении запроса все таки сваливается в TABLE SCAN.
Если индекс I_064ITEMIDIDX(по полям DATAAREAID, ITEMID, INVOICEDATE) сделать кластерным - план запроса изменяется и становится более эффективным (стоимость плана 458 до, и 37 - после переделки индекса в качестве кластерного).
--
Задача: избавиться от TABLE SCAN не изменяя индексов стандартного функционала.
Вопрос остается открытым.
__________________
Axapta 3.0 CIS SP3 CU1
---
Народу собралось - яблоку плюнуть негде!
Старый 18.04.2007, 16:30   #19  
vesna dba is offline
vesna dba
Участник
 
147 / 16 (1) ++
Регистрация: 16.02.2007
Цитата:
Сообщение от mazzy Посмотреть сообщение
Насчет ClusterIndex.
Таковая была стратегия разработчиков. Они считали, что кластерные индексы - это зло.
А где бы почитать про эту стратегию..?
__________________
Axapta 3.0 CIS SP3 CU1
---
Народу собралось - яблоку плюнуть негде!
Старый 23.04.2007, 18:17   #20  
vesna dba is offline
vesna dba
Участник
 
147 / 16 (1) ++
Регистрация: 16.02.2007
Временно индекс I_064ITEMIDIDX(по полям DATAAREAID, ITEMID, INVOICEDATE) сделал кластерным.
Размер таблицы (исходный - 3Gb) увеличился примерно на 600Mb.
Очереди на диске с таблицей CUSTINVOICETRANS во время выполнения отчета "как корова слизала" (средняя очередь к диску уменьшилась с 50 до 2-3).
Длительных блокировок по таблице не наблюдается.
Продолжаю мониторинг. Ищутся другие решения.
---
"Нет ничего постояннее, чем временное."


--
З.Ы.:
Мониторил запросы к этой таблице в модуле Расчеты с клиентами по отчетам из стандартного функционала.
Картинка планов запросов всегда была красивая, без каких либо изъянов.
__________________
Axapta 3.0 CIS SP3 CU1
---
Народу собралось - яблоку плюнуть негде!
 


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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:24.