23.11.2006, 14:13 | #1 |
Участник
|
Оптимизацизя запроса в findSum или ...?
При изменении количества в журнале переноса с меньшего на большее (при отрицательном количестве) система зависает на некоторое время.
При отладке длинных запросов выяснилось, что "тупит" запрос метода findSum таблицы InventSum: select forcePlaceholders forceSelectOrder forceNestedLoop #inventSumFields from inventSum index hint ClosedItemDimIdx where inventSum.itemId == _itemId && inventSum.closed == NoYes::No #inventDimjoin(inventSum.InventDimId,inventDim,_InventDimCriteria,_InventDimParm,dimIdIdx); В чем может быть проблема? |
|
23.11.2006, 15:07 | #2 |
NavAx
|
Думаю, что тут зря навязывается индекс. SQL-оптимизатор должен отработать лучше, если конечно статистика по индексам обновляется периодически.
|
|
23.11.2006, 15:54 | #3 |
Злыдни
|
Добавьте в индекс ClosedItemDimIdx InventDim. Это ускорит выборку
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
23.11.2006, 16:20 | #4 |
Модератор
|
проблема может быть в том, что некоторые личности считают себя умнее оптимизатора, в разработку которого вбухиваются миллионы у.е.
Цитата:
index hint ClosedItemDimIdx
Цитата:
#inventDimjoin(inventSum.InventDimId,inventDim,_InventDimCriteria,_InventDimParm,dimIdIdx)
количество записей в INVENTDIM озвучьте, пожалуйста
__________________
-ТСЯ или -ТЬСЯ ? |
|
23.11.2006, 16:23 | #5 |
Злыдни
|
А это на системном слое в методе findsum прописано
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
23.11.2006, 16:29 | #6 |
Модератор
|
этих-то личностей, пишущих на SYS слое, я и имею в виду
__________________
-ТСЯ или -ТЬСЯ ? |
|
24.11.2006, 07:05 | #7 |
Участник
|
Ребята, стандартный функционал используется по максимуму и никаких изменений в коде InventSum не проводилось.
Количество записей 5200065. А добавление InventDimId в индекс существенного увеличения результата не дает. |
|
24.11.2006, 07:13 | #8 |
Участник
|
вы план выполнения запроса посмотрите.. лучше даже в Query Analyzer'е.. А потом уберите все хинты (не только по индексу, но и включая forceSelectOrder и forceNestedLoop, а может и forcePlaceholders)
и еще раз план выполнения посмотрите - сравните и сделайте вывод.. потом уже можно будет думать о там как переделывать индекс (если придется) |
|
24.11.2006, 08:35 | #9 |
Злыдни
|
Цитата:
Или, как советуют остальные, уберите модификаторы и указание index hint в методе
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
24.11.2006, 09:08 | #10 |
----------------
|
а в длинных запросах используется ГТД?
и более общий вопрос - при каких параметрах он тупит? |
|
24.11.2006, 09:19 | #11 |
Участник
|
Цитата:
Сообщение от Sirius
вы план выполнения запроса посмотрите.. лучше даже в Query Analyzer'е.. А потом уберите все хинты (не только по индексу, но и включая forceSelectOrder и forceNestedLoop, а может и forcePlaceholders)
и еще раз план выполнения посмотрите - сравните и сделайте вывод.. потом уже можно будет думать о там как переделывать индекс (если придется) Он может улучшить план конкретного запроса исполняемого в ненагруженной системе, но ухудшить использование кеша в SQL server - так что в реальной работе производительность работы сервера базы данных может упасть. |
|
24.11.2006, 09:33 | #12 |
Участник
|
Я думаю, что при 5 миллионах записях в InventDim просто оптимизация уже вряд-ли поможет, тут техника должна быть соответствующей (представляю, сколько же записей в InventSum).
Закрывается ли склад? Сколько записей в InventSum закрыто, сколько открыто? Подвисания происходят в рабочем режиме или на базе без другой активности тоже? Что показывает план запроса? |
|
24.11.2006, 09:41 | #13 |
Участник
|
Цитата:
Сообщение от Raven Melancholic
Я думаю, что при 5 миллионах записях в InventDim просто оптимизация уже вряд-ли поможет, тут техника должна быть соответствующей (представляю, сколько же записей в InventSum).
Закрывается ли склад? Сколько записей в InventSum закрыто, сколько открыто? Подвисания происходят в рабочем режиме или на базе без другой активности тоже? Что показывает план запроса? Может быть имеет смысл проанализировать по каким полям идет фильтрация и под них создать специально обученные индексы ... А совсем в тяжелом случае может и денормализация потребуется - вытащить некоторые из аналитик непосредственно в InventSum P.S. А для начала конечно же хинты убить :-) Последний раз редактировалось Logger; 24.11.2006 в 09:44. |
|
24.11.2006, 09:52 | #14 |
Участник
|
Цитата:
Цитата:
При выборке по InventDim накладывается условие только на InventLocationId. Для всех вышеуказанных советов был поставлен эксперимент и как результат: 1. В любом из случаев приминялся ClosedItemDimIdx 2. Время выполнения каждой выборки было пропорционально количеству строк в InventSum не зависимо от эксперимента. 3. Существенного увеличения производительности добится не удается. Ведь необходимо уменьшить Время выполнения с 40000 млс хотя бы до 1000. Цитата:
Сообщение от Raven Melancholic
Я думаю, что при 5 миллионах записях в InventDim просто оптимизация уже вряд-ли поможет, тут техника должна быть соответствующей (представляю, сколько же записей в InventSum).
Закрывается ли склад? Сколько записей в InventSum закрыто, сколько открыто? Подвисания происходят в рабочем режиме или на базе без другой активности тоже? Что показывает план запроса? Последний раз редактировалось pdojn; 24.11.2006 в 10:56. Причина: Недописал |
|
24.11.2006, 10:58 | #15 |
----------------
|
Цитата:
Сколько выполняется тот же запрос в QA? Сравните планы. Может попадаете на блокировки? Посмотрите загрузку железа. Что еще можно посмотреть. Сколько записей в InventSum сколько из них с Closed = 1 сколько из них с ClosedQty = 1 |
|
Теги |
hint, sql, оптимизация |
|
Похожие темы | ||||
Тема | Ответов | |||
Изменить план выполнения запроса | 2 | |||
Быстродействие запроса | 1 | |||
Оптимизация запроса | 16 | |||
Разбор findSum | 1 | |||
Ускорение выполнения запроса Oracle + MS Axapta | 17 |
|