on 2012 Mar 22 9:33 PM
We have a SQL Anywhere 12 64-bit installation using the most recent 3519 EBF running under Linux. From our ETL application we get the following error though only intermittently:
Error connecting to database: (using class sybase.jdbc4.sqlanywhere.IDriver) [Sybase][JDBC Driver][SQL Anywhere]Connection error: Timeout occurred while waiting for connection response
I enabled the LOG connection parameter on the client to try and get more detailed logging. This has shown the following: Communication function sconn::receive code 4
I cannot find much information if any in the Sybase documentation on this error. I've looked at CPU, memory and IO on the db server using iostat during times we get this error and it doesn't seem to be stressed. We do have Foxhound running to monitor our Production database but haven't found any ovbious problem like blocked or excessive waiting connections. I'd appreciate any information to help further troubleshoot. Thanks.
This means that the client made a connection to the database server and then sent a packet but waited for the timeout value (30 seconds for TCP/IP, 5 minutes for shared memory) without receiving a response from the server. This could happen if the server is very busy or (for TCP/IP connections) if there is an intermittent network problem in between the two machines.
Try using the -z -ot server.out
switches on the server to see if it logs anything when this happens.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
We do have the -z -o switch on the server. I'm not sure if the -ot would log anything additional but there wasn't anything obvious on the server side logs. Can you elaborate on where to find the 30 sec. TCP timeout? I searched through all the SQL Anywhere Database administration manual. I saw the LTO timeout and the tcpip(TO) timeout but those default to 120 and 5 seconds respectively. If that timeout is tuneable, I wonder if we would get some benefit by increasing it. Thanks again for your help.
We do have the -z -o switch on the server.
Can you compare this server information to your ETL client's LOG= information? Do you see a connection coming through, or does it never make it through? You mentioned looking for TCP timeout information, so I'll assume you're using TCP/IP as the transport - is this on the same machine or between different machines?
If it's on different machines, can you run a lower-level network montioring tool between the two points (e.g. Wireshark: http://www.wireshark.org/ ) while the client is making the connection and seeing what the network response is at both ends?
What quality of TCP/IP link are you using between your servers? What hardware is between them, and can they provide any additional information?
We do get entries on the console server log that match up with the connections seen in the client LOG. Messages like "Connection ID 527423: "etl_user" connected and reused pooled connection ID 527415" and "Connection ID 527423: "etl_user" disconnected and cached connection in pool". NIC's are gigabit but ETL is on DMZ size of firewall and DB server is on LAN side connecting over TCP. Interfaces on the firewall are only 100mbps. Wireshark is the next step I will try. I've redirected our firewall logs to a syslog server but not seeing anything obvious yet on that end. Thanks.
User | Count |
---|---|
71 | |
11 | |
11 | |
10 | |
9 | |
9 | |
7 | |
6 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.