Calculating how much redo log space has been used

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello PostgreSQL community,

I am helping with a benchmarking exercise using PGSQL (I chair the TPC subcommittee that has released a benchmark using PGSQL). A requirement of the benchmark is having enough log space allocated for 8 hours of running without needing to archive, back up, etc. I am trying to a) figure out how I can establish the exact space usage for the auditor; and b) how I can reduce the log space usage. Looking at iostat and pgstatspack, it looks like we will need to allocate something like 1.5TB of log space for a 5TB database, which is a huge ratio. (Yes, in the real world, we’d probably archive or ship the logs; but for benchmarking, that doesn’t work)

 

pgstatspack gives me something like below:

 

background writer stats

 checkpoints_timed | checkpoints_req | buffers_checkpoint | buffers_clean | maxwritten_clean | buffers_backend | buffers_alloc 

-------------------+-----------------+--------------------+---------------+------------------+-----------------+---------------

                22 |               0 |            6416768 |       2252636 |                0 |          280211 |       9786558

(1 row)

 

 

background writer relative stats

 checkpoints_timed | minutes_between_checkpoint | buffers_checkpoint | buffers_clean | buffers_backend | total_writes | avg_checkpoint_write 

-------------------+----------------------------+--------------------+---------------+-----------------+--------------+----------------------

 100%              |                          6 | 71%                | 25%           | 3%              | 8.659 MB/s   | 2278.000 MB

 

I can calculate how many checkpoint segments I have used from the MB/s. But is there a more direct way of seeing how/when a checkpoint segment is filled up and we move on to the next one?

 

Also, it looks like the full_page_writes parameter is the only thing that can help reduce the log usage size, but that I have to set it to 1 to avoid corruption after a system crash, which is a requirement. Another requirement is a very short, 6-minute checkpoint time, which means we will likely write the full page very often. Yes, my hands are tied!

 

Here are the relevant non-default settings:

 

shared_buffers = 18000MB           # min 128kB

temp_buffers = 2MB                 # min 800kB

maintenance_work_mem = 5MB         # min 1MB

bgwriter_delay = 10ms              # 10-10000ms between rounds

bgwriter_lru_maxpages = 200        # 0-1000 max buffers written/round

effective_io_concurrency = 10             # 1-1000; 0 disables prefetching

wal_sync_method = open_datasync           # the default is the first option

wal_buffers = 16MB                 # min 32kB, -1 sets based on shared_buffers

wal_writer_delay = 10ms                   # 1-10000 milliseconds

checkpoint_segments = 750          # in logfile segments, min 1, 16MB each

checkpoint_timeout = 6min          # range 30s-1h

checkpoint_completion_target = 0.9 # checkpoint target duration, 0.0 - 1.0

effective_cache_size = 512MB

default_statistics_target = 10000  # range 1-10000

log_destination = 'stderr'         # Valid values are combinations of

logging_collector = on                    # Enable capturing of stderr and csvlog

log_directory = 'pg_log'           # directory where log files are written,

log_filename = 'postgresql-%a.log' # log file name pattern,

log_truncate_on_rotation = on             # If on, an existing log file with the

log_rotation_age = 1d              # Automatic rotation of logfiles will

log_rotation_size = 0              # Automatic rotation of logfiles will

log_checkpoints = on

 


[Postgresql General]     [Postgresql PHP]     [PHP Users]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Yosemite]

  Powered by Linux