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 Component | OS Resource Used |
|---|---|
| Buffer cache / SGA | Shared memory |
| Background processes | Process limits |
| User connections | Semaphores |
| Datafiles / redo | File descriptors |
| Network sessions | TCP 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 memoryORA-27300: OS system dependent operation:semget failedORA-00020: maximum number of processes exceededToo 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)
Used by:
- Oracle SGA
- Locking and caching mechanisms
2. Semaphores (process coordination)
Controls:
- How many DB sessions can run concurrently
- Coordination between background processes
Low semaphore values = database startup or connection failures.
3. File descriptors
Databases open:
- Datafiles
- Redo logs
- Control files
- Archive logs
Each is a file handle.
4. Network tuning (for client-heavy systems)
Impacts:
- Connection scalability
- Latency
- Throughput
5. Process limits
DBs spawn many:
- Background processes
- Server processes
- Parallel execution slaves
How kernel parameters are set
Temporary (lost after reboot)
Permanent (recommended)
Edit:
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
shmmaxmust 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 4096Meaning (very important):
| Value | Meaning |
|---|---|
| SEMMSL | Max semaphores per set |
| SEMMNS | Total system semaphores |
| SEMOPM | Max ops per semop call |
| SEMMNI | Max 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 = 6815744This 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 value1M – 10M (depends on server size)
4. Process & PID Limits
kernel.pid_max
kernel.pid_max = 4194304Why 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
Why needed
- Each client connection needs a port
- Prevents port exhaustion
Buffer sizes
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
Example:
Apply:
sysctl -p /etc/sysctl.d/99-oracle.conf
✅ Version‑controllable
✅ Audit‑friendly
✅ No conflict with OS defaults
Oracle 19c / 21c – Recommended Practical Minimums
| Area | Minimum Safe Value |
|---|---|
| Shared Memory | Enough for SGA |
| Semaphores | Processes × 2 |
| File handles | ≥ 1M |
| HugePages | Enabled |
| Port range | ≥ 50K ports |
SOX / Audit Mapping (Important for You)
Kernel tuning supports:
| Control Area | How |
|---|---|
| Availability | Prevents crashes / resource exhaustion |
| Change Mgmt | Controlled sysctl changes |
| Capacity Mgmt | Planned memory allocation |
| Incident Prevention | Avoids 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
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
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
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
Verify:
✅ Pre‑Installation OS Checklist (DBA‑Grade)
1️⃣ OS validation
- ✅ Certified Linux version
- ✅ Correct kernel version
- ✅ Swap ≥ RAM (or HugePages enabled)
2️⃣ User & groups
Optional for 19c+:
- backupdba
- dgdba
- kmdba
3️⃣ Disable Transparent Huge Pages (THP)
Set permanently:
transparent_hugepage=never
4️⃣ SELinux & Firewall
- SELinux →
permissiveordisabled - Firewall → allow DB listener ports
5️⃣ Filesystem mount options
For database files:
noatime,nodiratime
✅ SOX / Audit Mapping (Very Important)
| Control Area | Mapping |
|---|---|
| Availability | Prevents kernel resource exhaustion |
| Change Mgmt | Controlled /etc/sysctl.d change |
| Capacity Mgmt | Documented memory allocation |
| Incident Reduction | Avoids known Oracle outages |
✅ Keep:
- Change request
- Before/after sysctl snapshot
- Approval record