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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.04.2010, 16:07   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
В 2009 в лог пишется после каждой отработки delete_from (один раз на один удаляемый блок). LogType = Delete, Table - 40478 (ид. SALESTABLE_TELECOMPHONTRA40478)
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
У нас эта таблица не включена в логирование...
Как это не включена? Если в лог пишется после каждой обработки delete_from?
__________________
полезное на axForum, github, vk, coub.
Старый 27.04.2010, 16:45   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
В 2009 в лог пишется после каждой отработки delete_from (один раз на один удаляемый блок). LogType = Delete, Table - 40478 (ид. SALESTABLE_TELECOMPHONTRA40478)
Цитата:
Сообщение от mazzy Посмотреть сообщение
Как это не включена? Если в лог пишется после каждой обработки delete_from?
Офигеть, какая интересная информация.
Спасибо.

Если в ax2009 настроить Database Log И отключить его в коде, то запись в Database Log все равно пишется, но один раз на весь Delete_from и с пустым контейнером.

Итак, берем простейший проверочный код (используется неважная таблица, которая хранит log обработки заказов)
X++:
static void Job1(Args _args)
{
    SalesParmLine   SalesParmLine;
    ParmId          ParmId;

    select minof(ParmId) from SalesParmLine;
    ParmId = SalesParmLine.ParmId;

    SalesParmLine.skipDeleteActions(true);
    SalesParmLine.skipDatabaseLog(true);
    delete_from SalesParmLine
    where SalesParmLine.ParmId == ParmId; // по ParmID есть индекс
}
Если не включать Database log, то на SQL отправляется вполне ожидаемый запрос
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 189
Размер:	53.0 Кб
ID:	5751
точно такой же как и через Query в Management Studio.

Далее включаем database log.
Естественно, вместо запроса delete_from Аксапта будет удалять каждую запись по отдельности и заносить каждую запись в Database log.
(скриншот не привожу - очевидно)

Далее в ax2009 добавляем метод skipDatabaseLog(true);
На SQL отправляется команда "delete from".
Однако, как сказал Shirmin Oleg, в database log все равно добавляется запись. С Пустым RecID и c пустым контейнером.
Нажмите на изображение для увеличения
Название: 2.PNG
Просмотров: 246
Размер:	51.8 Кб
ID:	5752
Нажмите на изображение для увеличения
Название: 3.PNG
Просмотров: 203
Размер:	57.6 Кб
ID:	5753
Нажмите на изображение для увеличения
Название: 4.PNG
Просмотров: 236
Размер:	111.4 Кб
ID:	5754
Нажмите на изображение для увеличения
Название: 5.PNG
Просмотров: 228
Размер:	80.9 Кб
ID:	5755

прикольно.
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: lev (5), S.Kuskov (5).
Старый 27.04.2010, 16:49   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
У нас эта таблица не включена в логирование...
Врете вы. Если бы таблица не была включена, то и в Database log бы ничего не добавлялось.

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

Вы можете открыть Profiler и привести скриншот?
__________________
полезное на axForum, github, vk, coub.
Старый 27.04.2010, 16:52   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
Так что запись в лог не тормозит, тормозит сам delete_from.
И еще. Индекс то у вас по полю TELECOMPHONTRA40478.month есть?
Или команда delete_from выполняет Table Scan, как предупреждал sukhanchik?
__________________
полезное на axForum, github, vk, coub.
Старый 27.04.2010, 16:59   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,430 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от mazzy Посмотреть сообщение
И еще. Индекс то у вас по полю TELECOMPHONTRA40478.month есть?
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
Есть индекс по recid и (неуникальный) по периоду
.
За это сообщение автора поблагодарили: mazzy (2).
Старый 27.04.2010, 18:04   #6  
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   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,430 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Shirmin Oleg Посмотреть сообщение
Profiler имеется в виду Профайлер кода?
SQL Server Profiler
Старый 27.04.2010, 20:19   #8  
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
Просмотров: 1291

Размер: 38.4 Кб

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

Размер: 39.5 Кб

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

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

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

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

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

Сделайте скриншоты запросов к вашей таблице и запросов вокруг, положите сюда. Интересует текстовая часть в нижней половине окна.
__________________
полезное на 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, время: 07:35.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.