We have a set of C++ applications (our backend) running on Red Hat Enterprise Linux release 3 at multiple sites. These applications receive requests from GUI clients to fetch/update the data in the database via a messaging interface. In processing these messages, the applications interact with Sybase ASE using ctlib and stored procedures. We're running Sybase15.0.3 at most sites.
We have an application also running on the Red Hat server that queries monProcessWaits every 5 seconds and lists out any application whose wait time exceeds .5 seconds in the previous period and the events it was waiting for. Every half hour the application lists the cumulative wait time for each event that has been waited for in the previous half hour. At one particular site a representative half-hour summary is as follows:
Cumulative Wait Totals
Event Id: 29 waiting for regular buffer read to complete Total Time: 249.1 Secs
Event Id: 31 waiting for buf write to complete before writing Total Time: 0.3 Secs
Event Id: 36 waiting for MASS to finish writing before changing Total Time: 7.2 Secs
Event Id: 41 wait to acquire latch Total Time: 1.6 Secs
Event Id: 51 waiting for last i/o on MASS to complete Total Time: 7.7 Secs
Event Id: 52 waiting for i/o on MASS initated by another task Total Time: 2.8 Secs
Event Id: 54 waiting for write of the last log page to complete Total Time: 7.8 Secs
Event Id: 55 wait for i/o to finish after writing last log page Total Time: 52.8 Secs
Event Id: 124 wait for mass read to finish when getting page Total Time: 33.4 Secs
Event Id: 150 waiting for a lock Total Time: 12 Secs
Event Id: 214 waiting on run queue after yield Total Time: 23 Secs
Event Id: 215 waiting on run queue after sleep Total Time: 1 Secs
Event Id: 251 waiting for network send to complete Total Time: 366.4 Secs
Event Id: 260 waiting for date or time in waitfor command Total Time: 20.9 Secs
The most waited-for event is 251. A couple of questions in this regard:
- As I understand it, this event occurs when a requesting application sends a transaction to ASE and the ASE process, after completing the request, is forced to wait while trying to send the response data back across the network to the requesting application. Is this a correct understanding?
- My second question is what kind of configuration/tuning can I do to lessen the amount of time waiting for this event? Per Sybase, I should check the average packet size in monNetworkIO and monProcessNetIO as increasing the client app's network packet size may improve performance. What about adding additional network memory? Will that help?
Thanks for any help.