|
27.04.2010, 16:07 | #1 |
Участник
|
Цитата:
|
|
27.04.2010, 16:45 | #2 |
Участник
|
Цитата:
Цитата:
Спасибо. Если в 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 есть индекс } точно такой же как и через Query в Management Studio. Далее включаем database log. Естественно, вместо запроса delete_from Аксапта будет удалять каждую запись по отдельности и заносить каждую запись в Database log. (скриншот не привожу - очевидно) Далее в ax2009 добавляем метод skipDatabaseLog(true); На SQL отправляется команда "delete from". Однако, как сказал Shirmin Oleg, в database log все равно добавляется запись. С Пустым RecID и c пустым контейнером. прикольно. |
|
|
За это сообщение автора поблагодарили: lev (5), S.Kuskov (5). |
27.04.2010, 16:49 | #3 |
Участник
|
Врете вы. Если бы таблица не была включена, то и в Database log бы ничего не добавлялось.
Теперь осталось только одно выяснить - у вас на SQL отправляется команда delete from? или выполняется select по одной записи? Вы можете открыть Profiler и привести скриншот? |
|
27.04.2010, 16:52 | #4 |
Участник
|
И еще. Индекс то у вас по полю TELECOMPHONTRA40478.month есть?
Или команда delete_from выполняет Table Scan, как предупреждал sukhanchik? |
|
27.04.2010, 16:59 | #5 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
27.04.2010, 18:04 | #6 |
Участник
|
Цитата:
Profiler имеется в виду Профайлер кода? Я не знаю, как в профайлере посмотреть на SQL запрос, подскажите, пожалуйста. |
|
27.04.2010, 19:11 | #7 |
Участник
|
|
|
27.04.2010, 20:19 | #8 |
Участник
|
Цитата:
Сначала обругали Аксапту ("тормозит", "от безысходности"), а теперь такая фигня выясняется. В общем, не нужно мучать Аксапту прямыми запросами. У нее и штатными неплохо получается. Убежден, что у вас какие-то настройки остались, из-за которых Аксапта переходит в режим удаления каждой записи по отдельности. Но этим сообщением разожгли любопытство не-по-деццки Давайте попробуем дойти до конца этой истории. Есть два варианта: 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. запустите профайлер. 2.2. Запустите новую сессию File \ New Trace 2.3. В окне укажите сервер, где крутится SQL с базой Аксапты, логин и пароль 2.4. В следующем окне выберите шаблон Standard (он ставится по умолчанию) 2.5. Если вы запускаете профилирование при работающих пользователях, то вам нужно будет отфильтровать только свои запросы, чтобы не мучаться с чужими. Этот шаг - самый сложный для объяснения (не могу придумать как объяснить откуда взять значения фильтров). Поэтому - сделайте самостоятельное профилирование при отсутствующих пользователях. Нажмите Run. 2.6. Поначалу Профайлер покажет кучу всего (кэширование, syslastvalue) сотртите ненужное ластиком дождитесь момента когда новые строчки перестанут поступать в окно. запустите вашу обработку в Аксапте 2.7. остановите профилирование через полминуты-минуту после запуска (чтобы не набирать новых строчек) 2.8. при помощи поиска Ctrl+F найдите строчки, в которых упоминается ваша навороченная таблица. Сделайте скриншоты запросов к вашей таблице и запросов вокруг, положите сюда. Интересует текстовая часть в нижней половине окна. |
|
Теги |
ax2009, ccadoconnection, delete_from, оптимизация, удаление |
|
|