Message Boards
Performance Tuning QXtend
Michael Forman, modified 3 Years ago.
Performance Tuning QXtend
Post Date: 12/14/11 (Platinum, 334 Posts) Recent PostsHi All,
Has anyone got any performance tuning tips for Qxtend?
I've put some logging into a program that submits maintainItemMaster
qdoc to qxtend.
It is consistency about 6-7 seconds per document. (nearly idle
machine). Is this normal?
The developers here are going back to CIM or directly updating tables
directly.
I don't think this is the way to go but it is hard to disagree with them
when a it takes so long to process 1 update.
Any tips appreciated.
Cheers
Craig
FYI
I've done a bit of homework,
1. I've upped the memory from 32m to 256m in setenv.sh for the tomcat.
(hopefully this is the problem).
CATALINA_OPTS="-Djava.awt.headless=true -server -Xms256m -Xmx256m
-Dfile.encoding=utf-8 -XX:MaxPermSize=256M";export CATALINA_OPTS
2. About to apply Solution ID: qad68998 QAD's "QXI 1.6 "Space Bar"
performance patch"
I'll report back if I find anything else that could make a difference.
Cheers
Craig.
Michael Forman, modified 13 Years ago.
Re: Performance Tuning QXtend
Post Date: 12/14/11 (Platinum, 334 Posts) Recent Posts| From: | Gary Yang |
| Sent: | 11/30/11 3:44 PM |
| To: | [email protected] |
| Subject: | Re: performance tuning qxtend |
Yes, 32M is way too low - this is a common mistake in Tomcat setup.
512M will be more scalable when multiple QDoc's are processed. Also,
there are a few other issues:
1) Your operation of "U" is not correct, unless you meant "Unchanged"
- it should be "M" instead for "modify".
2) If you only meant to update the item price field, use ppptmt03.p
(Item Cost Maintenance) instead - the time QXtend spent on is
proportional to the number of fields it has to traverse (all of them,
no matter how few fields you have in QDoc), so using a program with
fewest widgets will help to improve the speed
3) You missed the "scopeTransaction" session context, make sure you
include it (even if you set it to "false")
4) You missed the "suppressResponseDetail" node in SOAPHeader, it
should be set to "true" to prevent the excessive communications to
MessageReceiverServlet.
Also, keep in mind the performance of QDoc processing is also
dependent on the overall QAD application performance. Hope these
helps.
Gary
Michael Forman, modified 13 Years ago.
Re: Re: Performance Tuning QXtend
Post Date: 12/14/11 (Platinum, 334 Posts) Recent PostsQxtend 1.6
>> HPUX (rx4640. 24 gig RAM, 8 Cores).
>> Progress 10.1C
>>
>>
>> <SOAP-ENV:Envelope
>> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
>> <SOAP-ENV:Header>
>> <ns0:To
>> xmlns:ns0="urn:services-qad-com:eb">http://www.w3.org/2005/08/addressing">urn:services-qad-com:eb
>> 21_live_receiver</ns0:To>
>> </SOAP-ENV:Header>
>> <SOAP-ENV:Body>
>> <maintainItemMaster xmlns="urn:schemas-qad-com:xml-services">
>> <urn:dsSessionContext
>> xmlns:urn="urn:schemas-qad-com:xml-services:common">
>> <urn:ttContext>
>> <urn:propertyQualifier>QAD</urn:propertyQualifier>
>> <urn:propertyName>version</urn:propertyName>
>> <urn:propertyValue>eB2_2</urn:propertyValue>
>> </urn:ttContext>
>> <urn:ttContext>
>> <urn:propertyQualifier>QAD</urn:propertyQualifier>
>> <urn:propertyName>domain</urn:propertyName>
>> <urn:propertyValue>NZ</urn:propertyValue>
>> </urn:ttContext>
>> </urn:dsSessionContext>
>> <dsItemMaster>
>> <itemMaster>
>> <operation>U</operation>
>> <ptPart>1063758</ptPart>
>> <ptPrice>999.99</ptPrice>
>> </itemMaster>
>> </dsItemMaster>
>> </maintainItemMaster>
>> </SOAP-ENV:Body>
>> </SOAP-ENV:Envelope>
>>
>> Craig Love
>> Progress Programmer
>>
>> Aperio Group
>> t +61 2 9794 8659 | e [email protected] | f
>>
>> a 149 Orchard Rd, Chester Hill NSW 2162 Australia | w aperiogroup.com.au
Evan Todd, modified 13 Years ago.
Re: Re: Performance Tuning QXtend
Post Date: 12/14/11 (Rhodium, 699 Posts) Recent PostsHi Michael,
further to Garys reply, for the data you are sending, definitely use the Item Cost Maintenance function instead of Item Master Maintenance. When using the UI API, every field that QXtend has to traverse costs around 30ms give or take. This is a factor of the TCP lag on a telnet screen, since this is how the UI API communicates with the QXtend Java application. So reducing the number of fields that have to be traversed will speed up processing by a large amount. This is also true where you don't want to include nodes in the Qdoc that do not add information, since QXtend will do the equivalent of F1 if there are no more fields to process. For example, in your case, if you were calling Item Master Maintenance, and you only wanted to update the Item Description field, the Qdoc would be processed much faster, because after it reached the Item Description field it would skip the remaining fields by doing an F1 until it reached the end.
This particular Qdoc also has an equivalent SI API if you have 2009SE and above. The structure of the Qdoc is exactly the same, but it has a different version number. You would find this one would take anywhere between 150ms to 1sec, depending on whether code in the backend was previously executed (since OOABL code instantiates much faster 2nd time it is run).
I will almost always disagree with Gary about the scopeTransaction setting being set to true, except in some cases. Functions with header-child relationships you MAY want to have it set so that there is full rollback on an error in the child record. But for Item Master Maintenance you should have it set to true, because you will notice when navigating through the normal UI that an error in the Item Planning frame will not rollback the data entered in the first frame, as it has been coded to work in separate transactions. This is not the functionality you would expect from a single-level API. But be aware that having scopeTransaction set to true on any Qdoc will cause the application to behave differently than it was written. This can cause performance and locking problems for all other users in the system.
Best regards
Evan
Message place holder
Forums