web-dev-qa-db-fra.com

Que signifie "bloc de tas" dans "Bitmap Heap Scan"?

J'ai cette requête:

EXPLAIN (ANALYZE, BUFFERS) 
SELECT * FROM test
WHERE
    timestamp_range @> '2015-01-22 23:00:00'::timestamp
    AND data_int_array @> '{49, 61}'::integer[];

Quelles sorties:

Bitmap Heap Scan on test  (cost=16.74..20.75 rows=1 width=113) (actual time=0.364..0.367 rows=2 loops=1)
  Recheck Cond: ((timestamp_range @> '2015-01-22 23:00:00'::timestamp without time zone) AND (data_int_array @> '{49,61}'::integer[]))
  Heap Blocks: exact=1
  Buffers: shared hit=8
  ->  BitmapAnd  (cost=16.74..16.74 rows=1 width=0) (actual time=0.351..0.351 rows=0 loops=1)
        Buffers: shared hit=7
        ->  Bitmap Index Scan on ix_test_interval  (cost=0.00..4.40 rows=17 width=0) (actual time=0.130..0.130 rows=12 loops=1)
              Index Cond: (timestamp_range @> '2015-01-22 23:00:00'::timestamp without time zone)
              Buffers: shared hit=2
        ->  Bitmap Index Scan on ix_test_data_int_array_data_json  (cost=0.00..12.08 rows=11 width=0) (actual time=0.211..0.211 rows=6 loops=1)
              Index Cond: (data_int_array @> '{49,61}'::integer[])
              Buffers: shared hit=5
Planning time: 0.396 ms
Execution time: 0.484 ms

J'ai lu la documentation " tilisation de l'explication ", mais je n'ai trouvé aucune référence au bloc de tas.

S'il vous plaît, pourriez-vous me dire ce que Heap Bock signifie et comment il se rapporte à Buffers dans un Bitmap Heap Scan?

Je suis entrain de courir: "PostgreSQL 9.4.5, compiled by Visual C++ build 1800, 64-bit "

7
Jesús López

Les bitmaps peuvent soit stocker un bitmap de lignes, soit si cela devient trop grand pour s'adapter à Work_Mem, il peut "aller perdre" en stockant un bitmap de blocs. Cela peut le faire de manière sélective, de sorte que certains blocs peuvent être convertis avec une perte de perte tandis que d'autres non.

Si cela passe la perte, le balayage du tas doit reculer à chaque rangée de chaque bloc à perte de temps qu'il visite, car il ne dispose plus d'informations sur lesquelles des lignes particulières dans ce bloc répondaient aux critères de recherche.

"Blocs de tas: Exact = 1" signifie qu'il n'a visité qu'un seul bloc et que ce n'était pas une perte. (Les deux rangées de vôtres sont donc retournées dans le même bloc)

Cela accepte les données tampons. Le Bitmap Index Scans et BitmapAnd dans les blocs Total Hit 7. Le scan de tas frappe un de plus, le rapportant jusqu'à 8.

8
jjanes