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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.04.2010, 18:04   #1  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Цитата:
Сообщение от mazzy Посмотреть сообщение
Врете вы. Если бы таблица не была включена, то и в Database log бы ничего не добавлялось.
Действительно вру. Прошу прощения, невнимательно проверял. Таблица была включена в логирование. Отключил, но заметно скорость не возросла. Удалял 500000 записей и измерял время на каждом куске по 100000 на каждом участке время разное, но в среднем - те же 10 минут

Цитата:
Сообщение от mazzy Посмотреть сообщение
Теперь осталось только одно выяснить - у вас на SQL отправляется команда delete from? или выполняется select по одной записи?

Вы можете открыть Profiler и привести скриншот?
Profiler имеется в виду Профайлер кода? Я не знаю, как в профайлере посмотреть на SQL запрос, подскажите, пожалуйста.
Старый 27.04.2010, 19:11   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,449 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
Profiler имеется в виду Профайлер кода?
SQL Server Profiler
Старый 27.04.2010, 20:19   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
Я не знаю, как в профайлере посмотреть на SQL запрос, подскажите, пожалуйста.
О, блин...

Сначала обругали Аксапту ("тормозит", "от безысходности"), а теперь такая фигня выясняется.
В общем, не нужно мучать Аксапту прямыми запросами. У нее и штатными неплохо получается.

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

Давайте попробуем дойти до конца этой истории.
Есть два варианта:
1.
Предлагаю свою совершенно бесплатную помощь, чтобы разобраться в данном конкретном случае с медленным удалением командой delete_from.
В этом варианте нужно от вас:
1.1. Доступ к вашей Аксапте и к профайлеру вашего SQL.
1.1.1. Для работы с профайлером нужен будет права администратора SQL.
1.1.2. Можно использовать режим, когда вы сами подключаетесь к Аксапте и к SQL, а мне расшариваете экран (штатный виндовый Ассистент, расшаривание экрана в Skype или любая аналогичная технология). Я по микрофону или в чате буду говорить что надо сделать.
1.2. Назначьте время (любое, кроме среды, можно выходные, можно ночером). Двух-трех часов будет достаточно чтобы запустить несколько раз это несчастное удаление и определить что у вас случилось. Желательно, чтобы в это время пользователи не работали (но можно и при работающих)
1.3. Свяжитесь со мной (в личку, на mazzy@mazzy.ru, по скайпу mazzy.ru, по телефону +7 (903) 771-66-00.

2.
Попробуйте таки разобраться самостоятельно.
Я буду показывать на SQL 2008 Eng. В SQL 2005 аналогично.

2.1.
запустите профайлер.
Название: 1.PNG
Просмотров: 3943

Размер: 38.4 Кб

2.2.
Запустите новую сессию File \ New Trace
2.3.
В окне укажите сервер, где крутится SQL с базой Аксапты, логин и пароль
Название: 2.PNG
Просмотров: 4038

Размер: 39.5 Кб

2.4.
В следующем окне выберите шаблон Standard (он ставится по умолчанию)
Нажмите на изображение для увеличения
Название: 3.PNG
Просмотров: 146
Размер:	37.3 Кб
ID:	5758

2.5.
Если вы запускаете профилирование при работающих пользователях, то вам нужно будет отфильтровать только свои запросы, чтобы не мучаться с чужими.
Этот шаг - самый сложный для объяснения (не могу придумать как объяснить откуда взять значения фильтров).
Поэтому - сделайте самостоятельное профилирование при отсутствующих пользователях.

Нажмите Run.
2.6. Поначалу Профайлер покажет кучу всего (кэширование, syslastvalue)
сотртите ненужное ластиком
дождитесь момента когда новые строчки перестанут поступать в окно.
запустите вашу обработку в Аксапте

2.7. остановите профилирование через полминуты-минуту после запуска (чтобы не набирать новых строчек)
Нажмите на изображение для увеличения
Название: 4.PNG
Просмотров: 233
Размер:	100.9 Кб
ID:	5759

2.8. при помощи поиска Ctrl+F найдите строчки, в которых упоминается ваша навороченная таблица.

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

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

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

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

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

Нажмите на изображение для увеличения
Название: 5.JPG
Просмотров: 336
Размер:	142.0 Кб
ID:	5771  
Старый 28.04.2010, 11:42   #5  
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
Просмотров: 295
Размер:	70.1 Кб
ID:	5773  
__________________
полезное на axForum, github, vk, coub.
Старый 28.04.2010, 11:59   #6  
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
Просмотров: 449
Размер:	92.8 Кб
ID:	5774  
Старый 28.04.2010, 12:35   #7  
Bober is offline
Bober
Участник
 
311 / 104 (4) +++++
Регистрация: 29.05.2007
А зачем стоит свойство Cachelookup = NotInTTS ?
Старый 28.04.2010, 13:03   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,449 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Bober Посмотреть сообщение
А зачем стоит свойство Cachelookup = NotInTTS ?
Для чистоты эксперимента возможно (хотябы временно) стоит убрать кэширование вообще.

И ещё я предлагаю в индекс MonthIdx вторым полем добавить RecId.
Старый 28.04.2010, 13:16   #9  
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   #10  
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
Этого индекса изначально не было. Его я добавил уже в процессе оптимизации, с ним стало значительно быстрее
Теги
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, время: 17:01.