Thursday, 19 June 2025

Filled under:

 #!/bin/bash


SGA_TARGET_GB=128

SGA_TARGET_KB=$((SGA_TARGET_GB * 1024 * 1024))


echo "🔍 Oracle SGA Feasibility Check (Target: ${SGA_TARGET_GB} GB)"

echo "-------------------------------------------------------------"


# Get total system memory

TOTAL_MEM_KB=$(grep MemTotal /proc/meminfo | awk '{print $2}')

TOTAL_MEM_GB=$((TOTAL_MEM_KB / 1024 / 1024))

echo "🧠 Total Physical Memory: ${TOTAL_MEM_GB} GB"


# Get HugePages info

HP_SIZE_KB=$(grep Hugepagesize /proc/meminfo | awk '{print $2}')

HP_TOTAL=$(grep HugePages_Total /proc/meminfo | awk '{print $2}')

HP_FREE=$(grep HugePages_Free /proc/meminfo | awk '{print $2}')

HP_RSVD=$(grep HugePages_Rsvd /proc/meminfo | awk '{print $2}')


# Derived values

HP_TOTAL_KB=$((HP_TOTAL * HP_SIZE_KB))

HP_FREE_KB=$((HP_FREE * HP_SIZE_KB))

REQUIRED_HUGEPAGES=$((SGA_TARGET_KB / HP_SIZE_KB))


echo "📦 HugePage Size: $((HP_SIZE_KB / 1024)) MB"

echo "📦 HugePages Configured: ${HP_TOTAL} (${HP_TOTAL_KB} KB)"

echo "📦 HugePages Free: ${HP_FREE} (${HP_FREE_KB} KB)"

echo "📐 Required HugePages for ${SGA_TARGET_GB} GB SGA: ${REQUIRED_HUGEPAGES}"


echo "-------------------------------------------------------------"


# Evaluation

if [ "$TOTAL_MEM_KB" -lt "$((SGA_TARGET_KB + 10485760))" ]; then

  echo "❌ ERROR: Not enough total system memory for ${SGA_TARGET_GB} GB SGA (plus OS needs)."

  exit 1

fi


if [ "$HP_TOTAL" -lt "$REQUIRED_HUGEPAGES" ]; then

  echo "❌ ERROR: Not enough HugePages configured."

  echo "➡️  You need at least $REQUIRED_HUGEPAGES HugePages."

  exit 1

fi


if [ "$HP_FREE" -lt "$REQUIRED_HUGEPAGES" ]; then

  echo "⚠️ WARNING: HugePages configured but not enough free pages available now."

  echo "➡️  Consider rebooting or shutting down DBs using HugePages."

  exit 1

fi


echo "✅ YES: Your server is READY for ${SGA_TARGET_GB} GB SGA allocation using HugePages!"

exit 0

0 comments:

Post a Comment