Bird
Raised Fist0
PostgreSQLquery~5 mins

Work_mem and effective_cache_size tuning in PostgreSQL - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

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
Recall & Review
beginner
What does the work_mem setting control in PostgreSQL?

work_mem controls the amount of memory used for internal sort operations and hash tables before writing to disk. Increasing it can speed up queries that need sorting or hashing.

Click to reveal answer
beginner
What is the purpose of effective_cache_size in PostgreSQL?

effective_cache_size estimates how much memory is available for disk caching by the operating system and PostgreSQL. It helps the query planner decide if using an index is likely to be fast.

Click to reveal answer
intermediate
How does increasing work_mem affect query performance?

Increasing work_mem allows larger operations to happen in memory, reducing slow disk writes. But setting it too high can cause memory exhaustion if many queries run simultaneously.

Click to reveal answer
intermediate
Why should effective_cache_size be set to a value close to available OS cache?

Because it tells PostgreSQL how much data it can expect to find in the OS cache. A realistic value helps the planner choose efficient query plans, like using indexes when data is likely cached.

Click to reveal answer
advanced
What is a safe approach to tuning work_mem and effective_cache_size?

Start with conservative values, monitor query performance and memory usage, then gradually adjust. For work_mem, consider workload concurrency. For effective_cache_size, estimate OS cache size realistically.

Click to reveal answer
What does increasing work_mem primarily improve?
ADisk space for storing tables
BSorting and hashing operations in queries
CNetwork bandwidth for connections
DNumber of concurrent connections
What does effective_cache_size represent?
AEstimated memory available for disk caching by OS and PostgreSQL
BSize of the largest table in the database
CMaximum memory PostgreSQL can use for connections
DMemory available for PostgreSQL's internal cache only
What risk comes from setting work_mem too high?
AIndexes will be ignored
BDisk space will run out
CQueries will run slower
DMemory exhaustion if many queries run at once
Why is it important to set effective_cache_size realistically?
ATo avoid PostgreSQL crashing
BTo limit the number of connections
CTo help the query planner choose efficient plans
DTo increase disk space
Which of these is a good first step when tuning work_mem and effective_cache_size?
AStart with conservative values and monitor performance
BDisable caching completely
CSet both to maximum values immediately
DIgnore <code>effective_cache_size</code> and only tune <code>work_mem</code>
Explain what work_mem and effective_cache_size do in PostgreSQL and why tuning them matters.
Think about memory use during query execution and how PostgreSQL plans queries.
You got /4 concepts.
    Describe a safe approach to adjusting work_mem and effective_cache_size for better database performance.
    Focus on careful testing and gradual tuning.
    You got /5 concepts.

      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

      1. 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.
      2. Step 2: Differentiate from other memory settings

        Other settings like effective_cache_size relate to cache estimation, not sorting or joining memory.
      3. Final Answer:

        The amount of memory used for sorting and joining operations during query execution -> Option A
      4. 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

      1. Step 1: Check PostgreSQL config syntax for memory sizes

        PostgreSQL accepts memory sizes with units like KB, MB, GB without quotes.
      2. 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.
      3. Final Answer:

        effective_cache_size = 4GB -> Option D
      4. 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

      1. Step 1: Understand work_mem usage per operation

        Each sort operation can use up to work_mem memory independently.
      2. Step 2: Calculate total memory for 3 sorts

        3 sorts x 2MB each = 6MB total memory used for sorting.
      3. Final Answer:

        6MB -> Option A
      4. 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

      1. Step 1: Understand effective_cache_size role

        This setting helps PostgreSQL estimate how much OS cache is available for data pages.
      2. 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.
      3. Final Answer:

        PostgreSQL may underestimate available cache and choose inefficient query plans -> Option C
      4. Quick Check:

        Low effective_cache_size = conservative query plans [OK]
      Hint: Low effective_cache_size causes conservative, slower plans [OK]
      Common Mistakes:
      • Confusing effective_cache_size with work_mem
      • 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

      1. 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.
      2. 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.
      3. 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.
      4. Final Answer:

        Set work_mem moderately (e.g., 16MB) and effective_cache_size high (e.g., 24GB) -> Option B
      5. 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
      • Ignoring concurrent query memory needs