We are running a jPOS-EE Windows implementation that crossed the 300 TPS threshold last week in some throughput testing conducted by our client. The application is deployed on two quad-processor 2.7 GHz Xeon servers (manufacturer: IBM) each with 2 GB of memory and running Windows Advanced Server 2003.
On one server, jPOS-EE is running smoothly as a Windows service. It listens to our client’s 3,500 stores via a TCP/IP connection. On the other server, we are running a copy of MS SQL Server (our client’s enterprise DB of choice). jPOS-EE makes calls to SQL Server through the jTDS driver.
The transaction mix in the throughput test was all internal (i.e., nothing switched out for faux-authorization) because these are the most resource consumptive varieties. For each transaction, our application validates store, terminal, card and cardholder on respective SQL Server tables and updates a tran log with a result. Througput the test, the new jPOS-EE Web interface was available to get real-time feedback on the test’s progress (this impressed our client a great deal).
We suspect throughput would be higher if the transaction mix consisted of switched-out transactions like goods purchases initiated with a Debit card.
By the way, some comments on the jTDS driver – we ran some traces on SQL Server and from that perspective it’s impressive to watch the way jTDS optimizes performance – it sets up a number of temporary procedures and then makes use of them resulting in very little CPU expenditure. HOWEVER, its critical that when using jTDS in conjunction with SQL Server, you take heed of the following variable:
sendStringParametersAsUnicode (default – true)
Determines whether string parameters are sent to the SQL Server database in Unicode or in the default character encoding of the database. This seriously affects SQL Server 2000 performance since it does not automatically cast the types (as 7.0 does), meaning that if a index column is Unicode and the string is submitted using the default character encoding (or the other way around) SQLServer will perform an index scan instead of an index seek.
You MUST have this variable set to FALSE. Without it, SQL Server performance goes to Absolute Hell. On our quad-processor box, we moved CPU needles straight to 100% for the duration of the test and performance was 10-fold worse than our ultimate results (this is the reason we had the SQL Server traces on to begin with).
We are running a jPOS-EE Windows implementation that crossed the 300 TPS threshold last week in some throughput testing conducted by our client. The application is deployed on two quad-processor 2.7 GHz Xeon servers (manufacturer: IBM) each with 2 GB of memory and running Windows Advanced Server 2003.
On one server, jPOS-EE is running smoothly as a Windows service. It listens to our client’s 3,500 stores via a TCP/IP connection. On the other server, we are running a copy of MS SQL Server (our client’s enterprise DB of choice). jPOS-EE makes calls to SQL Server through the jTDS driver.
The transaction mix in the throughput test was all internal (i.e., nothing switched out for faux-authorization) because these are the most resource consumptive varieties. For each transaction, our application validates store, terminal, card and cardholder on respective SQL Server tables and updates a tran log with a result. Througput the test, the new jPOS-EE Web interface was available to get real-time feedback on the test’s progress (this impressed our client a great deal).
We suspect throughput would be higher if the transaction mix consisted of switched-out transactions like goods purchases initiated with a Debit card.
By the way, some comments on the jTDS driver – we ran some traces on SQL Server and from that perspective it’s impressive to watch the way jTDS optimizes performance – it sets up a number of temporary procedures and then makes use of them resulting in very little CPU expenditure. HOWEVER, its critical that when using jTDS in conjunction with SQL Server, you take heed of the following variable:
sendStringParametersAsUnicode (default – true)
Determines whether string parameters are sent to the SQL Server database in Unicode or in the default character encoding of the database. This seriously affects SQL Server 2000 performance since it does not automatically cast the types (as 7.0 does), meaning that if a index column is Unicode and the string is submitted using the default character encoding (or the other way around) SQLServer will perform an index scan instead of an index seek.
See – http://jtds.sourceforge.net/faq.html
You MUST have this variable set to FALSE. Without it, SQL Server performance goes to Absolute Hell. On our quad-processor box, we moved CPU needles straight to 100% for the duration of the test and performance was 10-fold worse than our ultimate results (this is the reason we had the SQL Server traces on to begin with).