Sql-server – One NUMA node uses all memory

memorynumasql serversql-server-2012

I am running a SQL 2012 SP3 CU9 Standard server with 2 CPU's each having 4 cores (hyperthreading enabled). I have 384 GB RAM (Yes I know that I cannot use it all in SQL standard). Lock pages in memory is enabled.

My problem is that one of the CPU nodes seems to allocate all memory leaving just a little for the secound CPU node, causing one of the nodes to have a very low PLE and the other one a high PLE.

Did I configure something wrong?

enter image description here

enter image description here

Best Answer

When it comes to CPU core usage, Standard Edition starts with the first NUMA node. Whenever it exhausts the available licensing (2016 & newer, it's 4 sockets or 24 cores, whichever comes first - 2014 & prior, it's 4 sockets or 16 cores, whichever comes first), then it doesn't use the remaining cores.

Here's the tricky part: if it exhausts licensing, and whole NUMA nodes remain with zero cores activated, then that entire NUMA node is offline - unusable for CPU work or memory. I've blogged about that in more detail here.

You asked about memory, and I have a hunch (although I don't have a server handy to prove it) that it might work the same way. If the first NUMA node contains 128GB or more of memory, then that might be the vast majority of memory in use.

It's a very rare edge case, and I wouldn't expect to see any guidance from Microsoft to confirm or deny this. (It's certainly not something they'd test as part of mainstream delivery - if you've got 384GB RAM, you'd wanna use Enterprise Edition instead.)

I'm stretching to think about how you might disable this behavior, other than playing around with soft NUMA.