|
![]() |
#1 |
Участник
|
Цитата:
но с большим удовольствием научусь ![]() А "безысходность" - не про Аксапту, а про СОМ CCADOCOnnection, кот. не реагировал на изменение таймаута Цитата:
Скрины прилагаю |
|
![]() |
#2 |
Участник
|
Отлично. Спасибо.
Жалко только что вы колонки убрали. Очень интеерсно было бы посмотреть на колонки Duration, Reads, Writes. Ну, да бог с ними. Итак, на 5 скриншоте четко видно, что посылается команда "Delete from". И видны условия. Отлично. Цитата:
Давайте определимся между чем у вас получается разница. Запрос, который посылает Аксапта - виден на 5ом скриншоте. Какой запрос вы посылаете из management Studio? ================ Можете сделать скриншот таблицы из Аксапты? так, чтобы были видны все индексы и параметры самой таблицы. Вот так: |
|
![]() |
#3 |
Участник
|
delete from SALESTABLE_TELECOMPHONTRA40478 where SALESTABLE_TELECOMPHONTRA40478.month = '2010-03-01'
|
|
![]() |
#4 |
Участник
|
А зачем стоит свойство Cachelookup = NotInTTS ?
|
|
![]() |
#5 |
Участник
|
|
|
![]() |
#6 |
Участник
|
Понятно. Спасибо.
Итак: Аксаптовский delete_from работает НЕ медленнее. Аксапта - хорошая девочка - и четко следует указаниям программиста, посылая команду "delete from" с правильными условиями. Разница проявляется не в ядре аксапты. А в том, что на SQL посылаются разные условия к команде. Причем разные условия - потому что программист в Management Studio, скорее всего, "забыл" про компании. Цитата:
это же совсем другие условия в запросе!!! Обратите внимание, что Аксапта удаляет в пределах одной компании. А вы удаляете данные изо всех компаний!!! (у вас нет условия dataareaid == "tz") А почему вы в студии удаляете данные изо всех компаний? Если вам компании неважны, то почему вы включили свойство SavePerCompany = Yes? Выключите это свойство и не будет компаний в этой таблице. ================== Вы используете при запуске аксапты параметр, который позволяет изменить место dataareaid в индексе? (подозреваю, что нет) ================== Согласен с S.Kuskov, что сейчас удаление из аксапты не использует индекс. Либо использует, но делает дополнительный поиск по recid. Как это ни странно, но удаление из студии у вас, скорее всего, вообще не использует индексы, а делает TableScan. И похоже table scan в конечном итоге работает быстрее. Как это ни странно. Похоже, что вы удаляете почти все записи в таблице. 80%-90%-100% записей. так? ================== Стесняюсь попросить... Вы планы обоих запросов показать сможете? Или тоже объяснять нужно? Если планы показать сложно, то Рекомендация - вообще уберите индекс по month. Тогда, скорее всего, в обоих случаях (запрос из студии и запрос из аксапты) будет использоваться один и тот же план запроса. Или выключите свойство SavePerCompany, если вам не нужны компании в этой таблице. |
|
![]() |
#7 |
Участник
|
Цитата:
Цитата:
Цитата:
Цитата:
Этого индекса изначально не было. Его я добавил уже в процессе оптимизации, с ним стало значительно быстрее |
|
![]() |
#8 |
Участник
|
Цитата:
(для начала измените настройку не в рабочей, а в тестовой базе) Цитата:
А что стало быстрее? Аксаптовский запрос или запрос из студии? |
|
![]() |
#9 |
Участник
|
Быстрее стал Аксаптовский запрос. Без индекса по month полный цикл (удаление старых данных и заливка новых) занимал 4-5 часов. После добавления индекса - 1,5 - 2, из них примерно 1 час - удаление.
Запрос из студии на "ускорение" не проверял, запустил один раз (уже после добавления индекса) - 16 минут. |
|
![]() |
#10 |
Участник
|
Цитата:
Как только измените значение этого свойства на No, из запроса сразу уйдут условия по DataAreaId. Я ещё хотел сказать, что для тестирования временно стоит отказаться от удаления по частям. И добится сначала чтобы на пустой базе (без блокировки пользователей) delete_from из аксапты показывал бы тот-же самый результат, что и прямой delete from. Т.е. если и строить план запроса, то именно delete_from, а не вспомогательных select'ов, организующих цикл. |
|
![]() |
#11 |
Участник
|
Так вот и не знаю, почему было оставлено это значение по умолчанию, не нужно оно там
Цитата:
Сообщение от S.Kuskov
![]() Я ещё хотел сказать, что для тестирования временно стоит отказаться от удаления по частям. И добится сначала чтобы на пустой базе (без блокировки пользователей) delete_from из аксапты показывал бы тот-же самый результат, что и прямой delete from. Т.е. если и строить план запроса, то именно delete_from, а не вспомогательных select'ов, организующих цикл.
|
|
![]() |
#12 |
Участник
|
Мдя... *про себя* Назвался груздем - полезай в кузов
1. Заходите в Management Studio. 2. Коннектитесь и позиционируетесь на нужную базу данных 3. Создаете запрос X++: delete from SALESTABLE_TELECOMPHONTRA40478 where SALESTABLE_TELECOMPHONTRA40478.month = '2010-03-01' примерно так: 5. выполняете запрос 6. видите результаты и в закладке план исполнения 7. переключаетесь в закладку 8. скриншотите план исполнения так, чтобы он попал на скриншот полностью 9. повторяете действия для второго запроса X++: delete from SALESTABLE_TELECOMPHONTRA40478 where dataareaid = 'tz' AND month = '2010-03-01' AND RecID >= 5644252551 AND RecID <= 5644252561 если ваш план запроса не помещается на экран, тогда сделайте следующий запросы: 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 либо скриншоты, либо текст выкладывайте сюда. |
|
Теги |
ax2009, ccadoconnection, delete_from, оптимизация, удаление |
|
|