In this section I am going to cover, as to how we went about analyzing the performance counter values captured and then based on the results, arriving to conclusions on the new “minimum and maximum memory settings” to be proposed for the 5 SQL instance(s) concerned.
Anyone interested in reading up the background on this, can find Part 1 – here & Part 2 – here.
We collected data on 5 SQL instances.
Instance 1:
SQL Server\Instance name | Current Minimum Memory configured on SQL instance | Current Maximum Memory configured on SQL instance |
XXXXXX\AAAABBBB01 | 1024 (MB) | 2048 (MB). RAM on system: 3 GB |
Average PLE value:
- Way below 300 for major part of the day, averaging around 75 for extended period during peak hours. ¼ of the recommended value.
- Overall average was at 150. Half the recommend value.
- Indicating tremendous memory pressure.
Average of Total Target Memory (KB):
- Remained constantly at 2048 MB throughout the monitoring period.
- Target memory averaging = to the max memory setting on SQL instance right from the onset of monitoring.
Average of Total Server Memory (KB):
- Remained constantly at 2048 MB throughout the monitoring period.
- Total = Target, with memory right up the maximum allocated level throughout the monitoring period + coupled with PLE value, strongly indicates tremendous memory pressure.
Outcome:
- Based on the above readings we decided to propose a maximum memory setting of 8192 MB, i.e. 2048 * 4 = 8192 MB.
- PLE value was also a deciding factor on implementing 2048 * 4, i.e. 4 times the value of Total Server Memory.
SQL Server\Instance name | New Minimum Memory configured on SQL instance | New Maximum Memory configured on SQL instance |
XXXXXX\AAAABBBB01 | 4096 (MB) | 8192 (MB) |
Instance 2:
SQL Server\Instance name | Current Minimum Memory configured on SQL instance | Current Maximum Memory configured on SQL instance |
YYYYYY\CCCCDDDD02 | None. Meaning no min memory configured. | None. RAM on system: 2 GB |
Average PLE value:
- Way above 300 for major part of the day, sometimes even more that 1000 – 2000 for extended period during peak hours.
- Only 3 instances each of 15 minute durations, where the average fell below 300 .
- Indicating enough memory for major part of the day, though we needed more assurance on the above 3 instances where the PLE fell below 300.
Average of Total Target Memory (KB):
- Averaged 1.6 GB to 1.7 GB throughout the monitoring period.
- Average of Target memory closing in on to the RAM availability on system = 2 GB.
Average of Total Server Memory (KB):
- Remained below Target for major part(s) throughout the monitoring period.
- Though it was below target, the difference was not above 100 MB for majority of the monitoring period. A crucial reading.
- Averaged 1.5 GB to 1.6 GB throughout the monitoring period.
- It equalled Target for those periods, where the PLE value(s) had dipped below 300.
- This indicated there had been instances when SQL was under memory pressure, though the pressure disappeared subsequently.
Outcome:
- Though not required, an increase in memory could well help the SQL instance in removing the minor, memory pressures issues seen above.
- Based on the above readings we decided to propose a maximum memory setting of 3072 MB, i.e. double the average reading of Total Server Memory.
SQL Server\Instance name | New Minimum Memory configured on SQL instance | New Maximum Memory configured on SQL instance |
YYYYYY\CCCCDDDD02 | 1024 (MB) | 3072 (MB) |
Instance 3:
SQL Server\Instance name | Current Minimum Memory configured on SQL instance | Current Maximum Memory configured on SQL instance |
ZZZZZZ\EEEEFFFF03 | None. Meaning no min memory configured. | None. RAM on system: 2.5 GB |
Average PLE value:
- Way below 300 for major part of the day, averaging around 100 for extended period during peak hours. 1/3 of the recommended value.
- Overall average was at 200.
- Indicating memory pressure.
Average of Total Target Memory (KB):
- Averaged 2.2 GB to 2.4 GB throughout the monitoring period.
- Average of Target memory closing in on to the RAM availability on system = 2.5 GB.
Average of Total Server Memory (KB):
- Total was equally Target through those period where there was a tremendous dip in PLE value.
- During times, though not many a times, when Total was < Target, the difference was not above 40 MB.
- Total was averaging 2.1 GB
- This indicated the server was under memory pressure majority of the time, though not always.
Outcome:
- Based on the above readings we decided to propose a maximum memory setting of 6144 MB, i.e. 2048 * 3 = 6144 MB.
- PLE value was also a deciding factor on implementing 2048 * 3, i.e. nearly 3 times the value of Total Server Memory.
SQL Server\Instance name | New Minimum Memory configured on SQL instance | New Maximum Memory configured on SQL instance |
ZZZZZZ\EEEEFFFF03 | 2048 (MB) | 6144 (MB) |
Instance 4:
SQL Server\Instance name | Current Minimum Memory configured on SQL instance | Current Maximum Memory configured on SQL instance |
WWWWWW\GGGGHHHH04 | 128 MB | None. RAM on system: 2 GB |
Average PLE value:
- Way above throughout the day.
- Overall average value of PLE was at 9900, many a times even above 11000. Way – way high above the required value of 300.
- No doubt, what so ever. SQL instance over here has enough / lots of memory.
Average of Total Target Memory (KB):
- Average of target was at 950 MB.
- Max value of target was 1.2 GB.
Average of Total Server Memory (KB):
- Throughout the day total, we did not have a single instance of total equalling target .
- Average of total for the day was at 800 MB
Outcome:
- Based on the above readings we decided to propose a maximum memory setting of 1024 MB.
- The high PLE value gave us enough confidence that the SQL instance can perform at an optimum level at 1024 MB.
SQL Server\Instance name | New Minimum Memory configured on SQL instance | New Maximum Memory configured on SQL instance |
WWWWWW\GGGGHHHH04 | 512 (MB) | 1024 (MB) |
So the final proposed SQL instance layout with max memory allocation on the 2 node active-active cluster was as below:
SQL Server\Instance name | Minimum Memory proposed | Maximum Memory proposed | Proposed node on cluster | Total allocated memory for SQL on a single node |
XXXXXX\AAAABBBB01 | 4096 (MB) | 8192 (MB) | Node 1 | 10240 MB |
VVVVVV\IIIIJJJJ05 | 1024 (MB) | 2048 (MB) | ||
YYYYYY\CCCCDDDD02 | 1024 (MB) | 3072 (MB) | Node 2 | 10240 MB |
ZZZZZZ\EEEEFFFF03 | 2048 (MB) | 6144 (MB) | ||
WWWWWW\GGGGHHHH04 | 512 (MB) | 1024 (MB) |
Regards
Vasudev Menon
Like us on FaceBook | Follow us on Twitter
Join the fastest growing SQL Server group on FaceBook
Hi Vasu, just skimmed through all the 3 blog posts realated to Memory pressure analysis – though I have some questions, I must say this series has been excellent. Very good learning for our audience. Great going and thanks for your valuable contribution !
Regards
Amit