24.01.2007, 11:55 | #1 |
Moderator
|
[axapta 4.0] - index и index hint
Если я не ошибаюсь, в своем выступлении Алексей Еременко говорил о том, что в 4.0 решили отказаться от поддержки хинтов, и, в частности, index hint.
Может кто-нибудь прокомментировать этот момент. Я его неправильно понял? Залез сегодня в 4-ку - хинт по-прежнему поддерживается. |
|
24.01.2007, 12:03 | #2 |
Участник
|
Правильно поняли, во всяком случае, так же, как и я.
Решено было отказаться от использования хинтов, а не от их поддержки. То есть, SQL Server сейчас лучше сам определит, где какой индекс использовать, и навязывание ему конкретной стратегии может замедлить процесс выборки данных. Но, естесственно, в приложении осталось куча кода, в котором они используются. |
|
24.01.2007, 12:19 | #3 |
Moderator
|
Цитата:
Но, естесственно, в приложении осталось куча кода, в котором они используются.
|
|
24.01.2007, 13:25 | #4 |
Участник
|
Цитата:
Речь идет о том, что стандартный функционал не будет содержать хинтов. чтобы не пришлось давать вот такие советы http://axapta.mazzy.ru/lib/querytuning/ |
|
24.01.2007, 15:42 | #5 |
Member
|
Цитата:
Сообщение от kashperuk
...
SQL Server сейчас лучше сам определит, где какой индекс использовать ... Но вот с Oracle (с ним я вообще не работал, только по наслышке) вроде как без хинтов ничего нормально не работает. Собственно этим о объясняется их неимоверное количество в коде Аксапты. Если это правда, то как понимать заявление господ из Микрософта (его я тоже еще не выкачивал, но Андре склонен доверять)?
__________________
С уважением, glibs® |
|
24.01.2007, 16:15 | #6 |
Moderator
|
В общем, Алексей там как-то очень туманно выразился. Из объяснений kashperuk и mazzy следует, что разработчики mbs (кстати какие - российские, штаб-квартира...) обязались не использоват index hint. Здорово конечно, но при наличии данного инструмента в системе разработчики партнеров и клиента по прежнему будут его использовать. А вот как раз их я и боюсь
Кстати, Алексей там еще и про forupdate высказался. Как без него будут разруливаться конфликты я вообще не понял..... Цитата:
Но вот с Oracle (с ним я вообще не работал, только по наслышке) вроде как без хинтов ничего нормально не работает.
|
|
24.01.2007, 16:25 | #7 |
Участник
|
насколько я понял, без forupdate можно работать будет только на SQL2005 (может и на Оракле).. дело в том, что SQL2005 стал версионником (т.е. теперь если одна транзакция начала изменения, то все другие могут иметь доступ к этим данным, но будут видеть их изначальные значения, т.е. игнорировать все что наизменяла первая транзакция, ну а далее видимо проверка по номеру версии строки и все дела)
|
|
24.01.2007, 16:26 | #8 |
Модератор
|
Цитата:
Залез сегодня в 4-ку - хинт по-прежнему поддерживается
Просто вынесли битовый флаг из HINT FLAGS отдельной опцией в конфигурационной утилите (Database tuning \ Allow index hints in queries) и по умолчанию отключили ее Цитата:
Здорово конечно, но при наличии данного инструмента в системе разработчики партнеров и клиента по прежнему будут его использовать. А вот как раз их я и боюсь
__________________
-ТСЯ или -ТЬСЯ ? |
|
24.01.2007, 16:34 | #9 |
Moderator
|
Цитата:
Просто вынесли битовый флаг из HINT FLAGS отдельной опцией в конфигурационной утилите(Database tuning \ Allow index hints in queries) и по умолчанию отключили ее
|
|
24.01.2007, 16:36 | #10 |
Moderator
|
Цитата:
дело в том, что SQL2005 стал версионником
Пользователь 1 сказал: select t Пользователь 2 сказал select тот же самый t Пользователь 1 сказал t.update() Пользователь 2 сказал t.update() Система сказала: ??? |
|
24.01.2007, 16:41 | #11 |
Участник
|
...пользователю 2 - иди нафиг.
|
|
24.01.2007, 16:42 | #12 |
Участник
|
как мне кажется будет работать:
пользователь 2 делает t.update() - система видит чтоверсия строки его t не совпадает с версией этой строки имеющейся в БД, следовательно налицо конфликт обновления, т.е. ктото уже успел изменить строку, пока он размышлял над своими дальнейшими действиями... подчеркну что это только пока мои догадки - не было времени разбираться... |
|
24.01.2007, 16:43 | #13 |
Участник
|
Цитата:
С точки зрения Microsoft Dynamics Ax модель OCC, реализованная в 4.0, состоит из следующих областей:
|
|
24.01.2007, 16:45 | #14 |
Модератор
|
так точно
__________________
-ТСЯ или -ТЬСЯ ? |
|
24.01.2007, 16:54 | #15 |
Moderator
|
Цитата:
...пользователю 2 - иди нафиг.
Могла бы послать меня на этапе select, пока я НЕ потратил кучу времени на внесение изменений. В общем то, forupdate неплохо решал эту задачу. Последний раз редактировалось Андре; 24.01.2007 в 16:59. |
|
24.01.2007, 17:25 | #16 |
Участник
|
Цитата:
Пользователь 1: select T Пользователь 2: insert into R select from T Пользователь 1: update T Пользователь 2: select R - что получит?? |
|
24.01.2007, 17:42 | #17 |
Moderator
|
Цитата:
А так?
Пользователь 1: select T Пользователь 2: insert into R select from T Пользователь 1: update T Пользователь 2: select R - что получит?? |
|
24.01.2007, 17:48 | #18 |
Участник
|
|
|
24.01.2007, 20:00 | #19 |
Member
|
Цитата:
Сообщение от Sirius
...
без forupdate можно работать будет только на SQL2005 (может и на Оракле).. дело в том, что SQL2005 стал версионником (т.е. теперь если одна транзакция начала изменения, то все другие могут иметь доступ к этим данным, но будут видеть их изначальные значения, т.е. игнорировать все что наизменяла первая транзакция, ну а далее видимо проверка по номеру версии строки и все дела) ... А то я еще в такие дебри не успел углубиться. Там еще есть интересный параметр для 2000-го, который, насколько я могу догадываться из названия, обеспечивает грязное чтение даже при считывании внутри транзакции.
__________________
С уважением, glibs® |
|
25.01.2007, 10:06 | #20 |
Moderator
|
Цитата:
Чего-то я не понял. Но в 4.0 поддержку 2000-го, вроде, пока не отменили.
Цитата:
...пользователю 2 - иди нафиг.
|
|