<img height="1" width="1" style="display:none;" alt="" src="https://px.ads.linkedin.com/collect/?pid=2826169&amp;fmt=gif">
Start  trial

    Start trial

      Let me show you how to optimize PostgreSQL performance by effectively tuning Background Writer parameters.

      Before we start

      PostgreSQL is a powerful, open-source relational database management system (RDBMS). Among its many components, the Background Writer plays a crucial role in maintaining database performance and ensuring data consistency.

      In this article, we'll delve into the Background Writer's purpose, its key parameters, and how to tune them effectively.

      What is the PostgreSQL Background Writer?

      The Background Writer in PostgreSQL is a background process responsible for writing dirty pages (modified data pages) from the shared buffer pool to the disk. This process helps to manage the workload and maintain system performance by reducing the need for backends (individual database connections) to perform writes during transaction processing. Essentially, it offloads the work of writing data to the disk, allowing queries and transactions to execute more quickly.

      Key parameters for tuning the Background Writer

      Tuning the Background Writer involves adjusting certain configuration parameters in the postgresql.conf file. Here are the most important parameters:

      • bgwriter_delay
      • bgwriter_lru_maxpages
      • bgwriter_lru_multiplier

      Let's explore each of these parameters in detail.

      bgwriter_delay

      Definition

      Specifies the delay between successive Background Writer checks.

      Default

      200 milliseconds

      Range

      10 milliseconds to 10 seconds

      Usage

      The bgwriter_delay parameter controls how frequently the Background Writer process wakes up to perform its tasks.

      A lower value means the Background Writer will check and write dirty pages more frequently, while a higher value will reduce the frequency.

      Example

      bgwriter_delay = 100ms

      In this example, the Background Writer will check for dirty pages every 100 milliseconds. If your database workload involves frequent updates, reducing this delay can help spread out the write load and improve performance.

      bgwriter_lru_maxpages

      Definition

      Specifies the maximum number of dirty pages the Background Writer will write in one round.

      Default

      100 pages

      Range

      0 to 1000 pages

      Usage

      The bgwriter_lru_maxpages parameter limits the number of dirty pages written to the disk during each cycle.

      Increasing this value allows the Background Writer to handle more dirty pages per round, which can be beneficial for workloads with a high rate of data modification.

      Example

      bgwriter_lru_maxpages = 200

      Here, the Background Writer is allowed to write up to 200 dirty pages per cycle.

      If your system has sufficient I/O capacity, increasing this value can help reduce the number of dirty pages in the buffer pool and improve query performance.

      bgwriter_lru_multiplier

      Definition

      Specifies a multiplier that influences the number of dirty pages the Background Writer aims to keep under control.

      Default

      2.0

      Range

      0.1 to 10.0

      Usage

      The bgwriter_lru_multiplier parameter helps determine how aggressive the Background Writer should be in cleaning dirty pages.

      A higher value makes the Background Writer more aggressive, meaning it will try to keep a larger number of pages clean.

      Example

      bgwriter_lru_multiplier = 3.0

      In the example above, the Background Writer will be more aggressive in its efforts to keep pages clean.

      This can be useful for systems with heavy write loads, as it reduces the likelihood of backends encountering dirty pages that need to be written to disk during transaction processing.

      Practical example of tuning

      Let's say you have a PostgreSQL database supporting an application with heavy write operations. You've noticed performance degradation during peak hours, and you suspect that the Background Writer settings might need adjustment.

      Parameter Current   Tuned
      bgwriter_delay 200ms icon-arrow-right-blue-01 100ms
      bgwriter_lru_maxpages 100 icon-arrow-right-blue-01 300
      bgwriter_lru_multiplier 2.0 icon-arrow-right-blue-01 3.5

      By reducing bgwriter_delay, the Background Writer checks for dirty pages more frequently. Increasing bgwriter_lru_maxpages allows it to write more pages per cycle, and the higher bgwriter_lru_multiplier makes it more aggressive in keeping pages clean. These changes can help distribute the write load more evenly and improve overall system performance.

      Monitoring and adjusting

      After tuning the Background Writer parameters, it's crucial to monitor the system's performance and make further adjustments if necessary. Use PostgreSQL's built-in monitoring tools, such as pg_stat_bgwriter, to track the Background Writer's activity and its impact on the system.

      SELECT * FROM pg_stat_bgwriter;

      This query provides valuable insights into the Background Writer's performance, helping you fine-tune the parameters for optimal results.

      Conclusion

      The PostgreSQL Background Writer is a vital component for maintaining database performance, especially in write-intensive environments. By understanding and tuning the key parameters—bgwriter_delay, bgwriter_lru_maxpages, and bgwriter_lru_multiplier—you can significantly improve your system's efficiency and responsiveness.

      Remember to monitor the effects of your changes and adjust as needed to achieve the best performance for your specific workload.

       

       

      Topics: PostgreSQL, Database performance, Database management, Database optimization, Background Writer, Tuning parameters

      Receive our blog

      Search by topic

      Posts by Tag

      See all
      Learn more about the extended and unique features that
      Fujitsu Enterprise Postgres
      provides to harness your data.
      Click below to view the list of features.
      Nishchay Kothari
      Technical Consultant, Fujitsu Enterprise Postgres Center of Excellence
      Nishchay Kothari is an outstanding technical consultant with over 13 years of expertise in relational database management systems (RDBMS). Nishchay has experience with a wide range of database technologies, including PostgreSQL, SQL Server, and Oracle.
      Nishchay has positioned himself as a go-to resource for organizations wanting to optimize their database infrastructure and architectural solutions driven by his passion for addressing complicated technological challenges.

      Receive our blog

      Fill the form to receive notifications of future posts

      Search by topic

      see all >