High CPU When Reporting. Clock Drifts. Excel Format. 17 Pages. Thread Dumps

I have a report that uses a table group. With 17 peer tables set to break on pages.

I’ll get timeout exceptions when I’m emailing from the designer or trying to save to file and the CPU will go above 70% and will take about a min to complete.

All data keys come from dataset tags. At first, they were named queries. So I made them into tags thinking that was the issue. Because this query can take almost 500ms to run. And there isn’t a whole lot I can do to improve it right now…

PDF or CSV finishes in like five seconds.

Is there anything I can do? So this doesn’t use so much CPU? There isn’t a lot of styling on the cells. there is none basically. Two thread dumps when it was trying to generate an email.
Ignition-IS-DP-IGNITION_thread_dump20201102-132047.txt (384.5 KB)
Ignition-IS-DP-IGNITION_thread_dump20201102-132055.txt (503.8 KB)



This has been noticed by others, and it is the Excel format conversion that is both a memory and CPU hog. /:

1 Like

Yikes. I wish I would’ve known this before I committed to doing it… :laughing:

If outputting to excel, why not just write to a dataset and then use system.dataset.exportExcel or exportCSV ?

We have some work pending review and QA targeted at 8.1.1 that improves the memory usage of system.dataset.exportExcel. Not sure if that matters here.

I am working on trying that right now. I’ll report back with details. If its any less resource intensive. I’m on 8.06 and going to update to 8.1 over thanksgiving. So I could name the sheets then! Which is bonus I don’t think I could get from the Reporting Module.

Traceback (most recent call last):
  File "<input>", line 15, in <module>
AttributeError: 'com.inductiveautomation.ignition.designer.gui.tool' object has no attribute 'toExcel'
## Specify the paths
#paths = [
#            "[default]D01/D01/Data/Database/Production/Produciton.Value",
#            "[default]D02/D02/Data/Database/Production/Produciton.Value"
#        ]
## Send the reads off
#results = system.tag.readBlocking(paths)

var = system.tag.read("[default]D02/D02/Data/Database/Production/Produciton.Value")
print var.value

spreadsheet = system.dataset.toExcel(True, [var.value])
filePath = "C:\\Ignition Reports"
system.file.writeFile(filePath, spreadsheet)

I don’t guess you can do this from script console. :expressionless:


1 Like


exportExcel() is only available in vision scope?

Since I am only on 8.06 : system.dataset.dataSetToExcel - Deprecated Ignition Features - Ignition Documentation

What is a sequence of datasets? is it not a list? This script makes a corupted .xls


	#Specify the paths
	paths = [
	# Send the reads off
	values = system.tag.readBlocking(paths)
	# Here we can examine each value
	table = [values.value for values in values]

	excelstr = system.dataset.dataSetToExcel(True,[table])
	fileName = 'dump.xls'

I think 8.0.6 in particular had an issue with the excel functions. Latest 8.0.16 shouldn’t, if you can do a ‘minor’ upgrade before thanksgiving (8.0.17 should be out ~soon, too).

Is it advisable to update to a higher minor version anyway. Before updating major versions? Out of curiosity.

8.0.6 – 8.1.0

8.0.6 - 8.0.16 - 8.1.0

There shouldn’t be any real reason to (especially between 8.0 and 8.1, they’re not nearly as far apart as some major version gaps).


Would you say it’s advisable to update to the highest minor version? Before upgrading a major version.

I would generally advise updating as often as possible to the most recent minor version. Obviously that isn’t practical in all scenarios, but the entire reason we’re continually releasing is to fix various bugs.

We take great pains to ensure upgrades work seamlessly, so there should not be any requirement (nor would I call it a best practice) to go to latest_minor before going to new_major.

So, as a non-answer - no, I wouldn’t say it’s advisable - but it doesn’t hurt anything to do it, either. As always, the key point of advice is to collect a .gwbk before doing any upgrading.

1 Like