28.04.2010, 15:22 | #61 |
Участник
|
Цитата:
Как только измените значение этого свойства на No, из запроса сразу уйдут условия по DataAreaId. Я ещё хотел сказать, что для тестирования временно стоит отказаться от удаления по частям. И добится сначала чтобы на пустой базе (без блокировки пользователей) delete_from из аксапты показывал бы тот-же самый результат, что и прямой delete from. Т.е. если и строить план запроса, то именно delete_from, а не вспомогательных select'ов, организующих цикл. |
|
28.04.2010, 15:31 | #62 |
Участник
|
Быстрее стал Аксаптовский запрос. Без индекса по month полный цикл (удаление старых данных и заливка новых) занимал 4-5 часов. После добавления индекса - 1,5 - 2, из них примерно 1 час - удаление.
Запрос из студии на "ускорение" не проверял, запустил один раз (уже после добавления индекса) - 16 минут. |
|
28.04.2010, 15:36 | #63 |
Участник
|
Так вот и не знаю, почему было оставлено это значение по умолчанию, не нужно оно там
Цитата:
Сообщение от S.Kuskov
Я ещё хотел сказать, что для тестирования временно стоит отказаться от удаления по частям. И добится сначала чтобы на пустой базе (без блокировки пользователей) delete_from из аксапты показывал бы тот-же самый результат, что и прямой delete from. Т.е. если и строить план запроса, то именно delete_from, а не вспомогательных select'ов, организующих цикл.
|
|
28.04.2010, 15:36 | #64 |
Участник
|
Мдя... *про себя* Назвался груздем - полезай в кузов
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 либо скриншоты, либо текст выкладывайте сюда. |
|
28.04.2010, 16:17 | #65 |
Участник
|
Коряво выразился. Я имел в виду тестовую базу с которой можете работать только вы но, не другие пользователей. Что бы не они вам не вы им не создавали блокировок. Дабы не загрязнять результаты эксперимента
|
|
28.04.2010, 16:35 | #66 |
Участник
|
|
|
29.04.2010, 17:37 | #67 |
Участник
|
Убрал мультикомпанию, добавил Recid в индекс Month (индекс делать уникалным не стал), убрал кэширование.
Удаление 100000 записей из Аксапты через delete_from без ограничения по RecId - 12 мин. Сделал индекс Month уникальным, выбрал его в PrimaryIndex на самой таблице. Удаление 100000 записей из Аксапты без огр. по RecId - 7мин. 49с. Удаление 100000 записей из Студии без огр. по Recid - 6мин. 47с. Удаление 450000 записей из Аксапты без огр. по RecId - 9мин. 39 с. Удаление 450000 записей из Студии без огр. по Recid - 9 мин. 36 с. Удаление 600000 записей из Аксапты без огр. по RecId - 9мин. 45 с. Удаление 600000 записей из Студии без огр. по Recid - 9 мин. 40 с. Удаление 450000 записей из Аксапты с разделением по RecId на блоки (1000 записей в блоке) - 11 мин. 55 с. Удаление 450000 записей из Студии Аксапты с разделением по RecId на блоки (10000 записей в блоке) - 10 мин. 24 с. Планы запросов: |
|
30.04.2010, 21:22 | #68 |
Участник
|
ну, вот! я же говорил, что планы разные.
и оба неоптимальны. а с ограничением по RecID? |
|
04.05.2010, 15:49 | #69 |
Участник
|
|
|
Теги |
ax2009, ccadoconnection, delete_from, оптимизация, удаление |
|
|