With new functionality in SYSPRO 7 it was time to squeeze some more memory out of our application servers through optimizing the multi-threading capabilities of the SYSPRO WCF Service.SYSPRO 6.1 pushed the boundaries of memory in the SYSPRO e.net Solutions environment, with some customers posting thousands of transactions per minute. Performing all those transactions took a toll on the performance of the SYSPRO application server and in particular the server memory.
The SYSPRO WCF Service is essentially a wrapper around the Encore.dll, the COM (Component Object Model) gateway into SYSPRO data and extensively used by SYSPRO Espresso, SYSPRO Workflow services, SYSPRO Server Reporting as well as third party developers.
So what changed?
Before I explain what changed, let me take a step back and explain how memory allocations work with the SYSPRO WCF Service.
When a call is made to a business object using the WCF service, a thread is spawned, which will in turn consume memory space based on the size of the call in bytes. SYSPRO business objects create a template for their internal business logic and memory consumption. For example, an Inventory Query template will hold a Stock Code and Warehouse as a key and perhaps some other additional data. Assuming the additional data is 150 characters (150 bytes), the Inventory Query business object will create a template of 182 bytes, consisting of 30 bytes for the Stock Code, 2 bytes for the Warehouse and 150 bytes for the additional data.
SYSPRO 6.1 was very good at reusing memory allocations and templates, once they had been created within a thread, but every new thread would create new memory allocations, therefore consuming more memory.
SYSPRO 7 changes the way memory allocations are done. Instead of each thread creating memory allocations, the memory allocations are placed on a cache where other threads can access and use them.
Looking at the example above, the Inventory query business object in SYSPRO 6.1 would create a template consuming 182 bytes, not that much it would seem. If I run 10 different threads (Inventory queries) that equates to 182 x 10 giving a total of 1820 bytes.
- 30 characters (bytes) for the Stock Code
- 10 bytes for the Warehouse (Using the larger fields sizes of SYSPRO 7)
- 150 bytes for the additional data
A total of 190 bytes, even with bigger field sizes in this case we still save on memory allocations.
In this simple example we would not be consuming 190 x 10 = 1900 bytes, we would only consume 190 bytes i.e. 1630 bytes have been saved.
What is 1630 bytes you might ask? Remember, this is just one example of one template that a business object might create. SYSPRO 6.1 and SYSPRO 7 business objects create lots of different templates of different sizes, the more threads that are running the more memory is consumed.
By reusing the cached memory, SYSPRO 7 leverages off multithreading more than ever before, cutting down on processing time and bringing results in quicker.
It's a no brainer, upgrade to SYSPRO 7.
Small things matter in the digital realm of enterprise processing. Memory, you may think, is abundant - reitterative consumption is costly and wasteful of process time and user patience. SYSPRO 7 rewards the user by getting things done faster.
This article was recently published in the SYSPRO Support Zone Newsletter 12 May 2014.
In environments, like our customers have; multiple locations, user counts mounting and delivery of data to the user becoming critical for decision support. While information moves faster, reliability is key to success of ERP and customer satisfaction.
If your organization would like help determining your next SYSPRO ERP steps, we would like to help.