|
|
#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). | |