AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.07.2015, 09:54   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Post Индексы
Добрый день.

Коллеги, возникла задача безболезненно создать на продуктивном окружении индекс по большой табличке.

Есть 2 проблемы :
1. Аксапта перед созданием индекса обязательно блокирует табличку, что подвешивает всех пользователей. Вопрос - зачем она это делает ? Как показывается практика, если взять тот же запрос по созданию индекса и выполнить его с директивой "ONLINE" (случай оракла) то все создается на лету без блокировок. Непонятно, почему бы аксапте всегда так не делать. Возможно ли заставить её выдавать именно такие запросы при синхронизации?

2. Как можно по конкретному индексу в AOT получить SQL выражение которое аксапта использует при синхронизации для создания индекса. Просмотр методов классов SysDictIndex / DictIndex ничего не дал.
Старый 02.07.2015, 10:22   #2  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1633 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
все зависит от таблицы.
для не особо используемых подойдет следующий способ
переносите объект на рабочую версию, аксапта зависает
находите зависшую команду в SQL create index, запоминаете ее, срубаете сессию SQL, в аксапте выдается ошибка, но объект сохраняется
далее добавляете в эту команду online = on, создаете индекс

к сожалению это не прокатит для таблиц с которыми постоянно идет работа (Inventtrans и подобных), даже для online = on блокировка будет накладываться в начале создания
За это сообщение автора поблагодарили: Logger (3).
Старый 02.07.2015, 10:27   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Спасибо.
Я в общем-то так и делаю.

Но хотелось в жизни немного совершенства.
Кстати, не замечал за ONLINE особых блокировок. Возможно все зависит от нагрузки.
Старый 02.07.2015, 10:29   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Нашел частичный ответ
X++:
new SqlDataDictionary().indexCreateDDL(tableNum(salestable))
вернет DDL для всех индексов по SalesTable
Дальше уже дело техники как их выкусить и добавить ONLINE.
За это сообщение автора поблагодарили: gl00mie (5), Cardagant (2).
Старый 02.07.2015, 11:18   #5  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Logger Посмотреть сообщение
Как показывается практика, если взять тот же запрос по созданию индекса и выполнить его с директивой "ONLINE" (случай оракла) то все создается на лету без блокировок. Непонятно, почему бы аксапте всегда так не делать
Вероятно потому что
  • ONLINE операции поддерживаются только Enterprise редакцией SQL Server
  • Не только лишь все операции могут выполняться ONLINE (есть ограничения)
Цитата:
  • Clustered indexes must be created, rebuilt, or dropped offline when the underlying table contains the following large object (LOB) data types: image, ntext, and text.
  • Nonunique nonclustered indexes can be created online when the table contains LOB data types but none of these columns are used in the index definition as either key or nonkey (included) columns.
  • Indexes on local temp tables cannot be created, rebuilt, or dropped online. This restriction does not apply to indexes on global temp tables.
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: Logger (7).
Старый 02.07.2015, 11:26   #6  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Logger Посмотреть сообщение
Нашел частичный ответ
X++:
new SqlDataDictionary().indexCreateDDL(tableNum(salestable))
вернет DDL для всех индексов по SalesTable
Хинт - SysSqlAdmin форму так до сих пор и не прибили
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: Logger (3).
Старый 02.07.2015, 11:36   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Vadik Посмотреть сообщение
Хинт - SysSqlAdmin форму так до сих пор и не прибили
Ага. Спс.
Вот тоже до неё докопался по перекрестным.
Прикольная штука.
Теги
ddl, online, индекс

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Стандартные неиспользуемые индексы Link DAX: Программирование 14 06.02.2014 14:48
Перестали работать индексы в запросах Antant DAX: Администрирование 2 03.08.2009 19:01
Не удалять индексы при синхронизации Logger DAX: Администрирование 18 03.04.2007 17:45
Oracle - снова индексы Bars DAX: Программирование 19 23.03.2006 15:31
При каждом обращении строит индексы в Old nicko DAX: Администрирование 0 16.02.2005 08:57

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:51.