Hi, It seems that Q19 from TPC-H is consistently failing with segfaults due to calling tbm_prepare_shared_iterate() with (tbm->dsa==NULL).
I'm not very familiar with how the dsa is initialized and passed around, but I only see the failures when the bitmap is constructed by a mix of BitmapAnd and BitmapOr operations. Another interesting observation is that setting force_parallel_mode=on may not be enough - there really need to be multiple parallel workers, which is why the simple query does cpu_tuple_cost=1. Attached is a bunch of files: 1) details for "full" query: * query.sql * plan.txt * backtrace.txt 2) details for the "minimal" query triggering the issue: * query-minimal.sql * plan-minimal.txt * backtrace-minimal.txt regards -- Tomas Vondra http://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Program terminated with signal 6, Aborted. #0 0x00007fe21265d1f7 in raise () from /lib64/libc.so.6 Missing separate debuginfos, use: debuginfo-install glibc-2.17-196.el7.x86_64 (gdb) bt #0 0x00007fe21265d1f7 in raise () from /lib64/libc.so.6 #1 0x00007fe21265e8e8 in abort () from /lib64/libc.so.6 #2 0x00000000008468e7 in ExceptionalCondition (conditionName=conditionName@entry=0x9d213a "!(tbm->dsa != ((void *)0))", errorType=errorType@entry=0x88fc69 "FailedAssertion", fileName=fileName@entry=0x9d2014 "tidbitmap.c", lineNumber=lineNumber@entry=800) at assert.c:54 #3 0x000000000065b04f in tbm_prepare_shared_iterate (tbm=tbm@entry=0x2b244e8) at tidbitmap.c:800 #4 0x000000000062294a in BitmapHeapNext (node=node@entry=0x2adf118) at nodeBitmapHeapscan.c:155 #5 0x0000000000616d7a in ExecScanFetch (recheckMtd=0x623050 <BitmapHeapRecheck>, accessMtd=0x622250 <BitmapHeapNext>, node=0x2adf118) at execScan.c:97 #6 ExecScan (node=0x2adf118, accessMtd=0x622250 <BitmapHeapNext>, recheckMtd=0x623050 <BitmapHeapRecheck>) at execScan.c:147 #7 0x0000000000624c75 in ExecProcNode (node=0x2adf118) at ../../../src/include/executor/executor.h:250 #8 gather_getnext (gatherstate=0x2aded50) at nodeGather.c:281 #9 ExecGather (pstate=0x2aded50) at nodeGather.c:215 #10 0x0000000000610d12 in ExecProcNode (node=0x2aded50) at ../../../src/include/executor/executor.h:250 #11 ExecutePlan (execute_once=<optimized out>, dest=0x2b09220, direction=<optimized out>, numberTuples=0, sendTuples=1 '\001', operation=CMD_SELECT, use_parallel_mode=<optimized out>, planstate=0x2aded50, estate=0x2adeb00) at execMain.c:1721 #12 standard_ExecutorRun (queryDesc=0x2a3bdf0, direction=<optimized out>, count=0, execute_once=<optimized out>) at execMain.c:363 #13 0x000000000074b50b in PortalRunSelect (portal=portal@entry=0x2a34050, forward=forward@entry=1 '\001', count=0, count@entry=9223372036854775807, dest=dest@entry=0x2b09220) at pquery.c:932 #14 0x000000000074ca18 in PortalRun (portal=portal@entry=0x2a34050, count=count@entry=9223372036854775807, isTopLevel=isTopLevel@entry=1 '\001', run_once=run_once@entry=1 '\001', dest=dest@entry=0x2b09220, altdest=altdest@entry=0x2b09220, completionTag=completionTag@entry=0x7ffc8dad21c0 "") at pquery.c:773 #15 0x000000000074875b in exec_simple_query ( query_string=0x2a96ff0 "select\n *\nfrom\n part\nwhere\n (\n p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG')\n and p_size between 1 and 5\n )\n or\n (\n p_container in ('MED BAG', 'MED B"...) at postgres.c:1099 #16 0x0000000000749a03 in PostgresMain (argc=<optimized out>, argv=argv@entry=0x2a44048, dbname=0x2a43eb0 "test", username=<optimized out>) at postgres.c:4088 #17 0x000000000047665f in BackendRun (port=0x2a37cc0) at postmaster.c:4357 #18 BackendStartup (port=0x2a37cc0) at postmaster.c:4029 #19 ServerLoop () at postmaster.c:1753 #20 0x00000000006d70d9 in PostmasterMain (argc=argc@entry=3, argv=argv@entry=0x2a14b20) at postmaster.c:1361 #21 0x00000000004774c1 in main (argc=3, argv=0x2a14b20) at main.c:228
QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Gather Workers Planned: 2 -> Parallel Bitmap Heap Scan on part Recheck Cond: (((p_size <= 5) AND (p_size >= 1) AND (p_container = ANY ('{"SM CASE","SM BOX","SM PACK","SM PKG"}'::bpchar[]))) OR ((p_container = ANY ('{"MED BAG","MED BOX","MED PKG","MED PACK"}'::bpchar[])) AND (p_size <= 10) AND (p_size >= 1))) -> BitmapOr -> BitmapAnd -> Bitmap Index Scan on part_p_size_idx Index Cond: ((p_size <= 5) AND (p_size >= 1)) -> Bitmap Index Scan on part_p_container_p_brand_p_partkey_idx Index Cond: (p_container = ANY ('{"SM CASE","SM BOX","SM PACK","SM PKG"}'::bpchar[])) -> BitmapAnd -> Bitmap Index Scan on part_p_container_p_brand_p_partkey_idx Index Cond: (p_container = ANY ('{"MED BAG","MED BOX","MED PKG","MED PACK"}'::bpchar[])) -> Bitmap Index Scan on part_p_size_idx Index Cond: ((p_size <= 10) AND (p_size >= 1)) (15 rows)
-- increase cpu_tuple_cost to force parallel query set cpu_tuple_cost = 1; select * from part where ( p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG') and p_size between 1 and 5 ) or ( p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK') and p_size between 1 and 10 );
query.sql
Description: application/sql
QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit -> Finalize Aggregate -> Gather Workers Planned: 2 -> Partial Aggregate -> Nested Loop -> Parallel Bitmap Heap Scan on part Recheck Cond: (((p_container = ANY ('{"SM CASE","SM BOX","SM PACK","SM PKG"}'::bpchar[])) AND (p_brand = 'Brand#51'::bpchar) AND (p_size <= 5) AND (p_size >= 1)) OR ((p_container = ANY ('{"MED BAG","MED BOX","MED PKG","MED PACK"}'::bpchar[])) AND (p_brand = 'Brand#54'::bpchar) AND (p_size <= 10) AND (p_size >= 1)) OR ((p_container = ANY ('{"LG CASE","LG BOX","LG PACK","LG PKG"}'::bpchar[])) AND (p_brand = 'Brand#42'::bpchar))) Filter: ((p_size >= 1) AND (((p_brand = 'Brand#51'::bpchar) AND (p_container = ANY ('{"SM CASE","SM BOX","SM PACK","SM PKG"}'::bpchar[])) AND (p_size <= 5)) OR ((p_brand = 'Brand#54'::bpchar) AND (p_container = ANY ('{"MED BAG","MED BOX","MED PKG","MED PACK"}'::bpchar[])) AND (p_size <= 10)) OR ((p_brand = 'Brand#42'::bpchar) AND (p_container = ANY ('{"LG CASE","LG BOX","LG PACK","LG PKG"}'::bpchar[])) AND (p_size <= 15)))) -> BitmapOr -> BitmapAnd -> Bitmap Index Scan on part_p_container_p_brand_p_partkey_idx Index Cond: ((p_container = ANY ('{"SM CASE","SM BOX","SM PACK","SM PKG"}'::bpchar[])) AND (p_brand = 'Brand#51'::bpchar)) -> Bitmap Index Scan on part_p_size_idx Index Cond: ((p_size <= 5) AND (p_size >= 1)) -> BitmapAnd -> Bitmap Index Scan on part_p_container_p_brand_p_partkey_idx Index Cond: ((p_container = ANY ('{"MED BAG","MED BOX","MED PKG","MED PACK"}'::bpchar[])) AND (p_brand = 'Brand#54'::bpchar)) -> Bitmap Index Scan on part_p_size_idx Index Cond: ((p_size <= 10) AND (p_size >= 1)) -> Bitmap Index Scan on part_p_container_p_brand_p_partkey_idx Index Cond: ((p_container = ANY ('{"LG CASE","LG BOX","LG PACK","LG PKG"}'::bpchar[])) AND (p_brand = 'Brand#42'::bpchar)) -> Index Scan using lineitem_l_partkey_l_quantity_l_shipmode_idx on lineitem Index Cond: ((l_partkey = part.p_partkey) AND (l_shipmode = ANY ('{AIR,"AIR REG"}'::bpchar[]))) Filter: ((l_shipinstruct = 'DELIVER IN PERSON'::bpchar) AND (((l_quantity >= '3'::double precision) AND (l_quantity <= '13'::double precision)) OR ((l_quantity >= '13'::double precision) AND (l_quantity <= '23'::double precision)) OR ((l_quantity >= '25'::double precision) AND (l_quantity <= '35'::double precision))) AND (((part.p_brand = 'Brand#51'::bpchar) AND (part.p_container = ANY ('{"SM CASE","SM BOX","SM PACK","SM PKG"}'::bpchar[])) AND (l_quantity >= '3'::double precision) AND (l_quantity <= '13'::double precision) AND (part.p_size <= 5)) OR ((part.p_brand = 'Brand#54'::bpchar) AND (part.p_container = ANY ('{"MED BAG","MED BOX","MED PKG","MED PACK"}'::bpchar[])) AND (l_quantity >= '13'::double precision) AND (l_quantity <= '23'::double precision) AND (part.p_size <= 10)) OR ((part.p_brand = 'Brand#42'::bpchar) AND (part.p_container = ANY ('{"LG CASE","LG BOX","LG PACK","LG PKG"}'::bpchar[])) AND (l_quantity >= '25'::double precision) AND (l_quantity <= '35'::double precision) AND (part.p_size <= 15)))) (25 rows)
Core was generated by `postgres: tomas test [local] SELECT '. Program terminated with signal 6, Aborted. #0 0x00007fe21265d1f7 in raise () from /lib64/libc.so.6 Missing separate debuginfos, use: debuginfo-install glibc-2.17-196.el7.x86_64 (gdb) bt #0 0x00007fe21265d1f7 in raise () from /lib64/libc.so.6 #1 0x00007fe21265e8e8 in abort () from /lib64/libc.so.6 #2 0x00000000008468e7 in ExceptionalCondition (conditionName=conditionName@entry=0x9d213a "!(tbm->dsa != ((void *)0))", errorType=errorType@entry=0x88fc69 "FailedAssertion", fileName=fileName@entry=0x9d2014 "tidbitmap.c", lineNumber=lineNumber@entry=800) at assert.c:54 #3 0x000000000065b04f in tbm_prepare_shared_iterate (tbm=tbm@entry=0x2d89610) at tidbitmap.c:800 #4 0x000000000062294a in BitmapHeapNext (node=node@entry=0x2ba6848) at nodeBitmapHeapscan.c:155 #5 0x0000000000616c5b in ExecScanFetch (recheckMtd=0x623050 <BitmapHeapRecheck>, accessMtd=0x622250 <BitmapHeapNext>, node=0x2ba6848) at execScan.c:97 #6 ExecScan (node=0x2ba6848, accessMtd=0x622250 <BitmapHeapNext>, recheckMtd=0x623050 <BitmapHeapRecheck>) at execScan.c:164 #7 0x00000000006319ca in ExecProcNode (node=0x2ba6848) at ../../../src/include/executor/executor.h:250 #8 ExecNestLoop (pstate=0x2ba6670) at nodeNestloop.c:109 #9 0x000000000061d1c9 in ExecProcNode (node=0x2ba6670) at ../../../src/include/executor/executor.h:250 #10 fetch_input_tuple (aggstate=aggstate@entry=0x2ba5fb8) at nodeAgg.c:688 #11 0x000000000061f4a7 in agg_retrieve_direct (aggstate=0x2ba5fb8) at nodeAgg.c:2313 #12 ExecAgg (pstate=0x2ba5fb8) at nodeAgg.c:2124 #13 0x0000000000624c75 in ExecProcNode (node=0x2ba5fb8) at ../../../src/include/executor/executor.h:250 #14 gather_getnext (gatherstate=0x2ba5c60) at nodeGather.c:281 #15 ExecGather (pstate=0x2ba5c60) at nodeGather.c:215 #16 0x000000000061d1c9 in ExecProcNode (node=0x2ba5c60) at ../../../src/include/executor/executor.h:250 #17 fetch_input_tuple (aggstate=aggstate@entry=0x2ba55a8) at nodeAgg.c:688 #18 0x000000000061f4a7 in agg_retrieve_direct (aggstate=0x2ba55a8) at nodeAgg.c:2313 #19 ExecAgg (pstate=0x2ba55a8) at nodeAgg.c:2124 #20 0x000000000062ae39 in ExecProcNode (node=0x2ba55a8) at ../../../src/include/executor/executor.h:250 #21 ExecLimit (pstate=0x2ba4df0) at nodeLimit.c:95 #22 0x0000000000610d12 in ExecProcNode (node=0x2ba4df0) at ../../../src/include/executor/executor.h:250 #23 ExecutePlan (execute_once=<optimized out>, dest=0x2d484f0, direction=<optimized out>, numberTuples=0, sendTuples=1 '\001', operation=CMD_SELECT, use_parallel_mode=<optimized out>, planstate=0x2ba4df0, estate=0x2ba4b40) at execMain.c:1721 #24 standard_ExecutorRun (queryDesc=0x2be7da0, direction=<optimized out>, count=0, execute_once=<optimized out>) at execMain.c:363 #25 0x000000000074b50b in PortalRunSelect (portal=portal@entry=0x2a34050, forward=forward@entry=1 '\001', count=0, count@entry=9223372036854775807, dest=dest@entry=0x2d484f0) at pquery.c:932 #26 0x000000000074ca18 in PortalRun (portal=portal@entry=0x2a34050, count=count@entry=9223372036854775807, isTopLevel=isTopLevel@entry=1 '\001', run_once=run_once@entry=1 '\001', dest=dest@entry=0x2d484f0, altdest=altdest@entry=0x2d484f0, completionTag=completionTag@entry=0x7ffc8dad21c0 "") at pquery.c:773 #27 0x000000000074875b in exec_simple_query ( query_string=0x2a99060 "select\r\n\tsum(l_extendedprice* (1 - l_discount)) as revenue\r\nfrom\r\n\tlineitem,\r\n\tpart\r\nwhere\r\n\t(\r\n\t\tp_partkey = l_partkey\r\n\t\tand p_brand = 'Brand#51'\r\n\t\tand p_container in ('SM CASE', 'SM BOX', 'SM PACK"...) at postgres.c:1099 #28 0x0000000000749a03 in PostgresMain (argc=<optimized out>, argv=argv@entry=0x2a434f8, dbname=0x2a43388 "test", username=<optimized out>) at postgres.c:4088 #29 0x000000000047665f in BackendRun (port=0x2a3c8c0) at postmaster.c:4357 #30 BackendStartup (port=0x2a3c8c0) at postmaster.c:4029 #31 ServerLoop () at postmaster.c:1753 #32 0x00000000006d70d9 in PostmasterMain (argc=argc@entry=3, argv=argv@entry=0x2a14b20) at postmaster.c:1361 #33 0x00000000004774c1 in main (argc=3, argv=0x2a14b20) at main.c:228
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers