↓ Skip to main content
An abstract geometric composition: a dense stream of small orange and teal squares flows in from the left and settles on the right into six equal blocks of squares, which stand between a thin dark ceiling line and a baseline

Measured: A Million Records in Fiedler Data Export, Split into Six Files

Fiedler Data Export - This article is part of a series.
Part 4: This Article

An export of a million records can fail in two ways. The pod can run out of memory while it writes, or the export can produce a file that is too large to open. We measured both, and this article reports the numbers. The memory was measured under the same limit that the pod runs with, and the read rate comes from real exports on our test system, on the MAS 9.2 series.

How we measured a million records
#

Our test system holds only about 1,200 assets, so the million records came from a synthetic reader. The rest was the real export:

  • The real engine. The reader feeds the same spool, writer and splitter that a job uses.
  • A real layout. The asset layout Records with 163 columns, generated from the metadata of our test system, with values of each column’s type.
  • The pod’s runtime and limit. The run used Bun, the runtime of the pod, inside a container limited to 512 MiB, the memory limit of the pod. We sampled the memory every 0.2 seconds, and at the end we read whether the kernel had killed the process.
  • A control. The same run under a limit of 128 MiB was killed, as it should be. So the measurement can fail, and a pass means something.

The numbers
#

RunPeak memoryResult
A million records315 MiBfinished, six files
A million records, at most 500,000 rows per file346 MiBfinished, six files
Two jobs of a million records at once380 MiBfinished, six files each
The server, idle24 MiB
The control, limited to 128 MiB119 MiBkilled by the kernel

Two jobs at once is the most that the pod runs by default; a third one waits in the queue. Even then, the two jobs and the idle server together stayed well below the pod’s limit of 512 MiB.

Why a million records became six files
#

By count, a million records fit one file: the default limit is a million rows per file. They became six files anyway, because two other limits come first.

  • The zip format. An .xlsx file is a zip archive, and without the zip format’s extension for large files, one entry stops at 4 GiB.
  • The import’s read limits. By default, Fiedler Data Import reads at most 1 GiB of XML and 50 million cells per workbook.

So the engine estimates the size and the number of cells of every record from above. It starts a new file before a file would pass one of these limits, and always at a record boundary, so a record and its related rows stay together. The six files held between 157,800 and 169,365 rows each, with 939 MB of XML per file. Every one of them opened in Fiedler Data Import at its default limits.

A flow from Manage, read page by page into a spool on the data volume; the writer takes one record after the other from the spool and, before each one, checks whether it would pass a limit, then writes it to the current file or starts the next file A flow from Manage, read page by page into a spool on the data volume; the writer takes one record after the other from the spool and, before each one, checks whether it would pass a limit, then writes it to the current file or starts the next file
A large export splits at a record boundary, before a file passes a limit

The option Rows per file splits earlier, for people who want smaller files. The picture shows a real export of 1,326 work orders from our test system, at 500 rows per file: three files, numbered _1 to _3, written in less than half a minute. Every file has the same header rows, so each one imports on its own.

A finished export of 1,326 work orders at 500 rows per file: three files numbered _1 to _3, and the log with one line per page read

A file that fails while it is written leaves nothing behind in the job’s folder. So every file in a job’s list is complete.

The read rate
#

The export reads Manage page by page. On our test system, we exported the same selection of 5,680 work orders at page sizes from 100 to 5,000 records. Every run read between 70 and 86 records per second, so the page size hardly changes the rate. A large page only made the first page arrive later, and the progress on the screen start later. The default stays at 500 records per page.

At that rate, a million records read for hours. That is why a large export runs as a job in the background. It keeps its records in the spool on the app’s data volume, so it survives a restart of the pod, it stays in History, and a stopped job resumes where it stopped.

What comes next
#

The last article of the series is about running the export: the install and removal from the administration screen, nightly exports, retention, and monitoring. The Fiedler Data Export page lists the whole series.

Want to see how the export handles your largest objects? Get in touch.

IBM and Maximo are trademarks of International Business Machines Corporation, registered in many jurisdictions worldwide.

Fiedler Data Export - This article is part of a series.
Part 4: This Article