Re: PostgreSQL 9.2 - pg_dump out of memory when backuping a database with 300000000 large objects - Mailing list pgsql-admin

From Sergey Klochkov
Subject Re: PostgreSQL 9.2 - pg_dump out of memory when backuping a database with 300000000 large objects
Date
Msg-id 524AA7F8.20904@iqbuzz.ru
Whole thread Raw
In response to Re: PostgreSQL 9.2 - pg_dump out of memory when backuping a database with 300000000 large objects  (Sergey Klochkov <klochkov@iqbuzz.ru>)
List pgsql-admin
Stack trace:

Thread 1 (Thread 0x7ff72c4c97c0 (LWP 13086)):
#0  removeHeapElement (objs=0x1a0c90630, numObjs=<value optimized out>,
preBoundaryId=<value optimized out>, postBoundaryId=<value optimized
out>) at pg_dump_sort.c:502
#1  TopoSort (objs=0x1a0c90630, numObjs=<value optimized out>,
preBoundaryId=<value optimized out>, postBoundaryId=<value optimized
out>) at pg_dump_sort.c:415
#2  sortDumpableObjects (objs=0x1a0c90630, numObjs=<value optimized
out>, preBoundaryId=<value optimized out>, postBoundaryId=<value
optimized out>) at pg_dump_sort.c:280
#3  0x000000000041acd1 in main (argc=<value optimized out>, argv=<value
optimized out>) at pg_dump.c:747



On 01.10.2013 14:23, Sergey Klochkov wrote:
> I've upgraded to 9.2.4. The problem still persists. It consumed 10 Gb of
> RAM in 5 minutes and still grows. The dump file did not appear.
>
> On 01.10.2013 14:04, Jov wrote:
>> Try update to the latest release,I see there is a bug fix about pg_dump
>> out of memroy in 9.2.2,from the release note
>> http://www.postgresql.org/docs/devel/static/release-9-2-2.html:
>>
>>   *
>>
>>     Work around unportable behavior of malloc(0) and realloc(NULL,
>>     0) (Tom Lane)
>>
>>     On platforms where these calls return NULL, some code mistakenly
>>     thought that meant out-of-memory. This is known to have broken
>>     pg_dump for databases containing no user-defined aggregates. There
>>     might be other cases as well.
>>
>>
>> Jov
>> blog: http:amutu.com/blog <http://amutu.com/blog>
>>
>>
>> 2013/10/1 Sergey Klochkov <klochkov@iqbuzz.ru
>> <mailto:klochkov@iqbuzz.ru>>
>>
>>     Hello All,
>>
>>     While trying to backup a database of relatively modest size (160 Gb)
>>     I ran into the following issue:
>>
>>     When I run
>>     $ pg_dump -f /path/to/mydb.dmp -C -Z 9 mydb
>>
>>     File /path/to/mydb.dmp does not appear (yes, I've checked
>>     permissions and so on). pg_dump just begins to consume memory until
>>     it eats up all avaliable RAM (96 Gb total on server, >64 Gb
>>     available) and is killed by the oom killer.
>>
>>     According to pg_stat_activity, pg_dump runs the following query
>>
>>     SELECT oid, (SELECT rolname FROM pg_catalog.pg_roles WHERE oid =
>>     lomowner) AS rolname, lomacl FROM pg_largeobject_metadata
>>
>>     until it is killed.
>>
>>     strace shows that pg_dump is constantly reading a large amount of
>>     data from a UNIX socket. I suspect that it is the result of the
>>     above query.
>>
>>     There are >300000000 large objects in the database. Please don't ask
>>     me why.
>>
>>     I tried googling on this, and found mentions of pg_dump being killed
>>     by oom killer, but I failed to find anything related to the huge
>>     large objects number.
>>
>>     Is there any method of working around this issue?
>>
>>     Thanks in advance.
>>
>>     OS: CentOS 6
>>     PostgreSQL version: 9.2.1
>>     96 Gb RAM
>>
>>     PostgreSQL configuration:
>>
>>     listen_addresses = '*'          # what IP address(es) to listen on;
>>     port = 5432                             # (change requires restart)
>>     max_connections = 500                   # (change requires restart)
>>     shared_buffers = 16GB                  # min 128kB
>>     temp_buffers = 64MB                     # min 800kB
>>     work_mem = 512MB                        # min 64kB
>>     maintenance_work_mem = 30000MB          # min 1MB
>>     checkpoint_segments = 70                # in logfile segments, min
>>     1, 16MB each
>>     effective_cache_size = 50000MB
>>     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 of the
>>     log_rotation_age = 1d                   # Automatic rotation of
>>     logfiles will
>>     log_rotation_size = 0                   # Automatic rotation of
>>     logfiles will
>>     log_min_duration_statement = 5000
>>     log_line_prefix = '%t'                  # special values:
>>     autovacuum = on                         # Enable autovacuum
>>     subprocess?  'on'
>>     log_autovacuum_min_duration = 0         # -1 disables, 0 logs all
>>     actions and
>>     autovacuum_max_workers = 5              # max number of autovacuum
>>     subprocesses
>>     autovacuum_naptime =    5s              # time between autovacuum
>> runs
>>     autovacuum_vacuum_threshold = 25        # min number of row updates
>>     before
>>     autovacuum_vacuum_scale_factor = 0.1    # fraction of table size
>>     before vacuum
>>     autovacuum_vacuum_cost_delay = 7ms      # default vacuum cost
>> delay for
>>     autovacuum_vacuum_cost_limit = 1500     # default vacuum cost
>> limit for
>>     datestyle = 'iso, dmy'
>>     lc_monetary = 'ru_RU.UTF-8'                     # locale for
>>     monetary formatting
>>     lc_numeric = 'ru_RU.UTF-8'                      # locale for number
>>     formatting
>>     lc_time = 'ru_RU.UTF-8'                         # locale for time
>>     formatting
>>     default_text_search_config = 'pg_catalog.russian'
>>
>>     --
>>     Sergey Klochkov
>>     klochkov@iqbuzz.ru <mailto:klochkov@iqbuzz.ru>
>>
>>
>>     --
>>     Sent via pgsql-admin mailing list (pgsql-admin@postgresql.org
>>     <mailto:pgsql-admin@postgresql.org>)
>>     To make changes to your subscription:
>>     http://www.postgresql.org/__mailpref/pgsql-admin
>>     <http://www.postgresql.org/mailpref/pgsql-admin>
>>
>>
>

--
Sergey Klochkov
klochkov@iqbuzz.ru


pgsql-admin by date:

Previous
From: Sergey Klochkov
Date:
Subject: Re: PostgreSQL 9.2 - pg_dump out of memory when backuping a database with 300000000 large objects
Next
From: Giuseppe Broccolo
Date:
Subject: Re: PostgreSQL 9.2 - pg_dump out of memory when backuping a database with 300000000 large objects