<!--
Les sources pour ce sujet sont :

* https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=06286709ee0637ec7376329a5aa026b7682dcfe2
* https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=5de890e3610d5a12cdaea36413d967cf5c544e20

Discussion :

* https://postgr.es/m/ca0adb0e-fa4e-c37e-1cd7-91170b18cae1@gmx.de
* https://www.postgresql.org/message-id/CAExHW5sZA=5LJ_ZPpRO-w09ck8z9p7eaYAqq3Ks9GDfhrxeWBw@mail.gmail.com
-->

<div class="slide-content">

  * `SERIALIZE`
    + temps et la quantité de données retournés au client
  * `MEMORY`
    + mémoire allouée et utilisée par le planificateur

</div>

<div class="notes">

**Option SERIALIZE**

Cette nouvelle option d'`EXPLAIN` permet de connaitre le temps ainsi que la
quantité de données qui a été transmisse au client. La quantité de données
correspond à ce qui a été envoyé au client. Le temps correspond à la
conversion des données dans le format d'échange du le protocole utilisé par
PostgreSQL.

```sql
postgres=# explain (analyze) select * from tab1;
                                             QUERY PLAN                         
                     
-------------------------------------------------------
 Seq Scan on tab1  (cost=0.00..35.50 rows=2550 width=4) (actual time=0.037..0.08
3 rows=1000 loops=1)
 Planning Time: 0.070 ms
 Execution Time: 0.124 ms
(3 rows)
```

Une nouvelle ligne apparait dans la sortie de la commande. 

```sql
postgres=# explain (analyze, serialize) select * from tab1;
                                             QUERY PLAN                         
                     
-------------------------------------------------------
 Seq Scan on tab1  (cost=0.00..35.50 rows=2550 width=4) (actual time=0.019..0.12
3 rows=1000 loops=1)
 Planning Time: 0.053 ms
 Serialization: time=0.070 ms  output=6kB  format=text
 Execution Time: 0.303 ms
(4 rows)
```

Cette option doit nécessairement être utilisée avec `ANALYZE`, autrement un
message d'erreur apparaîtra.

```sql
postgres=# explain (serialize) select * from tab1;
ERROR:  EXPLAIN option SERIALIZE requires ANALYZE
```

**MEMORY**

Cette nouvelle option d'`EXPLAIN` permet de connaitre la quantité de mémoire
qui a été utilisée par le planificateur lors de l'exécution de la requête
(`used`). Cette information est complétée par la quantité de mémoire qui a
été initialement allouée (`allocated`).

Exemple de sortie obtenue :

```sql
postgres=# explain (analyse, memory) select * from tab1;
                                              QUERY PLAN
----------------------------------------------------------------
 Seq Scan on tab1  (cost=0.00..22.70 rows=1270 width=36)
                   (actual time=0.023..0.141 rows=1000 loops=1)
 Planning:
   Memory: used=7kB  allocated=8kB
 Planning Time: 0.087 ms
 Execution Time: 0.224 ms
(5 rows)
```

</div>
