Thread: HEAD crashes on windows when doing VACUUM ANALYZE
Hello, when running VACUUM ANALYZE on my database built on win32-x86 from yesterday's git checkout I always get this at some point during VACUUM ANALYZE: LOG: server process (PID 5880) was terminated by exception 0xC0000094 DETAIL: Failed process was running: VACUUM VERBOSE ANALYZE HINT: See C include file "ntstatus.h" for a description of the hexadecimal value. LOG: terminating any other active server processes I am not sure if it's useful to report it here, but I thought I'd do it anyway :) -Matthias
Matthias wrote: > when running VACUUM ANALYZE on my database built on win32-x86 from > yesterday's git checkout I always get this at some point during VACUUM > ANALYZE: > > LOG: server process (PID 5880) was terminated by exception 0xC0000094 > DETAIL: Failed process was running: VACUUM VERBOSE ANALYZE > HINT: See C include file "ntstatus.h" for a description of the > hexadecimal value. > LOG: terminating any other active server processes > > I am not sure if it's useful to report it here, but I thought I'd do > it anyway :) That seems to be STATUS_INTEGER_DIVIDE_BY_ZERO. Does it only happen with a certain table? Are you sure there is no data corruption? A stack trace would help: http://wiki.postgresql.org/wiki/Getting_a_stack_trace_of_a_running_Postg reSQL_backend_on_Windows Yours, Laurenz Albe
2012/8/30 Albe Laurenz <laurenz.albe@wien.gv.at>: > Matthias wrote: >> when running VACUUM ANALYZE on my database built on win32-x86 from >> yesterday's git checkout I always get this at some point during VACUUM >> ANALYZE: >> >> LOG: server process (PID 5880) was terminated by exception 0xC0000094 >> DETAIL: Failed process was running: VACUUM VERBOSE ANALYZE >> HINT: See C include file "ntstatus.h" for a description of the >> hexadecimal value. >> LOG: terminating any other active server processes >> >> I am not sure if it's useful to report it here, but I thought I'd do >> it anyway :) > > That seems to be STATUS_INTEGER_DIVIDE_BY_ZERO. > > Does it only happen with a certain table? > Are you sure there is no data corruption? > A stack trace would help: > http://wiki.postgresql.org/wiki/Getting_a_stack_trace_of_a_running_Postg > reSQL_backend_on_Windows Attached the debugger. It crashes in rangetypes_typeanalyze.c at line 186: delta = (non_empty_cnt - 1) / (num_hist - 1); According to the debugger num_hist = 1, so it divides by zero. I guess this is due to the new statistics collection for range types? -Matthias
On Thursday, August 30, 2012 06:50:13 PM Matthias wrote: > 2012/8/30 Albe Laurenz <laurenz.albe@wien.gv.at>: > > Matthias wrote: > >> when running VACUUM ANALYZE on my database built on win32-x86 from > >> yesterday's git checkout I always get this at some point during VACUUM > >> ANALYZE: > >> > >> LOG: server process (PID 5880) was terminated by exception 0xC0000094 > >> DETAIL: Failed process was running: VACUUM VERBOSE ANALYZE > >> HINT: See C include file "ntstatus.h" for a description of the > >> hexadecimal value. > >> LOG: terminating any other active server processes > >> > >> I am not sure if it's useful to report it here, but I thought I'd do > >> it anyway :) > > > > That seems to be STATUS_INTEGER_DIVIDE_BY_ZERO. > > > > Does it only happen with a certain table? > > Are you sure there is no data corruption? > > A stack trace would help: > > http://wiki.postgresql.org/wiki/Getting_a_stack_trace_of_a_running_Postg > > reSQL_backend_on_Windows > > Attached the debugger. > > It crashes in rangetypes_typeanalyze.c at line 186: > > delta = (non_empty_cnt - 1) / (num_hist - 1); > > According to the debugger num_hist = 1, so it divides by zero. Its curious though that the SIGFPE isn't properly cought though. That would only lead to a different error, but ... Postgres does install a handler for it. What happens if you run "SELECT -2147483648/-1;"? Greetings, Andres -- Andres Freund http://www.2ndQuadrant.com/PostgreSQL Development, 24x7 Support, Training & Services
On 30.08.2012 19:50, Matthias wrote: > It crashes in rangetypes_typeanalyze.c at line 186: > > delta = (non_empty_cnt - 1) / (num_hist - 1); > > According to the debugger num_hist = 1, so it divides by zero. I guess > this is due to the new statistics collection for range types? Yep. Fixed, thanks for the report! I added just a check that the histogram is not created if there are less than 2 values in the sample. The corresponding code for scalars also checks that there are more than 1 distinct value, so that the histogram doesn't consist of all duplicates. We don't currently count the number of distinct values for ranges, so that would require a bit more work, but I don't think it makes much difference in practice. - Heikki
Andres Freund <andres@2ndquadrant.com> writes: > On Thursday, August 30, 2012 06:50:13 PM Matthias wrote: >> According to the debugger num_hist = 1, so it divides by zero. > Its curious though that the SIGFPE isn't properly cought though. That would > only lead to a different error, but ... Not all platforms think an integer divide-by-zero maps to SIGFPE. regards, tom lane