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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.11.2015, 09:01   #1  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Red face Разное количество индексов в axapta и sql
Добрый день.

Предыстория:
Переносил процедуру с тестовой SQL на рабочую и при компиляции получил ошибку, что SQL не знает такого индекса. Думаю, ладно может новый индекс и его не перенесли на рабочею, но не тут-то было. Индекс коробочной аксапты и находиться на слое SYS. Через форму администрирования пересоздал этот индекс. Все стала хорошо и SQL принял процедуру как родную.

Тут у меня появилась мысль, а сколько еще индексов не хватает в SQL.



Сделал запрос в SQL:
PHP код:
select count(*)
from sysobjects t 
inner join sysindexes i on t
.id i.id where i.name like 'I_%' 
вернул число 5496.

Хорошо, теперь нужно как-то понять, сколько индексов должно быть.
Нашел в системных таблицах UtilIdElements и UtilElements.
Вопрос к сообществу №1: В чем разница между UtilIdElements и UtilElement?
Через обозреватель таблиц на первый взгляд информация одинаковая.

X++:
static void utilIdElementsCount(Args _args)
{
    UtilIdElements  utilIdElements;
    ;
    select count(RecId)
        from utilIdElements order by parentId
        where utilIdElements.recordType == UtilElementType::TableIndex;

    
    info(int2str(utilIdElements.RecId));
}
вернул число 6623.

Тут я совсем расстроился и что-то приуныл. В SQL не хватает 1/6 индексов.

Далее мое извращенное сознание извергла следующий алгоритм:
X++:
static void getListIndexNameSql(Args _args)
{
    UtilIdElements  utilIdElements;
    DictTable       dictTable;
    str             textRow = 'Имя таблицы SQL;Имя таблицы;Имя индекса SQL;Имя индекса;Код таблицы;Код индекса\n';
    ;
    while select utilIdElements order by parentId
        where utilIdElements.recordType == UtilElementType::TableIndex
    {
        if(tableId2Name(utilIdElements.parentId) != 'UNKNOWN')
        {
            dictTable = new DictTable(utilIdElements.parentId);

            textRow += strFmt('%1;%2;%3;%4;%5;%6\n', 
                              dictTable.name(DbBackend::Sql), 
                              dictTable.name(), 
                              dictTable.indexName(utilIdElements.id, DbBackend::SQL), 
                              utilIdElements.name, 
                              utilIdElements.parentId, 
                              utilIdElements.id);
        }
    }

    info(textRow);
}
Вопрос к сообществу №2: Насколько корректны полученные данные? Если другой способ получение индексов, которые должны быть по версии axapta?

P.S. AX2009, SQL 2008
Старый 10.11.2015, 09:28   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Наличие в Аксапте конфигурационных ключей и временных таблиц вы не учитываете?

Пробегитесь по DictTable и связанными с таблицами DictIndex, с учетом isSql() - тогда узнаете, сколько Аксаптовских объектов сохранено в БД
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: demianimp (1).
Старый 10.11.2015, 09:39   #3  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Цитата:
Сообщение от AndyD Посмотреть сообщение
Наличие в Аксапте конфигурационных ключей и временных таблиц вы не учитываете?

Пробегитесь по DictTable и связанными с таблицами DictIndex, с учетом isSql() - тогда узнаете, сколько Аксаптовских объектов сохранено в БД
Я правильно понимаю, что нужно в алгоритм добавить:
X++:
...
            if(dictTable.isSql())
            {
                dictIndex = new DictIndex(utilIdElements.parentId, utilIdElements.id);
                
                if(!dictIndex.isSql())
                {
...
                }
            }
...
и тогда я пойму каких индексов не хватает?
Старый 10.11.2015, 10:28   #4  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от demianimp Посмотреть сообщение
Я правильно понимаю, что нужно в алгоритм добавить...
Неправильно. Нужно один раз синхронизовать БД и перестать использовать индексные подсказки
__________________
-ТСЯ или -ТЬСЯ ?
Старый 10.11.2015, 10:03   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Не совсем)

isSql() показывает, что объект ДОЛЖЕН быть сохранен в сиквеле, с точки зрения Аксапты. Т.е. для отключенных конф. ключем объектов и временных таблиц isSql() вернет false

А вот сохранен фактически он или нет - можно узнать только сделав запрос к метаданным самого сиквела
__________________
Axapta v.3.0 sp5 kr2
Старый 10.11.2015, 10:20   #6  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Цитата:
Сообщение от AndyD Посмотреть сообщение
Не совсем)

isSql() показывает, что объект ДОЛЖЕН быть сохранен в сиквеле, с точки зрения Аксапты. Т.е. для отключенных конф. ключем объектов и временных таблиц isSql() вернет false

А вот сохранен фактически он или нет - можно узнать только сделав запрос к метаданным самого сиквела
Спасибо большое.

Чем больше с умными людьми общаюсь, тем больше понимаю на сколько ничтожны мои знания
Теги
ax2009, sql 2008, индекс

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как узнать имя пользователя Axapta на SQL? Didukh84 DAX: Программирование 36 06.02.2014 14:14
SQL с базой Axapta занимает всю оперативную память alesander DAX: Администрирование 9 23.06.2010 12:45
Версия SQL 2005 Axapta 4.0 и Axapta 2009 tolstjak DAX: Администрирование 8 10.11.2009 11:11
Как же все таки добраться из Axapta до SQL Кандидат DAX: Программирование 5 02.12.2005 11:50

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:57.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.