Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Work_mem and effective_cache_size Tuning in PostgreSQL
📖 Scenario: You are a database administrator for a small online bookstore. The database is running PostgreSQL, and you want to improve query performance by tuning memory settings.Two important settings are work_mem and effective_cache_size. These control how much memory PostgreSQL uses for sorting and caching data during queries.
🎯 Goal: Learn how to check current PostgreSQL memory settings, set new values for work_mem and effective_cache_size, and verify the changes.You will write SQL commands to view and update these settings step-by-step.
📋 What You'll Learn
Use the SHOW command to check current values of work_mem and effective_cache_size
Use the SET command to change work_mem and effective_cache_size for the current session
Use the ALTER SYSTEM SET command to change these settings permanently
Use the SELECT pg_reload_conf() command to reload configuration after permanent changes
💡 Why This Matters
🌍 Real World
Database administrators often tune memory settings to improve query speed and resource usage in PostgreSQL databases.
💼 Career
Knowing how to configure work_mem and effective_cache_size is important for roles like DBA, backend developer, and system administrator working with PostgreSQL.
Progress0 / 4 steps
1
Check current memory settings
Write two SQL commands to check the current values of work_mem and effective_cache_size using the SHOW command. Use exactly SHOW work_mem; and SHOW effective_cache_size;.
PostgreSQL
Hint
Use the SHOW command followed by the setting name and a semicolon.
2
Set new memory values for current session
Write two SQL commands to set work_mem to 64MB and effective_cache_size to 2GB for the current session using the SET command. Use exactly SET work_mem = '64MB'; and SET effective_cache_size = '2GB';.
PostgreSQL
Hint
Use the SET command with the setting name, equals sign, value in quotes, and semicolon.
3
Make memory changes permanent
Write two SQL commands to permanently set work_mem to 64MB and effective_cache_size to 2GB using the ALTER SYSTEM SET command. Use exactly ALTER SYSTEM SET work_mem = '64MB'; and ALTER SYSTEM SET effective_cache_size = '2GB';.
PostgreSQL
Hint
Use ALTER SYSTEM SET followed by the setting name, equals sign, value in quotes, and semicolon.
4
Reload configuration to apply permanent changes
Write the SQL command to reload the PostgreSQL configuration so the permanent changes take effect. Use exactly SELECT pg_reload_conf();.
PostgreSQL
Hint
Use SELECT pg_reload_conf(); to reload the config.
Practice
(1/5)
1. What does the work_mem setting control in PostgreSQL?
easy
A. The amount of memory used for sorting and joining operations during query execution
B. The total memory available for caching disk pages
C. The maximum size of a database connection pool
D. The memory allocated for background worker processes
Solution
Step 1: Understand the role of work_mem
work_mem is the memory PostgreSQL uses for internal operations like sorting and joining during query execution.
Step 2: Differentiate from other memory settings
Other settings like effective_cache_size relate to cache estimation, not sorting or joining memory.
Final Answer:
The amount of memory used for sorting and joining operations during query execution -> Option A
Quick Check:
work_mem = sorting/join memory [OK]
Hint: Remember: work_mem is per operation memory for sorting/joining [OK]
Common Mistakes:
Confusing work_mem with effective_cache_size
Thinking work_mem controls total server memory
Assuming work_mem affects connection limits
2. Which of the following is the correct way to set effective_cache_size to 4GB in PostgreSQL's configuration file?
easy
A. effective_cache_size = 4000MB
B. effective_cache_size = '4GB'
C. effective_cache_size = 4g
D. effective_cache_size = 4GB
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 D
Quick Check:
Config memory size = number + uppercase unit [OK]
Hint: Use number + uppercase unit without quotes for memory sizes [OK]
Common Mistakes:
Adding quotes around memory size values
Using lowercase units like 'g' instead of 'GB'
Confusing MB and GB values
3. Given work_mem = '2MB' and a query performing 3 sorts simultaneously, what is the total memory PostgreSQL may use for sorting?
medium
A. 6MB
B. 3MB
C. 2MB
D. 1MB
Solution
Step 1: Understand work_mem usage per operation
Each sort operation can use up to work_mem memory independently.
Step 2: Calculate total memory for 3 sorts
3 sorts x 2MB each = 6MB total memory used for sorting.
Final Answer:
6MB -> Option A
Quick Check:
work_mem x number of sorts = total memory [OK]
Hint: Multiply work_mem by number of simultaneous operations [OK]
Common Mistakes:
Assuming work_mem is total for all operations
Adding instead of multiplying memory sizes
Ignoring simultaneous operation count
4. A PostgreSQL server has effective_cache_size set too low. What problem might this cause?
medium
A. PostgreSQL will allocate too much memory for sorting operations
B. The server will crash due to memory exhaustion
C. PostgreSQL may underestimate available cache and choose inefficient query plans
D. Connections will be refused due to low cache size
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 C
Assuming server crashes from low effective_cache_size
Thinking it limits connection count
5. You have a PostgreSQL server with 32GB RAM. You want to optimize work_mem and effective_cache_size for a workload with many concurrent queries doing large sorts. Which is the best tuning approach?
hard
A. Set work_mem very high (e.g., 1GB) and effective_cache_size low (e.g., 4GB)
B. Set work_mem moderately (e.g., 16MB) and effective_cache_size high (e.g., 24GB)
C. Set both work_mem and effective_cache_size very low to save memory
D. Set work_mem low (e.g., 1MB) and effective_cache_size moderate (e.g., 8GB)
Solution
Step 1: Balance work_mem for concurrent large sorts
Setting work_mem too 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, setting effective_cache_size high (e.g., 24GB) helps PostgreSQL plan queries assuming ample cache.
Step 3: Evaluate other options
Set work_mem very high (e.g., 1GB) and effective_cache_size low (e.g., 4GB) risks memory overuse; Set both work_mem and effective_cache_size very low to save memory wastes performance; Set work_mem low (e.g., 1MB) and effective_cache_size moderate (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 B
Quick Check:
Moderate work_mem + high effective_cache_size = balanced tuning [OK]
Hint: Balance work_mem and effective_cache_size for memory and cache [OK]
Common Mistakes:
Setting work_mem too high causing memory exhaustion
Setting effective_cache_size too low causing bad plans