@Override
    public SystemInfoResult getSystemInfo() {
        try {
            final Tuple2<Optional<Instant>, Optional<Instant>> lastAccessedTimeRange =
                    processingInfoDb.getLastAccessedTimeRange();

            final ReferenceDataConfig referenceDataConfig = referenceDataConfigProvider.get();

            final SystemInfoResult.Builder builder = SystemInfoResult.builder(this)
                    .addDetail("Path", lmdbEnvironment.getLocalDir().toAbsolutePath().normalize().toString())
                    .addDetail("Environment max size", referenceDataConfig.getLmdbConfig().getMaxStoreSize())
                    .addDetail("Environment current size",
                            ModelStringUtil.formatIECByteSizeString(getSizeOnDisk()))
                    .addDetail("Purge age", referenceDataConfig.getPurgeAge())
                    .addDetail("Purge cut off",
                            TimeUtils.durationToThreshold(referenceDataConfig.getPurgeAge()).toString())
                    .addDetail("Max readers", referenceDataConfig.getLmdbConfig().getMaxReaders())
                    .addDetail("Available read permits", lmdbEnvironment.getAvailableReadPermitCount())
                    .addDetail("Read-ahead enabled", referenceDataConfig.getLmdbConfig().isReadAheadEnabled())
                    .addDetail("Current buffer pool size", byteBufferPool.getCurrentPoolSize())
                    .addDetail("Earliest lastAccessedTime", lastAccessedTimeRange._1()
                            .map(Instant::toString)
                            .orElse(null))
                    .addDetail("Latest lastAccessedTime", lastAccessedTimeRange._2()
                            .map(Instant::toString)
                            .orElse(null))
                    .addDetail("Total reference entries", getKeyValueEntryCount() + getRangeValueEntryCount());

            lmdbEnvironment.doWithReadTxn(txn -> {
                builder.addDetail("Entry counts", Map.of(
                        "keyValueStoreDb", keyValueStoreDb.getEntryCount(txn),
                        "rangeStoreDb", rangeStoreDb.getEntryCount(txn),
                        "processingInfoDb", processingInfoDb.getEntryCount(txn),
                        "valueStore", valueStore.getEntryCount(),
                        "mapDefinitionUIDStore", mapDefinitionUIDStore.getEntryCount()));
            });
            return builder.build();
        } catch (RuntimeException e) {
            return SystemInfoResult.builder(this)
                    .addError(e)
                    .build();
        }
    }
For use in testing at SMALL scale. Dumps the content of each DB to the logger.
stroom-pipeline/src/main/java/stroom/pipeline/refdata/store/offheapstore/RefDataOffHeapStore.java