1 Reply Latest reply on Jun 29, 2012 5:45 AM by taylorsharpe

    WAN Latency Issue - Write and Read speeds differ.

    Marc_Hussey

      Hi all

       

      We are trying to establish why we are having latency issues between our Scottish office and our office in Cheltenham.

       

      Our Filemaker solution is installed on FilemakerServer 10, made up of 2 databases. One an interface, the other just a collection of data tables. It is hosted in our Cheltenham office.

       

      We have a 20MB symmetrical fibre link at the server location, and a 10MB symmetrical fibre connection to the remote site, linked through the data centre in Scotland. Average ping times are around the 30ms mark. Server is a 2.26GHz quad core Xeon with 24GB of RAM and an Apple RAID card fitted with 7200rpm SATA drives. Remote machine is a 2.7GHz Core i5 iMac.

       

      I made a quick "Network Latency Check" scipt, so we could test latency times at Cheltenham and compare to Scotland. This script basically writes 500 records to a table, records the time, then reads each record and records the time. We are seeing huge differences in the write times. Not so much the read times.

       

      Does anyone know any reason why it is taking so long to write?

      Obviously we expect some delay from the Scottish and Cheltenham offices, but we are talking a factor of 5 or 6 times slower. Which if you're doing a lot of work, it can prove very frustrating.

      Any advice on what to try to speed up things would be great.

       

      Thanks.


      This is the script I wrote if you're interested...

      Set Error Capture [ On ]

      Set Variable [ $RecordTest; Value:500 ]

      Perform Find [ Specified Find Requests: Find Records; Criteria: zz__LatencyTesting::d_TestAutoEnter: “=” ]

      [ Restore ]

      If [ Get ( FoundCount ) = 0 ]

      Show All Records

      Delete All Records

      [ No dialog ]

      New Record/Request

      Set Field [ zz__LatencyTesting::d_TestAutoCalculate; "" ]

      Set Field [ zz__LatencyTesting::d_TestAutoDate; "" ]

      Set Field [ zz__LatencyTesting::d_TestAutoEnter; "" ]

      End If

      Set Field [ zz__LatencyTesting::g_ProcessRunning; "Write Processing 0%" ]

      Set Field [ zz__LatencyTesting::g_StartTime; Get ( CurrentTime ) ]

      Set Field [ zz__LatencyTesting::g_ReadStartTime; "" ]

      Set Field [ zz__LatencyTesting::g_ReadEndTime; "" ]

      Set Field [ zz__LatencyTesting::g_WriteStartTime; Get ( CurrentTime ) ]

      Set Field [ zz__LatencyTesting::g_WriteEndTime; "" ]

      Set Field [ zz__LatencyTesting::g_TidyUpStartTime; "" ]

      Set Field [ zz__LatencyTesting::g_TidyUpEndTime; "" ]

      Set Field [ zz__LatencyTesting::g_EndTime; "" ]

      Commit Records/Requests

      [ No dialog ]

      Refresh Window

      #Run Write Test

      Set Variable [ $i; Value:0 ]

      Loop

      Set Variable [ $i; Value:$i+1 ]

      Exit Loop If [ $i=$RecordTest ]

      New Record/Request

      Set Field [ zz__LatencyTesting::g_ProcessRunning; If ( $i < ($RecordTest / 4) ; "Write Processing 0%" ; If ( ($i > ($RecordTest / 4))

      and ($i < ($RecordTest / 2)) ; "Write Processing 25%" ; If ( ($i > ($RecordTest / 2)) and ($i < ($RecordTest / 1.3333)) ; "Write

      Processing 50%" ; If ( ($i > ($RecordTest / 1.3333)) and ($i < ($RecordTest / 1)) ; "Write Processing 75%"; "Write Processing

      100%"))) ) ]

      Commit Records/Requests

      [ No dialog ]

      Refresh Window

      End Loop

      Set Field [ zz__LatencyTesting::g_ProcessRunning; "Write Processing 100%" ]

      Set Field [ zz__LatencyTesting::g_WriteEndTime; Get ( CurrentTime ) ]

      Commit Records/Requests

      [ No dialog ]

      Refresh Window

      #Run Read Test

      Set Field [ zz__LatencyTesting::g_ReadStartTime; Get ( CurrentTime ) ]

      Set Field [ zz__LatencyTesting::g_ProcessRunning; "Read Processing 0%" ]

      Commit Records/Requests

      [ No dialog ]

      Refresh Window

      Set Variable [ $i; Value:0 ]

      Loop

      Set Variable [ $i; Value:$i+1 ]

      Exit Loop If [ $i=$RecordTest ]

      Go to Record/Request/Page [ $i+1 ]

      [ No dialog ]

      Set Variable [ $Read; Value:zz__LatencyTesting::d_TestAutoEnter ]

      Set Field [ zz__LatencyTesting::g_ProcessRunning; If ( $i < ($RecordTest / 4) ; "Read Processing 0%" ; If ( ($i > ($RecordTest / 4))

      and ($i < ($RecordTest / 2)) ; "Read Processing 25%" ; If ( ($i > ($RecordTest / 2)) and ($i < ($RecordTest / 1.3333)) ; "Read

      Processing 50%" ; If ( ($i > ($RecordTest / 1.3333)) and ($i < ($RecordTest / 1)) ; "Read Processing 75%"; "Read Processing

      100%"))) ) ]

      Commit Records/Requests

      [ No dialog ]

      Refresh Window

      End Loop

      Set Field [ zz__LatencyTesting::g_ProcessRunning; "Read Processing 100%" ]

      Set Field [ zz__LatencyTesting::g_ReadEndTime; Get ( CurrentTime ) ]

      Commit Records/Requests

      [ No dialog ]

      Refresh Window

      #Run TidyUp

      Set Field [ zz__LatencyTesting::g_TidyUpStartTime; Get ( CurrentTime ) ]

      Set Field [ zz__LatencyTesting::g_ProcessRunning; "Tidying Up" ]

      Commit Records/Requests

      [ No dialog ]

      Refresh Window

      Perform Find [ Specified Find Requests: Find Records; Criteria: zz__LatencyTesting::d_TestAutoEnter: “*” ]

      [ Restore ]

      Delete All Records

      [ No dialog ]

      Set Field [ zz__LatencyTesting::g_ProcessRunning; "Complete" ]

      Set Field [ zz__LatencyTesting::g_TidyUpEndTime; Get ( CurrentTime ) ]

      Set Field [ zz__LatencyTesting::g_EndTime; Get ( CurrentTime ) ]

        • 1. Re: WAN Latency Issue - Write and Read speeds differ.
          taylorsharpe

          If the read time are fast and the write times are very slow, it is probably because it is writing to an indexed field and FileMaker is updating the index as you go.  Try the same test, but change any fields you are writing to so that they are not indexed and I bet you see much faster write times.  However, the trade off is that your search times become much slower if you are searching for unindexed fields. 

           

          By the way, FileMaker 12 Server will give you much better WAN performance than FileMaker 10 or 11.  FileMaker 12 Server is a re-written 64 bit product that was designed to address previous versions slower WAN performance.