![]() |
#20 |
Moderator
|
Цитата:
Я набросал еще один джоб, помогающий понять степень заполненности базы по диапазонам-этапам (stages) размером в 100 млн. номеров RecId. X++: static void Job351_CountRecIdsPerStage(Args _args) { // расчет количеств RecId по этапам int i, nLines; int timeFullStart, timeFullFinish; Dictionary dictionary = new Dictionary(); TableId tableId; DictTable dictTable; Common common; int row, timeStart; int recordCount; int stage; int stageCnt = 22; int recIdPerStage = 100000000; int recIdStart = 1; int recIdEnd = recIdPerStage; int recIdCount; ; timeFullStart = timenow(); for (stage=1; stage<= stageCnt; stage++) { recIdCount = 0; for (i=1; i<= dictionary.tableCnt(); i++) { tableId = dictionary.tableCnt2Id(i); dictTable = new DictTable(tableId); print strFmt('%1 -- %2 -- %3', stage, tableId, dictTable.name()); // если в очередной таблице нет записей // то переходим к следующей try { nLines = infolog.line(); recordCount = new SysDictTable(tableId).recordCount(); } catch //может случиться, если таблица есть в репозитарии, но нет в базе { infolog.clear(nLines); recordCount = 0; } if (! recordCount) continue; common = dictTable.makeRecord(); select count(RecId) from common where common.RecId >= recIdStart && common.RecId <= recIdEnd; recIdCount += common.RecId; } info(strFmt('%1 -- %2 -- %3 -- %4', stage, recIdStart, recIdEnd, recIdCount)); if (! recIdCount) break; recIdStart = recIdEnd + 1; recIdEnd = recIdEnd + recIdPerStage; } timeFullFinish = timenow(); box::info(strfmt('Total running time: %1 sec', timeFullFinish - timeFullStart)); } Код: stage recIdStart recIdEnd recIdCount % к 100 млн. --------------------------------------------------------------- 1 1 100 000 000 8 050 727 8% 2 100 000 001 200 000 000 878 353 1% 3 200 000 001 300 000 000 1 478 347 1% 4 300 000 001 400 000 000 1 131 490 1% 5 400 000 001 500 000 000 2 195 859 2% 6 500 000 001 600 000 000 1 427 424 1% 7 600 000 001 700 000 000 1 259 705 1% 8 700 000 001 800 000 000 2 905 657 3% 9 800 000 001 900 000 000 16 803 406 17% 10 900 000 001 1 000 000 000 12 565 324 13% 11 1 000 000 001 1 100 000 000 16 741 287 17% 12 1 100 000 001 1 200 000 000 21 317 892 21% 13 1 200 000 001 1 300 000 000 11 187 373 11% 14 1 300 000 001 1 400 000 000 0 0% --------------------------------------------------------------- 97 942 844 Кстати, нашёл у себя аксесный mdb-файл на 28 млн. записей таблицы UsedRecId (см. мой пред. пост). Так вот этот файл имеет размер 1 Gb. Можно использовать это соотношение как оценочное при планировании "завоевания" этапов. Alenka, а у вас поставщик-внедренец Аксапты - не GMCS ли тоже? У них в приложении масса полезных запросов-отчетов, которые, тем не менее, RecId расходуют нещадно - за счет заполнения вспомогательных таблиц временными данными (не путать с временными таблицами). Т.е. на "совесть" этих запросов-отчетов в нашем приложении половину дыр точно можно списывать... |
|
|
За это сообщение автора поблагодарили: aidsua (1), G.Menshikh (1). |
Теги |
ax3.0, recid, дефрагментирование recid, законченный пример, полезное |
|
![]() |
||||
Тема | Ответов | |||
if (record) vs if (record.RecId) | 18 | |||
поля, содержащие RecId | 15 | |||
Что лучше select RecId или select TableId | 9 | |||
aEremenko: Дефрагментация RecID | 2 | |||
Два RecId у одной записи таблицы | 33 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|