These settings help PostgreSQL use memory efficiently to run queries faster without using too much system memory.
Work_mem and effective_cache_size tuning in PostgreSQL
Start learning this pattern below
Jump into concepts and practice - no test required
SET work_mem = 'value'; SHOW work_mem; -- To set effective_cache_size, edit postgresql.conf: -- effective_cache_size = 'value' -- Requires server restart SHOW effective_cache_size;
work_mem is memory used for internal operations like sorting and hashing per query operation.
effective_cache_size estimates how much memory is available for disk caching by the OS and PostgreSQL.
SET work_mem = '4MB'; SHOW work_mem;
-- Edit postgresql.conf: -- effective_cache_size = 2GB -- Requires server restart SHOW effective_cache_size;
-- In postgresql.conf file: work_mem = 8MB effective_cache_size = 4GB
This example sets work_mem to 8MB for the current session, then shows both work_mem and effective_cache_size (configured in postgresql.conf).
SET work_mem = '8MB'; SHOW work_mem; SHOW effective_cache_size;
Setting work_mem too high can cause your server to run out of memory if many queries run at once.
effective_cache_size does not allocate memory but helps PostgreSQL plan queries better.
Always test changes in a safe environment before applying to production.
work_mem controls memory for sorting and joining in queries.
effective_cache_size helps PostgreSQL estimate available cache memory.
Proper tuning improves query speed and server stability.
Practice
work_mem setting control in PostgreSQL?Solution
Step 1: Understand the role of
work_memwork_memis the memory PostgreSQL uses for internal operations like sorting and joining during query execution.Step 2: Differentiate from other memory settings
Other settings likeeffective_cache_sizerelate to cache estimation, not sorting or joining memory.Final Answer:
The amount of memory used for sorting and joining operations during query execution -> Option AQuick Check:
work_mem= sorting/join memory [OK]
- Confusing work_mem with effective_cache_size
- Thinking work_mem controls total server memory
- Assuming work_mem affects connection limits
effective_cache_size to 4GB in PostgreSQL's configuration file?Solution
Step 1: Check PostgreSQL config syntax for memory sizes
PostgreSQL accepts memory sizes with units like KB, MB, GB without quotes.Step 2: Validate each option
effective_cache_size = 4GB uses correct syntax: number + unit without quotes. effective_cache_size = '4GB' uses quotes (invalid). effective_cache_size = 4000MB uses MB but 4000MB is less than 4GB. effective_cache_size = 4g uses lowercase 'g' which is invalid; units must be uppercase.Final Answer:
effective_cache_size = 4GB -> Option DQuick Check:
Config memory size = number + uppercase unit [OK]
- Adding quotes around memory size values
- Using lowercase units like 'g' instead of 'GB'
- Confusing MB and GB values
work_mem = '2MB' and a query performing 3 sorts simultaneously, what is the total memory PostgreSQL may use for sorting?Solution
Step 1: Understand work_mem usage per operation
Each sort operation can use up towork_memmemory independently.Step 2: Calculate total memory for 3 sorts
3 sorts x 2MB each = 6MB total memory used for sorting.Final Answer:
6MB -> Option AQuick Check:
work_mem x number of sorts = total memory [OK]
- Assuming work_mem is total for all operations
- Adding instead of multiplying memory sizes
- Ignoring simultaneous operation count
effective_cache_size set too low. What problem might this cause?Solution
Step 1: Understand effective_cache_size role
This setting helps PostgreSQL estimate how much OS cache is available for data pages.Step 2: Consequence of low effective_cache_size
If set too low, PostgreSQL thinks less cache is available, so it may avoid index scans or other efficient plans, choosing slower ones.Final Answer:
PostgreSQL may underestimate available cache and choose inefficient query plans -> Option CQuick Check:
Low effective_cache_size = conservative query plans [OK]
- Confusing effective_cache_size with work_mem
- Assuming server crashes from low effective_cache_size
- Thinking it limits connection count
work_mem and effective_cache_size for a workload with many concurrent queries doing large sorts. Which is the best tuning approach?Solution
Step 1: Balance work_mem for concurrent large sorts
Settingwork_memtoo high risks memory exhaustion with many queries; moderate value like 16MB balances performance and memory use.Step 2: Set effective_cache_size to reflect OS cache
With 32GB RAM, settingeffective_cache_sizehigh (e.g., 24GB) helps PostgreSQL plan queries assuming ample cache.Step 3: Evaluate other options
Setwork_memvery high (e.g., 1GB) andeffective_cache_sizelow (e.g., 4GB) risks memory overuse; Set bothwork_memandeffective_cache_sizevery low to save memory wastes performance; Setwork_memlow (e.g., 1MB) andeffective_cache_sizemoderate (e.g., 8GB) underestimates cache and limits sort memory.Final Answer:
Set work_mem moderately (e.g., 16MB) and effective_cache_size high (e.g., 24GB) -> Option BQuick Check:
Moderate work_mem + high effective_cache_size = balanced tuning [OK]
- Setting work_mem too high causing memory exhaustion
- Setting effective_cache_size too low causing bad plans
- Ignoring concurrent query memory needs
