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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.12.2005, 21:36   #1  
Perc is offline
Perc
Участник
 
194 / 57 (2) ++++
Регистрация: 05.03.2005
Новые записи в таблице без генерации recId
Создаю свой отчет взамен стандартного (есть сильное желание ускорить выполнение). Заполняю временную таблицу, а затем вывожу ее в отчет с попутной информацией. Чтобы в итоге получить нужную сортировку и дополнительную информацию соединяю ее с InventTable по itemId в отчете. В итоге сортировка по InventTable идет страшно медленно и сводит на ноль эффект оптимизации.
Сделал вместо временной таблицы постоянную с полем номерсеанса. При запуске отчета по номеру сеанса сначала чищу потом заполняю. В итоге желаемый эффект значительного ускорения достигнут. Но возник у меня вопрос с бесполезной тратой номеров recId для генерации постоянной таблицы. По грубой оценке на данный момент отчет в месяц будет генерить около 100-150тыс левых номеров.
Есть нормальный выход из ситуации или можно забить и оставить как есть?
Старый 11.12.2005, 11:43   #2  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Сделайте таблицу в специальной компании или вообще поставьте SaveDataPerCompany = No. Тогда временами можно будет более или менее безболезненно сбрасывать счетчик для RecId.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 11.12.2005, 12:02   #3  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
SystemSequence.suspendRecIdGeneration(tablenum(...))
Старый 12.12.2005, 05:23   #4  
Perc is offline
Perc
Участник
 
194 / 57 (2) ++++
Регистрация: 05.03.2005
Цитата:
Сообщение от db
SystemSequence.suspendRecIdGeneration(tablenum(...))
Такой функции нет, а есть
systemSequence.lockRecidGeneration и
systemSequence.suspendRecIds
Я взял первую попробовать и она вроде как работает.
Какую использовать правильнее даже не знаю. Справки нет. О них видимо знает только шаман db.))
Старый 12.12.2005, 10:21   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
suspendRecIds() используется в методе SysDataImport.importData().

При вызове lockRecidGeneration() у меня Axapta уходит сама в себя
__________________
Axapta v.3.0 sp5 kr2
Старый 12.12.2005, 10:36   #6  
savel is offline
savel
Участник
 
74 / 13 (1) ++
Регистрация: 26.02.2004
Адрес: Санкт-Петербург
Цитата:
Сообщение от Perc
Но возник у меня вопрос с бесполезной тратой номеров recId для генерации постоянной таблицы. .....
Есть нормальный выход из ситуации или можно забить и оставить как есть?
Побобную "отчётную" таблицу я помещаю в отдельную виртуальную компанию. (компания для отчётов). И RecId'ы отъедаются там.
Старый 12.12.2005, 10:51   #7  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
ну извиняйте. Когда писал, аксапты под рукой не было

надо
systemSequence.suspendRecIds(_tableId);
при этом вместо реальных RecId в таблицу будут набиваться по очереди 2 "левых" значения

а systemSequence.lockRecidGeneration(_tableId);
просто блокирует раздачу RecId для заданной таблицы, при попытке выделить RecId для такой таблицы Аксапта повиснет

Счастливая новость для всех - в 4.0 новый базовый тип int64 и RecId основан на нем
Старый 12.12.2005, 10:52   #8  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
RecId - это тип Integer. Его предельно допустимое значение = 2,147,483,647. Выполняем простой расчет:

2,147,483,647 / 150,000 / 12 = 1,193 лет

Т.е. при такой интенсивности расхода номеров переполнение может произойти примерно через тысячу лет.

Не морочь себе голову всякой ерундой! Резерва хватит даже при увеличении интенсивности печати отчета в 100 раз. А если учесть, что допустимо использовать еще и отрицательные значения...
Старый 12.12.2005, 11:27   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от db
systemSequence.suspendRecIds(_tableId);
при этом вместо реальных RecId в таблицу будут набиваться по очереди 2 "левых" значения
У меня, если не указывать ручками RecID, пытается вбить 0 и вылетает по констрайнту на RecID.
__________________
Axapta v.3.0 sp5 kr2
Старый 12.12.2005, 12:02   #10  
komar is offline
komar
Шаман форума
Аватар для komar
Ex AND Project
 
5,571 / 600 (32) +++++++
Регистрация: 24.05.2002
Цитата:
Сообщение от Владимир Максимов
RecId - это тип Integer. Его предельно допустимое значение = 2,147,483,647. Выполняем простой расчет:

2,147,483,647 / 150,000 / 12 = 1,193 лет
А что есть цифра 150000? Думается мне, цифра эта будет у каждого своя. Например, если имеем 70000 объектов ОС, да три модели учета - вот уже и на одних основных вылезли далеко за 150000 в месяц. А ведь нужно журнальчик создать, журнальчик разнести, связанные таблицы заполнить, налоговый учет построить....и везде recid жрет, жрет....думаю, тут тысячей лет не пахнет. Тут десятком лет в лучшем случае пахнет. А кроме основных еще ууууух!!!!
__________________
All information in this post is strictly confidential. If you have read it in error, please forget it immediately.
Старый 12.12.2005, 12:48   #11  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от komar
А что есть цифра 150000? Думается мне, цифра эта будет у каждого своя. Например, ...
Я отвечаю на вполне конкретный вопрос, заданный в самом первом топике темы. Не "что будет если вдруг прилетят марсиане?", а "стоит ли озаботится возможным переполнением RecId при формировании порядка 150 тыс новых значений ежемесячно?".

При этом уточняется, что это значение формируется для некой таблицы, использующейся исключительно для хранения промежуточных результатов расчета для отчета.

При такой постановке задачи - можно не волноваться. Существующая функциональность не потребует переделки. Ее резерва на это хватит с большим запасом.

Кроме того, насколько я понимаю, записи периодически удаляются. Т.е. количество записей в самой таблице в каждый момент времени будет относительно невелико. Ну, предположим, те же 150 тысяч.

Это значит, вопрос стоит не в том, чтобы сохранить все те миллиарды записей, которые когда-либо будут созданы при формировании всех отчетов в обозримом будущем, а только вот для этого небольшого количества записей.

По сути, вопрос сводится к тому, что произойдет при переполнении значения RecId, при условии, что физическое количество записей в таблице относительно невелико. Порядка 150 тысяч.

Если я правильно понимаю логику присвоения очередного значения RecId, то ничего страшного.

Дошли до максимума в 2 миллиарда, далее RecId начал присваивать отрицательные значения. Когда дойдет до 0 что произойдет дальше? Опять начнет присваивать положительные значение? Ну, и какие проблемы?
Старый 12.12.2005, 15:17   #12  
komar is offline
komar
Шаман форума
Аватар для komar
Ex AND Project
 
5,571 / 600 (32) +++++++
Регистрация: 24.05.2002
Проблемы в возможном их пересечении, насколько я понимаю. То есть не появится ли в будущем, после выбора отрицательных id положительный с таким же значением, как уже бывший когда-то в системе. Собственно, это уже обсуждалось, здесь, например Как выполнять дефрагментирование RecID
__________________
All information in this post is strictly confidential. If you have read it in error, please forget it immediately.
Старый 12.12.2005, 15:47   #13  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от Владимир Максимов
Если я правильно понимаю логику присвоения очередного значения RecId, то ничего страшного.

Дошли до максимума в 2 миллиарда, далее RecId начал присваивать отрицательные значения. Когда дойдет до 0 что произойдет дальше? Опять начнет присваивать положительные значение? Ну, и какие проблемы?
Ага, и будет бегать по кругу аки лошадка цирковая...
Не знаю у кого через какие тысячелетия, а у нас месяца через 3 Аксапта скажет Йо...с и успешно остановит свою работу..
Старый 12.12.2005, 15:49   #14  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от komar
Проблемы в возможном их пересечении, насколько я понимаю. То есть не появится ли в будущем, после выбора отрицательных id положительный с таким же значением, как уже бывший когда-то в системе. Собственно, это уже обсуждалось, здесь, например Как выполнять дефрагментирование RecID
Мы уже в "минусе" пока проблем не наблюдаем .. тьфу-тьфу-тьфу
Старый 12.12.2005, 16:03   #15  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
2 db:
а хакнуть эту дрянь можно?
Старый 12.12.2005, 16:22   #17  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
читал. ерунда всё это.. ну оттянем конец на месяц? я понимаю на инт64 перейти .. а так..
Старый 12.12.2005, 16:33   #18  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
вы можете подсчитать количество ваших записей

Например, Сервис \ Средства разработки \ количество записей в таблицах
или DBCC SHOWCONTIG WITH TABLERESULTS в MS SQL?

Сколько вас реально записей?
__________________
полезное на axForum, github, vk, coub.
Старый 12.12.2005, 17:03   #19  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Извиняюсь. Был не прав.

Забыл, что RecId - это глобальная штука на все таблицы в пределах одного значения DataAreaId. Тогда все мои возражения - не о том. Они имеют смысл, если бы RecId рассчитывался в пределах одной таблицы.

В качестве предложения по ускорению работы отчета - проиндексируй временную таблицу по ItemId. И именно по временной таблице и делай сортировку. Ну, и я бы не делал объединение временной таблицы и InventTable. Использовал бы Display-методы для вытягивания нужной информации из InventTable.
Старый 12.12.2005, 17:40   #20  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от mazzy
или DBCC SHOWCONTIG WITH TABLERESULTS в MS SQL?

Сколько вас реально записей?
фигасе... 400 млн всего... куды она подевала Ыщё 2 миллиарда интересно??? Или она их с "зазорчиком" резервирует?
Спасибо, будем ковыряться..
Теги
recid

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как запретить создавать записи в подчиненной таблице, если шапка пуста? Eldar9x DAX: Программирование 6 19.06.2008 14:44
Real в качестве ключа - ошибка при создании записи в связанной таблице sgt.Pepper DAX: Программирование 4 20.05.2008 16:08
Как проверить наличие хотя бы одной записи в подчиненной таблице. demon46 DAX: Программирование 5 07.03.2008 09:41
Создание новой записи в таблице Andrux DAX: Программирование 28 01.06.2007 10:23
Два RecId у одной записи таблицы sparur DAX: Программирование 33 18.12.2006 15:56

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

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

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