Forum Discussion

dubdub's avatar
dubdub
Icon for Nimbostratus rankNimbostratus
Feb 13, 2013

Performance of datagroup vs. session subtable lookup

Environment: 10.2.2 HF1 on 6900's

 

I have a VS that gets about a billion and a half hits per year. This is a highly structured environment where every application URL hosted follows a strict set of guidelines. The first subfield in the URI is going to dictate the pool selection for the request. Users may heavily use 1 to N applications on this environment, and bounce around between them at will.

 

So I have a datagroup that maps my list of available subfields to pools. The basic question I have is: given my number of requests, would it be more efficient to query the data group on each request to make a pool selection, or to essentially store the datagroup in a session subtable? I have to parse the URI on every request to see what I am dealing with; the question comes in when I have to look up the necessary pool. If I don't find that subfield in session, I can go to the datagroup to get it and then store it in session; would this be more performant than querying the data group every single time? Requests will obviously often not change that subfield as users are working with a particular application; but nothing is going to prevent them from hopping around to any of the 500+ applications I have out in this environment.

 

Been working with the timing command, but thought I would check here also :)

 

Thanks,

 

Jen

 

9 Replies

  • spark_86682's avatar
    spark_86682
    Historic F5 Account
    The datagroup will almost definitely be faster. Because they are read-only (at least from iRules' perspective), each tmm will have its own copy of the contents of the datagroup, so all the data is "right there". Entries in the session table are often stored on a different tmm than the tmm which queries for that entry, so it has to send the request to the owning tmm and wait for a response.
  • dubdub's avatar
    dubdub
    Icon for Nimbostratus rankNimbostratus
    Hi Spark,

     

     

    Thanks for the info, that makes complete sense - plus, it has the added benefit of making the iRule much easier to read (and thus maintain). I appreciate it!

     

     

    Thanks,

     

    Jen
  • hi spark,

     

     

    Entries in the session table are often stored on a different tmm than the tmm which queries for that entry, so it has to send the request to the owning tmm and wait for a response.

    is "session table" table command? is table entry not copied to all tmm?

     

     

    thanks!

     

  • spark_86682's avatar
    spark_86682
    Historic F5 Account
    Yes, the table command is how iRules accesses the session table. Table entries are not copied to all tmms, no. Each entry usually resides on one tmm.
  • Table entries are not copied to all tmms, no. Each entry usually resides on one tmm.thanks but all table entries do not have to reside on one tmm (it is not like subtable entries), do they?
  • spark_86682's avatar
    spark_86682
    Historic F5 Account
    Table entries are distributed across all TMMs, yes. Subtables are as well (meaning, subtable "foo" might be on a different TMM than subtable "bar"), but all entries in a subtable are on the same TMM, as you correctly state.
  • thanks as usual, spark!

     

     

    just a quick simple question, in case of viprion using within-chassis mirroring, is table entry synchronized to other blade? i mean when blade is down, is that table entry still available?
  • spark_86682's avatar
    spark_86682
    Historic F5 Account
    Yes, when using intra-cluster mirroring, session table entries are mirrored to other blades.