Showing posts with label Interview Questions. Show all posts
Showing posts with label Interview Questions. Show all posts

Friday, January 9, 2026

Interview Question 20 : What are kernel parameters and why to set them ?

What are Kernel Parameters?

Kernel parameters are tunable settings of the operating system kernel (the core part of Linux/UNIX that manages CPU, memory, processes, I/O, and networking).

They control how the OS allocates resources and behaves under load.

Think of the kernel as the brain of the OS, and kernel parameters as knobs and switches you adjust to optimize behavior.


Simple analogy

Imagine the OS as a traffic controller:

  • Kernel parameters decide:
    • How many cars (processes) can enter
    • How much fuel (memory) each car gets
    • How wide the roads (network buffers) are
    • How many lanes are reserved for emergency services (DBA privileges, file handles, shared memory)

Without tuning these:

  • Traffic jams happen (performance issues)
  • Cars may crash (out-of-memory, failures)
  • Emergency services get blocked (database outages)

Why do we need to set kernel parameters?

1. Defaults are generic, not workload-aware

Linux ships with safe, general‑purpose defaults, suitable for:

  • Desktops
  • Light servers
  • Small applications

Databases like Oracle, PostgreSQL, MySQL, DB2 require:

  • Large shared memory
  • Many semaphores
  • High file descriptors
  • Fast IPC (Inter‑Process Communication)

✅ Kernel tuning adapts Linux for database workloads.


2. Databases use OS resources directly

Databases are heavy OS consumers:

Database ComponentOS Resource Used
Buffer cache / SGAShared memory
Background processesProcess limits
User connectionsSemaphores
Datafiles / redoFile descriptors
Network sessionsTCP buffers

If kernel limits are too low:

  • Database won’t start
  • Or it will start and crash under load

3. Prevent runtime failures (very important in prod)

Without proper kernel settings, you may see errors like:

  • ORA-27102: out of memory
  • ORA-27300: OS system dependent operation:semget failed
  • ORA-00020: maximum number of processes exceeded
  • Too many open files

✅ Kernel parameters prevent these before they happen.


4. Performance and stability

Correct kernel values:

  • Reduce context switching
  • Improve IPC speed
  • Prevent memory starvation
  • Stabilize high concurrency workloads

This directly impacts:

  • TPS
  • Query latency
  • Batch job runtime
  • Overall uptime

Common kernel parameters (database-focused)

Below are typical kernel areas you tune.


1. Shared memory (very critical for Oracle)

kernel.shmmni # Number of shared memory segments
kernel.shmmax # Max size of a single shared memory segment
kernel.shmall # Total shared memory (pages)

Used by:

  • Oracle SGA
  • Locking and caching mechanisms

2. Semaphores (process coordination)

kernel.sem = SEMMSL SEMMNS SEMOPM SEMMNI

Controls:

  • How many DB sessions can run concurrently
  • Coordination between background processes

Low semaphore values = database startup or connection failures.


3. File descriptors

fs.file-max

Databases open:

  • Datafiles
  • Redo logs
  • Control files
  • Archive logs

Each is a file handle.


4. Network tuning (for client-heavy systems)

net.core.rmem_max
net.core.wmem_max
net.ipv4.ip_local_port_range

Impacts:

  • Connection scalability
  • Latency
  • Throughput

5. Process limits

kernel.pid_max

DBs spawn many:

  • Background processes
  • Server processes
  • Parallel execution slaves

How kernel parameters are set

Temporary (lost after reboot)

sysctl -w kernel.shmmax=68719476736


Permanent (recommended)

Edit:

/etc/sysctl.conf
# or
/etc/sysctl.d/99-oracle.conf

Apply:

sysctl -p

✅ Always use persistent configuration in production.


Why Oracle insists on kernel tuning

Oracle performs prechecks during installation because:

  • The database depends on these resources
  • Incorrect settings cause data corruption risks
  • Performance problems are often OS‑level, not SQL‑level

If prechecks fail and you “ignore all”: 👉 You are accepting production risk.


Relationship with SOX / audits (important for you)

From an audit perspective:

Kernel parameters support:

  • Availability control (system stability)
  • Capacity management
  • Change management (controlled OS tuning)
  • Risk mitigation

Best practice:

  • Document tuned values
  • Version control /etc/sysctl.conf
  • Change ticket for OS tuning

Real‑world DBA best practice

✅ Tune kernel parameters before database installation
✅ Follow vendor recommendations (Oracle, Red Hat)
✅ Re‑evaluate after:

  • HW upgrades
  • Memory changes
  • Major DB version upgrades


  • Kernel parameters = OS behavior controls
  • Why set them?
    • Databases need more resources than defaults allow
    • Prevent failures and performance issues
  • Not tuning them = production risk
  • Mandatory for enterprise DB workloads

1. Shared Memory Parameters (‼️ Critical for Oracle)

Oracle’s SGA is implemented using shared memory.
If these are wrong → DB won’t start or will crash under load.

kernel.shmmax

👉 Max size of one shared memory segment

kernel.shmmax = 68719476736 # example: 64 GB

Why needed

  • Oracle usually creates one large segment for SGA
  • shmmax must be >= SGA size

❌ Too low → ORA-27102: out of memory

✅ Best practice
Set to ~50–75% of physical RAM


kernel.shmall

👉 Total shared memory available (in pages, not bytes)

kernel.shmall = 16777216

Formula:

(shmmax / PAGE_SIZE)

Typically PAGE_SIZE = 4096 bytes.

Why needed

  • Controls overall shared memory capacity
  • Prevents system-wide exhaustion

kernel.shmmni

👉 Number of shared memory segments system-wide

kernel.shmmni = 4096

Why needed

  • Multiple DBs or IPC consumers
  • Rarely a bottleneck, but must be sufficient

2. Semaphore Parameters (Concurrency Control)

Semaphores manage process coordination (sessions, background processes).

kernel.sem

kernel.sem = 250 64000 100 4096

Meaning (very important):

ValueMeaning
SEMMSLMax semaphores per set
SEMMNSTotal system semaphores
SEMOPMMax ops per semop call
SEMMNIMax semaphore sets

Why Oracle needs this

  • Each DB session consumes semaphores
  • Parallel exec + background processes multiply usage

❌ Too low →

  • ORA-27300
  • Random login failures
  • DB startup failures

✅ Rule of thumb
SEMMNS ≥ (processes × 2)


3. File Descriptor Limits (Very Common Failure)

Oracle opens a LOT of files:

  • Datafiles
  • Redo
  • Control files
  • Archive logs
  • Trace files

fs.file-max

fs.file-max = 6815744

This is system‑wide.

Also check user limits:

ulimit -n

Why needed

  • Prevent “too many open files”
  • Critical during backup, RMAN, heavy I/O

✅ Typical prod value
1M – 10M (depends on server size)


4. Process & PID Limits

kernel.pid_max

kernel.pid_max = 4194304

Why needed

  • Oracle uses:
    • Dedicated server processes
    • Background processes
    • Parallel slaves

Low PID limit → OS refuses process creation.


5. Network Parameters (Client‑Heavy Systems)

Important for:

  • OLTP apps
  • Microservices
  • JDBC-heavy loads

Port range

net.ipv4.ip_local_port_range = 9000 65500

Why needed

  • Each client connection needs a port
  • Prevents port exhaustion

Buffer sizes

net.core.rmem_max = 4194304
net.core.wmem_max = 1048576

Why needed

  • Faster network IO
  • Less packet loss
  • Better throughput

6. HugePages (Highly Recommended for Oracle)

Not a kernel param per se, but kernel memory behavior.

Why HugePages

✅ Lock SGA in memory
✅ Prevent swapping
✅ Reduce page table overhead
✅ Improve performance & stability

Oracle strongly recommends this.

Example:

vm.nr_hugepages = 32768

❌ Without HugePages:

  • SGA may swap
  • Random latency spikes
  • Performance degradation

How to Set Parameters (Production-Safe Way)

Create a dedicated config file

/etc/sysctl.d/99-oracle.conf

Example:

kernel.shmmax = 68719476736
kernel.shmall = 16777216
kernel.shmmni = 4096
kernel.sem = 250 64000 100 4096
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500

Apply:

sysctl -p /etc/sysctl.d/99-oracle.conf

✅ Version‑controllable
✅ Audit‑friendly
✅ No conflict with OS defaults


Oracle 19c / 21c – Recommended Practical Minimums

AreaMinimum Safe Value
Shared MemoryEnough for SGA
SemaphoresProcesses × 2
File handles≥ 1M
HugePagesEnabled
Port range≥ 50K ports

SOX / Audit Mapping (Important for You)

Kernel tuning supports:

Control AreaHow
AvailabilityPrevents crashes / resource exhaustion
Change MgmtControlled sysctl changes
Capacity MgmtPlanned memory allocation
Incident PreventionAvoids known Oracle failures

✅ Best practice:

  • Change ticket for /etc/sysctl.d/99-oracle.conf
  • Baseline comparison during audits


  • Kernel parameters define how OS supports Oracle
  • Defaults ≠ database‑ready
  • Incorrect values = startup failures, outages, performance issues
  • Correct tuning = stable, predictable DB behavior


✅ Oracle 19c – Production Kernel Parameter Template (Linux)

Create one dedicated file (best practice):


/etc/sysctl.d/99-oracle.conf


🔹 Core Oracle Kernel Parameters

# ===============================
# Oracle 19c Kernel Parameters
# ===============================

# Shared Memory
kernel.shmmax = 68719476736
kernel.shmall = 16777216
kernel.shmmni = 4096

# Semaphores
kernel.sem = 250 64000 100 4096

# File descriptors
fs.file-max = 6815744

# Process IDs
kernel.pid_max = 4194304

# Network tuning
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

# Memory management
vm.swappiness = 1
vm.dirty_background_ratio = 3
vm.dirty_ratio = 15


Apply:

sysctl -p /etc/sysctl.d/99-oracle.conf

✅ Persistent
✅ Upgrade‑safe
✅ Audit‑friendly
✅ Oracle‑recommended structure


✅ How to Adjust These Values (Correctly)

kernel.shmmax

  • Set to 50–75% of physical RAM
  • Example:
    • 128 GB RAM → shmmax ≈ 96GB
echo $((96 * 1024 * 1024 * 1024))

kernel.shmall

Formula:

shmmax / OS_PAGE_SIZE

Check page size:

getconf PAGE_SIZE


Semaphores (kernel.sem)

Rule of thumb:

SEMMNS ≥ processes × 2

If processes=2000:

SEMMNS ≥ 4000

Oracle safe defaults already exceed this.


✅ HugePages Configuration (Strongly Recommended)

Why HugePages matter for Oracle

✅ Prevents SGA swapping
✅ Better performance & stability
✅ Required for serious production systems

Check required HugePages

grep Huge /proc/meminfo

From Oracle:

$ORACLE_HOME/bin/oracle -X

Then set:

vm.nr_hugepages = <calculated value>


✅ Oracle OS User Limits (Mandatory)

Edit:

/etc/security/limits.d/oracle.conf

oracle soft nproc 16384
oracle hard nproc 16384
oracle soft nofile 1024000
oracle hard nofile 1024000
oracle soft stack 10240
oracle hard stack 32768

Verify:

su - oracle
ulimit -a

✅ Pre‑Installation OS Checklist (DBA‑Grade)

1️⃣ OS validation

  • ✅ Certified Linux version
  • ✅ Correct kernel version
  • ✅ Swap ≥ RAM (or HugePages enabled)

2️⃣ User & groups

oracle:oinstall,dba

Optional for 19c+:

  • backupdba
  • dgdba
  • kmdba

3️⃣ Disable Transparent Huge Pages (THP)

cat /sys/kernel/mm/transparent_hugepage/enabled

Set permanently:

transparent_hugepage=never


4️⃣ SELinux & Firewall

  • SELinux → permissive or disabled
  • Firewall → allow DB listener ports

5️⃣ Filesystem mount options

For database files:

noatime,nodiratime


✅ SOX / Audit Mapping (Very Important)

Control AreaMapping
AvailabilityPrevents kernel resource exhaustion
Change MgmtControlled /etc/sysctl.d change
Capacity MgmtDocumented memory allocation
Incident ReductionAvoids known Oracle outages

✅ Keep:

  • Change request
  • Before/after sysctl snapshot
  • Approval record


Interview Question 20 : What are kernel parameters and why to set them ?

What are Kernel Parameters? Kernel parameters are tunable settings of the operating system kernel (the core part of Linux/UNIX that manage...