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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.04.2010, 11:27   #1  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Цитата:
Сообщение от mazzy Посмотреть сообщение
О, блин...
Сначала обругали Аксапту ("тормозит", "от безысходности"), а теперь такая фигня выясняется.
Не согласен, Аксапту я не ругал. Ведь и вправду тормозит. А по поводу "такой фигни" - да, я чайник в администрировании и пользовании средствами SQL Management Studio,
но с большим удовольствием научусь

А "безысходность" - не про Аксапту, а про СОМ CCADOCOnnection, кот. не реагировал на изменение таймаута

Цитата:
Сообщение от mazzy Посмотреть сообщение
В общем, не нужно мучать Аксапту прямыми запросами. У нее и штатными неплохо получается.
Я не против штатных средств, я очень даже за. Но разница во времени выполнения очень уж большая

Скрины прилагаю
Миниатюры
Нажмите на изображение для увеличения
Название: 1.JPG
Просмотров: 272
Размер:	146.5 Кб
ID:	5767   Нажмите на изображение для увеличения
Название: 2.JPG
Просмотров: 229
Размер:	145.9 Кб
ID:	5768  

Нажмите на изображение для увеличения
Название: 3.JPG
Просмотров: 208
Размер:	142.5 Кб
ID:	5769   Нажмите на изображение для увеличения
Название: 4.JPG
Просмотров: 246
Размер:	146.3 Кб
ID:	5770  

Нажмите на изображение для увеличения
Название: 5.JPG
Просмотров: 319
Размер:	142.0 Кб
ID:	5771  
Старый 28.04.2010, 11:42   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Отлично. Спасибо.

Жалко только что вы колонки убрали. Очень интеерсно было бы посмотреть на колонки Duration, Reads, Writes. Ну, да бог с ними.

Итак, на 5 скриншоте четко видно, что посылается команда "Delete from". И видны условия. Отлично.

Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
Я не против штатных средств, я очень даже за. Но разница во времени выполнения очень уж большая
Продолжаем разговор.
Давайте определимся между чем у вас получается разница.

Запрос, который посылает Аксапта - виден на 5ом скриншоте.
Какой запрос вы посылаете из management Studio?

================
Можете сделать скриншот таблицы из Аксапты? так, чтобы были видны все индексы и параметры самой таблицы. Вот так:
Миниатюры
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 281
Размер:	70.1 Кб
ID:	5773  
__________________
полезное на axForum, github, vk, coub.
Старый 28.04.2010, 11:59   #3  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Цитата:
Сообщение от mazzy Посмотреть сообщение
Какой запрос вы посылаете из management Studio?
delete from SALESTABLE_TELECOMPHONTRA40478 where SALESTABLE_TELECOMPHONTRA40478.month = '2010-03-01'

Цитата:
Сообщение от mazzy Посмотреть сообщение
Можете сделать скриншот таблицы из Аксапты? так, чтобы были видны все индексы и параметры самой таблицы.
Миниатюры
Нажмите на изображение для увеличения
Название: 6.JPG
Просмотров: 435
Размер:	92.8 Кб
ID:	5774  
Старый 28.04.2010, 12:35   #4  
Bober is offline
Bober
Участник
 
311 / 104 (4) +++++
Регистрация: 29.05.2007
А зачем стоит свойство Cachelookup = NotInTTS ?
Старый 28.04.2010, 13:03   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,431 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Bober Посмотреть сообщение
А зачем стоит свойство Cachelookup = NotInTTS ?
Для чистоты эксперимента возможно (хотябы временно) стоит убрать кэширование вообще.

И ещё я предлагаю в индекс MonthIdx вторым полем добавить RecId.
Старый 28.04.2010, 13:16   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Понятно. Спасибо.

Итак:
Аксаптовский delete_from работает НЕ медленнее.
Аксапта - хорошая девочка - и четко следует указаниям программиста, посылая команду "delete from" с правильными условиями.

Разница проявляется не в ядре аксапты. А в том, что на SQL посылаются разные условия к команде.
Причем разные условия - потому что программист в Management Studio, скорее всего, "забыл" про компании.

Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
delete from SALESTABLE_TELECOMPHONTRA40478 where SALESTABLE_TELECOMPHONTRA40478.month = '2010-03-01'
Минуточку!!!!
это же совсем другие условия в запросе!!!

Обратите внимание, что Аксапта удаляет в пределах одной компании.
А вы удаляете данные изо всех компаний!!! (у вас нет условия dataareaid == "tz")

А почему вы в студии удаляете данные изо всех компаний?
Если вам компании неважны, то почему вы включили свойство SavePerCompany = Yes? Выключите это свойство и не будет компаний в этой таблице.

==================
Вы используете при запуске аксапты параметр, который позволяет изменить место dataareaid в индексе?
(подозреваю, что нет)

==================
Согласен с S.Kuskov, что сейчас удаление из аксапты не использует индекс. Либо использует, но делает дополнительный поиск по recid.

Как это ни странно, но удаление из студии у вас, скорее всего, вообще не использует индексы, а делает TableScan. И похоже table scan в конечном итоге работает быстрее. Как это ни странно.

Похоже, что вы удаляете почти все записи в таблице. 80%-90%-100% записей. так?

==================
Стесняюсь попросить... Вы планы обоих запросов показать сможете?
Или тоже объяснять нужно?

Если планы показать сложно, то
Рекомендация - вообще уберите индекс по month. Тогда, скорее всего, в обоих случаях (запрос из студии и запрос из аксапты) будет использоваться один и тот же план запроса. Или выключите свойство SavePerCompany, если вам не нужны компании в этой таблице.
__________________
полезное на axForum, github, vk, coub.
Старый 28.04.2010, 14:57   #7  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Цитата:
Сообщение от mazzy Посмотреть сообщение
А почему вы в студии удаляете данные изо всех компаний?
Если вам компании неважны, то почему вы включили свойство SavePerCompany = Yes?
В этой таблице нет данных по другим компаниям (и не должно быть), зачем св-во SavePerCompany установлено в Yes сказать не могу (ставил не я, а спросить уже не у кого)

Цитата:
Сообщение от mazzy Посмотреть сообщение
Вы используете при запуске аксапты параметр, который позволяет изменить место dataareaid в индексе?
(подозреваю, что нет)
Нет

Цитата:
Сообщение от mazzy Посмотреть сообщение
Похоже, что вы удаляете почти все записи в таблице. 80%-90%-100% записей. так?
Нет, всего в таблице на данный момент около 11000000 записей, я же за один заход удаляю примерно 500000 - 600000

Цитата:
Сообщение от mazzy Посмотреть сообщение
Стесняюсь попросить... Вы планы обоих запросов показать сможете?
Или тоже объяснять нужно?
Если можно, объясните, пожалуйста

Цитата:
Сообщение от mazzy Посмотреть сообщение
Рекомендация - вообще уберите индекс по month
Этого индекса изначально не было. Его я добавил уже в процессе оптимизации, с ним стало значительно быстрее
Старый 28.04.2010, 15:17   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
В этой таблице нет данных по другим компаниям (и не должно быть), зачем св-во SavePerCompany установлено в Yes сказать не могу (ставил не я, а спросить уже не у кого)
так уберите, если не нужно.
(для начала измените настройку не в рабочей, а в тестовой базе)

Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
Нет, всего в таблице на данный момент около 11000000 записей, я же за один заход удаляю примерно 500000 - 600000
Ок. Будем смотреть планы запросов.

Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
Этого индекса изначально не было. Его я добавил уже в процессе оптимизации, с ним стало значительно быстрее
А что стало быстрее? Аксаптовский запрос или запрос из студии?
__________________
полезное на axForum, github, vk, coub.
Старый 28.04.2010, 15:31   #9  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Цитата:
Сообщение от mazzy Посмотреть сообщение
А что стало быстрее? Аксаптовский запрос или запрос из студии?
Быстрее стал Аксаптовский запрос. Без индекса по month полный цикл (удаление старых данных и заливка новых) занимал 4-5 часов. После добавления индекса - 1,5 - 2, из них примерно 1 час - удаление.

Запрос из студии на "ускорение" не проверял, запустил один раз (уже после добавления индекса) - 16 минут.
Старый 28.04.2010, 15:22   #10  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,431 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
зачем св-во SavePerCompany установлено в Yes сказать не могу (ставил не я, а спросить уже не у кого)
Это значение по умолчанию.
Как только измените значение этого свойства на No, из запроса сразу уйдут условия по DataAreaId.

Я ещё хотел сказать, что для тестирования временно стоит отказаться от удаления по частям. И добится сначала чтобы на пустой базе (без блокировки пользователей) delete_from из аксапты показывал бы тот-же самый результат, что и прямой delete from. Т.е. если и строить план запроса, то именно delete_from, а не вспомогательных select'ов, организующих цикл.
Старый 28.04.2010, 15:36   #11  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Это значение по умолчанию.
Так вот и не знаю, почему было оставлено это значение по умолчанию, не нужно оно там

Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Я ещё хотел сказать, что для тестирования временно стоит отказаться от удаления по частям. И добится сначала чтобы на пустой базе (без блокировки пользователей) delete_from из аксапты показывал бы тот-же самый результат, что и прямой delete from. Т.е. если и строить план запроса, то именно delete_from, а не вспомогательных select'ов, организующих цикл.
Что Вы имеете в виду под "пустой базой без блокировки пользователей"?
Старый 28.04.2010, 15:36   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
Если можно, объясните, пожалуйста
Мдя... *про себя* Назвался груздем - полезай в кузов

1. Заходите в Management Studio.
2. Коннектитесь и позиционируетесь на нужную базу данных
3. Создаете запрос
X++:
delete from SALESTABLE_TELECOMPHONTRA40478 where SALESTABLE_TELECOMPHONTRA40478.month = '2010-03-01'
4. включете опцию Include Actual Execution Plan
примерно так:
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 377
Размер:	47.2 Кб
ID:	5779

5. выполняете запрос
6. видите результаты и в закладке план исполнения
7. переключаетесь в закладку
8. скриншотите план исполнения так, чтобы он попал на скриншот полностью
9. повторяете действия для второго запроса

X++:
delete from SALESTABLE_TELECOMPHONTRA40478 where dataareaid = 'tz' AND month = '2010-03-01' AND RecID >= 5644252551  AND RecID <= 5644252561
Должно получится что-то вроде
Название: 2.PNG
Просмотров: 1150

Размер: 15.9 Кб

если ваш план запроса не помещается на экран, тогда сделайте следующий запросы:
X++:
set showplan_all on;
go
delete from SALESTABLE_TELECOMPHONTRA40478 where SALESTABLE_TELECOMPHONTRA40478.month = '2010-03-01'
X++:
set showplan_all on;
go
delete from SALESTABLE_TELECOMPHONTRA40478 where dataareaid = 'tz' AND month = '2010-03-01' AND RecID >= 5644252551  AND RecID <= 5644252561
в этом случае вместо результатов вы получите текстовый вариант плана запроса.
Нажмите на изображение для увеличения
Название: 3.PNG
Просмотров: 404
Размер:	15.7 Кб
ID:	5781

либо скриншоты, либо текст выкладывайте сюда.
__________________
полезное на axForum, github, vk, coub.
Теги
ax2009, ccadoconnection, delete_from, оптимизация, удаление

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Задвоение RecId при вставке записей через COM коннектор db DAX: Программирование 1 23.04.2009 15:12
Класс OfficialsServ_RU - удаление записей из OfficialsTrans_RU Logger DAX: Программирование 3 14.09.2006 15:58
Запуск программы из Аксапты через 2-хзвенку Migel_84 DAX: Программирование 25 27.04.2006 09:41
Проблема с запуском business connector'a через удал доступ yooshi DAX: Программирование 1 07.11.2005 08:56
Удаление записей из InventDim и SalesTable DreamCreator DAX: Программирование 4 08.12.2004 17:23

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

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

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