+1, Queries over historic should be limited.

Adding to Edin and Darrel's comment. Maxing out the heap to32G is good.

When sizing we always allow about 2-4G of memory to the OS.

In your case the system only has 36G, which almost makes this a great candidate. But what many people forget is that JVM max heap is not the max memory that the Java process will use.

total memory used = maximum heap + thread stacks + direct memory + perm gen + share libraries

So in an environment with many threads, high perm gen, you would find that you are close to the limit of the machine's capacity. Maybe 30G is a good option. Then at least it has some allowance for the extra memory demands.

As for queries... I'd say add another 32G on top of the current memory. ;)

Unless querying has changed, queries over partitioned regions would have a single node that collects all results, before passing them back to the client. So a query that runs across all nodes can potentially destroy a single node whilst collecting, serializing and sending data.

I would still use the "quick and dirty" guideline of 30% heap (in < 32G jvm) for processing and queries.

--Udo

On 30/06/15 03:35, Michael Stolz wrote:
How are you limiting the OQL queries to only some-times go to disk? Unless you are putting disk based data into separate regions from the memory based regions ALL queries have the potential to go to disk unless you have very carefully crafted queries that only hit indices.

I always question situations where people want to put more data into an In Memory Data Grid than they are willing to spend on memory. Those use-cases are usually better off with a disk based databases because the disk paging management of a disk based database is probably optimized better than Geode is when it comes to querying against disk based data.




--
Mike Stolz
Principal Technical Account Manager
Mobile: 631-835-4771

On Fri, Jun 26, 2015 at 9:24 PM, Real Wes Williams <[email protected] <mailto:[email protected]>> wrote:

    I’d like to verify best practices for setting eviction threshold
    settings. There’s not much written on it. I’m following guidelines at:
    
https://pubs.vmware.com/vfabric5/index.jsp?topic=/com.vmware.vfabric.gemfire.6.6/managing/heap_use/controlling_heap_use.html
    and hoping that they are still current.

    I have about 750GB of data, 1/2 historical on disk and 1/2 active
    in memory in a cluster of servers with 36GB RAM and 28GB heaps
    (20% overhead). The read/write ratio is about 60%/40% and lots of
    OQL queries, which need memory space to run. A small percentage of
    the queries will hit disk. I'm thinking that I want to give Java
    50% overhead.  Based on the above, here is what I am thinking:

    20% overhead between RAM limit and heap  (36GB RAM with 28GB heap)
     - why? Java needs memory for its own use outside the heap.

    -compressedOops     -why? Heap is < 32GB and this gives me more
    space. Space is more valuable than speed in this instance.
    --eviction-heap-percentage=50             - why? I want to start
    evicting around 14GB, which gives the JVM 50% headroom. I found
    that when I raised this to 70% I was getting OOM exceptions with
    several OQL queries. I'm thinking of lowering this even to 40.
    Tradeoffs?

    -CMSInitiatingOccupancyFraction=40   - why? I want the GC to be
    working when eviction starts. This is from point 3 in the above
    link under "Set the JVM's GC Tuning Parameters
    ​ "​

    --critical-heap-percentage=90


    Would you determine the above a general best-practice approach?

    *Wes Williams | Sr. **Data Engineer*
    781.606.0325 <tel:781.606.0325>
    http://pivotal.io/big-data/pivotal-gemfire



Reply via email to