{"id":10248,"date":"2023-10-11T11:27:27","date_gmt":"2023-10-11T10:27:27","guid":{"rendered":"https:\/\/blog.capdata.fr\/?p=10248"},"modified":"2023-10-11T11:27:27","modified_gmt":"2023-10-11T10:27:27","slug":"orioledb-la-promesse-dun-no-vacuum","status":"publish","type":"post","link":"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/","title":{"rendered":"OrioleDB : la promesse d&#8217;un No-Vacuum"},"content":{"rendered":"<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F10248&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F10248&#038;title=OrioleDB%20%3A%20la%20promesse%20d%E2%80%99un%20No-Vacuum\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=OrioleDB%20%3A%20la%20promesse%20d%E2%80%99un%20No-Vacuum&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F10248\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a><p>La gestion efficace de l&#8217;espace disque dans PostgreSQL est une pr\u00e9occupation constante pour les administrateurs de bases de donn\u00e9es. C&#8217;est l\u00e0 qu&#8217;intervient le processus de &#8220;vacuum&#8221;, une fonctionnalit\u00e9 puissante et complexe qui peut jouer un r\u00f4le d\u00e9terminant dans la performance et la stabilit\u00e9 de votre base de donn\u00e9es PostgreSQL. Cependant, comme toute arme \u00e0 double tranchant, le vacuum apporte \u00e0 la fois des avantages consid\u00e9rables et des d\u00e9fis potentiels.<\/p>\n<p>Le principal reproche que l&#8217;on peut adresser au syst\u00e8me de vacuum (et \u00e0 l&#8217;auto-vacuum par extension) est sa consommation importante de ressources. C&#8217;est l&#8217;une des raisons majeures \u00e9voqu\u00e9es par les grandes entreprises qui optent pour un autre SGBD, <a href=\"https:\/\/www.uber.com\/blog\/postgres-to-mysql-migration\/\">comme Uber, qui a migr\u00e9 vers MySQL pour remplacer PostgreSQL<\/a>.<\/p>\n<p><a href=\"https:\/\/github.com\/orioledb\/orioledb\">OrioleDB <\/a>nous propose une approche novatrice de la gestion de la fragmentation (bloat) et de l&#8217;espace disque de vos tables PostgreSQL. La principale promesse de ce nouveau moteur d\u00e9velopp\u00e9 par la soci\u00e9t\u00e9 Oriole est d&#8217;\u00e9liminer le besoin de vacuum r\u00e9gulier et de longues p\u00e9riodes de maintenance pour nos bases de donn\u00e9es.<\/p>\n<p>Cette innovation s&#8217;articule autour de journaux d&#8217;annulation au niveau de la ligne et du bloc, ainsi que de la fusion automatique des pages. Les journaux d&#8217;annulation au niveau des lignes et des blocs offrent un contr\u00f4le plus pr\u00e9cis, permettant une gestion plus efficace des modifications de donn\u00e9es. La fonction de fusion automatique des pages travaille en arri\u00e8re-plan pour regrouper les donn\u00e9es fragment\u00e9es, am\u00e9liorant ainsi encore davantage l&#8217;efficacit\u00e9 du syst\u00e8me. Le moteur est actuellement disponible en version b\u00eata sur le site d&#8217;OrioleDB.<\/p>\n<p>Dans cet article, je vais vous montrer comment installer OrioleDB et r\u00e9aliser un test comparatif entre une instance classique et une instance OrioleDB en termes d&#8217;espace disque occup\u00e9. Je vais utiliser <a href=\"https:\/\/capdata.fr\/dbadistance\">notre agent AllDB de supervision des bases de donn\u00e9es <\/a>pour g\u00e9n\u00e9rer des graphiques de la consommation d&#8217;espace disque.<\/p>\n<h2>Installation d&#8217;OrioleDB :<\/h2>\n<p>Pour pouvoir tester le nouveau moteur, il nous faut l&#8217;installer. Pour cela, deux solutions s&#8217;offrent \u00e0 nous. On peut choisir de le compiler nous-m\u00eames \u00e0 partir du code source fourni par Oriole, ou on peut choisir d&#8217;utiliser le conteneur Docker mis \u00e0 notre disposition.<\/p>\n<p>Pour des raisons de rapidit\u00e9 de mise en place, j&#8217;ai choisi d&#8217;utiliser le conteneur fourni.<\/p>\n<p>Pour commencer, j&#8217;installe Docker sur ma machine.<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">root@ip-172-44-2-190:~$ sudo apt-get update\r\n(...)\r\nReading package lists... Done\r\nroot@ip-172-44-2-190:~$ sudo apt-get install ca-certificates curl gnupg\r\nReading package lists... Done\r\n(...)\r\nNo VM guests are running outdated hypervisor (qemu) binaries on this host.\r\nroot@ip-172-44-2-190:~$ sudo install -m 0755 -d \/etc\/apt\/keyrings\r\nroot@ip-172-44-2-190:~$ curl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo gpg --dearmor -o \/etc\/apt\/keyrings\/docker.gpg\r\nroot@ip-172-44-2-190:~$ sudo chmod a+r \/etc\/apt\/keyrings\/docker.gpg\r\nroot@ip-172-44-2-190:~$ echo \\\r\n&quot;deb [arch=&quot;$(dpkg --print-architecture)&quot; signed-by=\/etc\/apt\/keyrings\/docker.gpg] https:\/\/download.docker.com\/linux\/ubuntu \\\r\n&quot;$(. \/etc\/os-release &amp;amp;&amp;amp; echo &quot;$VERSION_CODENAME&quot;)&quot; stable&quot; | \\\r\nsudo tee \/etc\/apt\/sources.list.d\/docker.list &amp;gt; \/dev\/null\r\nsudo apt-get update\r\nHit:1 http:\/\/eu-west-3.ec2.archive.ubuntu.com\/ubuntu jammy InRelease\r\nHit:2 http:\/\/eu-west-3.ec2.archive.ubuntu.com\/ubuntu jammy-updates InRelease\r\n(...)\r\nNo VM guests are running outdated hypervisor (qemu) binaries on this host.<\/pre>\n<p>Pour tester que mon installation fonctionne correctement, je peux d\u00e9marrer l&#8217;image hello-world par d\u00e9faut de Docker.<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">root@ip-172-44-2-190:~$ sudo docker run hello-world\r\nUnable to find image 'hello-world:latest' locally\r\nlatest: Pulling from library\/hello-world\r\n719385e32844: Pull complete\r\nDigest: sha256:4f53e2564790c8e7856ec08e384732aa38dc43c52f02952483e3f003afbf23db\r\nStatus: Downloaded newer image for hello-world:latest\r\n\r\nHello from Docker!\r\nThis message shows that your installation appears to be working correctly.\r\n\r\nTo generate this message, Docker took the following steps:\r\n1. The Docker client contacted the Docker daemon.\r\n2. The Docker daemon pulled the &quot;hello-world&quot; image from the Docker Hub.\r\n(amd64)\r\n3. The Docker daemon created a new container from that image which runs the\r\nexecutable that produces the output you are currently reading.\r\n4. The Docker daemon streamed that output to the Docker client, which sent it\r\nto your terminal.\r\n\r\nTo try something more ambitious, you can run an Ubuntu container with:\r\n$ docker run -it ubuntu bash\r\n\r\nShare images, automate workflows, and more with a free Docker ID:\r\nhttps:\/\/hub.docker.com\/\r\n\r\nFor more examples and ideas, visit:\r\nhttps:\/\/docs.docker.com\/get-started\/<\/pre>\n<p>Docker est correctement install\u00e9, nous pouvons \u00e0 pr\u00e9sent aller r\u00e9cup\u00e9rer l&#8217;image Oriole depuis les d\u00e9p\u00f4ts (repositories). J&#8217;ai choisi de r\u00e9cup\u00e9rer l&#8217;image &#8220;latest&#8221; de la version 14, avec laquelle je vais effectuer mes tests.<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">root@ip-172-44-2-190:~# docker pull orioledb\/orioledb:latest-pg14\r\nlatest-pg14: Pulling from orioledb\/orioledb\r\n7264a8db6415: Pull complete\r\n4e0888d8a332: Pull complete\r\n4b0510894ae7: Pull complete\r\ndc5da57566a1: Pull complete\r\n9611602787a1: Pull complete\r\n8f68f9452236: Pull complete\r\n5c92ed25d025: Pull complete\r\n11bb162cfe7a: Pull complete\r\n6f375d990892: Pull complete\r\n6ac166496e68: Pull complete\r\nDigest: sha256:4d408916e929ff0bcea11fee91ca5e69b0929be1afa58b5dbbcddcce340089ef\r\nStatus: Downloaded newer image for orioledb\/orioledb:latest-pg14\r\ndocker.io\/orioledb\/orioledb:latest-pg14<\/pre>\n<p>On v\u00e9rifie que notre image est bien pr\u00e9sente, et on l&#8217;\u00e9xecute :<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">root@ip-172-44-2-190:~# docker image ls --all\r\nREPOSITORY TAG IMAGE ID CREATED SIZE\r\norioledb\/orioledb latest-pg14 cd7f629f705e 10 days ago 270MB\r\nhello-world latest 9c7a54a9a43c 4 months ago 13.3kB <\/pre>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">root@ip-172-44-2-190:~# docker run -e POSTGRES_PASSWORD=password cd7f629f705e\r\nThe files belonging to this database system will be owned by user &quot;postgres&quot;.\r\nThis user must also own the server process.\r\n\r\nThe database cluster will be initialized with locale &quot;en_US.utf8&quot;.\r\nThe default database encoding has accordingly been set to &quot;UTF8&quot;.\r\nThe default text search configuration will be set to &quot;english&quot;.\r\n\r\nData page checksums are disabled.\r\n\r\nfixing permissions on existing directory \/var\/lib\/postgresql\/data ... ok\r\ncreating subdirectories ... ok\r\nselecting dynamic shared memory implementation ... posix\r\nselecting default max_connections ... 100\r\nselecting default shared_buffers ... 128MB\r\nselecting default time zone ... UTC\r\ncreating configuration files ... ok\r\nrunning bootstrap script ... ok\r\nperforming post-bootstrap initialization ... sh: locale: not found\r\n2023-09-21 09:51:08.177 UTC [30] WARNING: no usable system locales were found\r\nok\r\nsyncing data to disk ... ok\r\n\r\nSuccess. You can now start the database server using:\r\n\r\npg_ctl -D \/var\/lib\/postgresql\/data -l logfile start\r\n\r\ninitdb: warning: enabling &quot;trust&quot; authentication for local connections\r\nYou can change this by editing pg_hba.conf or using the option -A, or\r\n--auth-local and --auth-host, the next time you run initdb.\r\nwaiting for server to start....2023-09-21 09:51:09.294 UTC [36] LOG: OrioleDB public beta 2 started\r\n2023-09-21 09:51:09.295 UTC [36] LOG: starting PostgreSQL 14.9 OrioleDB public beta 2 PGTAG=patches14_16 alpine:3.18+clang-15 build:2023-09-10T16:41:50+00:00 on x86_64-pc-linux-musl, compiled by Alpine clang version 15.0.7, 64-bit\r\n2023-09-21 09:51:09.300 UTC [36] LOG: listening on Unix socket &quot;\/var\/run\/postgresql\/.s.PGSQL.5432&quot;\r\n2023-09-21 09:51:09.316 UTC [37] LOG: database system was shut down at 2023-09-21 09:51:08 UTC\r\n2023-09-21 09:51:09.316 UTC [38] LOG: orioledb background writer started\r\n2023-09-21 09:51:09.323 UTC [36] LOG: database system is ready to accept connections\r\ndone\r\nserver started\r\n\r\n\/usr\/local\/bin\/docker-entrypoint.sh: ignoring \/docker-entrypoint-initdb.d\/*\r\n\r\nwaiting for server to shut down...2023-09-21 09:51:09.350 UTC [36] LOG: received fast shutdown request\r\n.2023-09-21 09:51:09.353 UTC [36] LOG: aborting any active transactions\r\n2023-09-21 09:51:09.354 UTC [38] LOG: orioledb bgwriter is shut down\r\n2023-09-21 09:51:09.357 UTC [36] LOG: background worker &quot;logical replication launcher&quot; (PID 44) exited with exit code 1\r\n2023-09-21 09:51:09.357 UTC [39] LOG: shutting down\r\n2023-09-21 09:51:09.360 UTC [39] LOG: orioledb checkpoint 1 started\r\n2023-09-21 09:51:09.601 UTC [39] LOG: orioledb checkpoint 1 complete\r\n2023-09-21 09:51:09.631 UTC [36] LOG: database system is shut down\r\ndone\r\nserver stopped\r\n\r\nPostgreSQL init process complete; ready for start up.\r\n\r\n2023-09-21 09:51:09.712 UTC [1] LOG: OrioleDB public beta 2 started\r\n2023-09-21 09:51:09.764 UTC [1] LOG: starting PostgreSQL 14.9 OrioleDB public beta 2 PGTAG=patches14_16 alpine:3.18+clang-15 build:2023-09-10T16:41:50+00:00 on x86_64-pc-linux-musl, compiled by Alpine clang version 15.0.7, 64-bit\r\n2023-09-21 09:51:09.764 UTC [1] LOG: listening on IPv4 address &quot;0.0.0.0&quot;, port 5432\r\n2023-09-21 09:51:09.764 UTC [1] LOG: listening on IPv6 address &quot;::&quot;, port 5432\r\n2023-09-21 09:51:09.770 UTC [1] LOG: listening on Unix socket &quot;\/var\/run\/postgresql\/.s.PGSQL.5432&quot;\r\n2023-09-21 09:51:09.778 UTC [49] LOG: database system was shut down at 2023-09-21 09:51:09 UTC\r\n2023-09-21 09:51:09.778 UTC [50] LOG: orioledb background writer started\r\n2023-09-21 09:51:09.785 UTC [1] LOG: database system is ready to accept connections\r\n2023-09-21 09:54:23.633 UTC [68] FATAL: role &quot;root&quot; does not exist\r\n2023-09-21 09:56:09.884 UTC [51] LOG: orioledb checkpoint 2 started\r\n2023-09-21 09:56:10.100 UTC [51] LOG: orioledb checkpoint 2 complete <\/pre>\n<p>Notre serveur est correctement d\u00e9marr\u00e9. Nous pouvons maintenant nous y connecter \u00e0 partir d&#8217;un autre terminal et pr\u00e9parer le cas de test. Pour ce faire, nous allons cr\u00e9er une nouvelle base de donn\u00e9es sur laquelle nous effectuerons un test de charge avec pg_bench.<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">root@ip-172-44-2-190:~# docker ps\r\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\r\n11c0860b7abc cd7f629f705e &quot;docker-entrypoint.s\u2026&quot; 2 minutes ago Up 2 minutes 5432\/tcp funny_hellman\r\nroot@ip-172-44-2-190:~# docker exec -it 11c0860b7abc bash\r\n11c0860b7abc:\/# su - postgres\r\n11c0860b7abc:~$ psql\r\npsql (14.9 OrioleDB public beta 2 PGTAG=patches14_16 alpine:3.18+clang-15 build:2023-09-10T16:41:50+00:00)\r\nType &quot;help&quot; for help.<\/pre>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">postgres=# create database pg_bench;\r\nCREATE DATABASE\r\npostgres=# \\c pg_bench\r\nYou are now connected to database &quot;pg_bench&quot; as user &quot;postgres&quot;.\r\npg_bench=# CREATE TABLE test (\r\npg_bench(# id integer primary key,\r\npg_bench(# value1 float8 not null,\r\npg_bench(# value2 float8 not null,\r\npg_bench(# value3 float8 not null,\r\npg_bench(# value4 float8 not null,\r\npg_bench(# ts timestamp not null\r\npg_bench(# );\r\nCREATE TABLE\r\npg_bench=# CREATE INDEX test_value1_idx ON test (value1);\r\nCREATE INDEX\r\npg_bench=# CREATE INDEX test_value2_idx ON test (value2);\r\nCREATE INDEX\r\npg_bench=# CREATE INDEX test_value3_idx ON test (value3);\r\nCREATE INDEX\r\npg_bench=# CREATE INDEX test_value4_idx ON test (value4);\r\nCREATE INDEX\r\npg_bench=# CREATE INDEX test_ts_idx ON test (ts);\r\nCREATE INDEX <\/pre>\n<p>Notre environnement de test est pr\u00eat. Afin de pouvoir comparer les performances avec une instance PostgreSQL plus traditionnelle, j&#8217;ai \u00e9galement install\u00e9 une version legacy en local sur la machine que j&#8217;utilise. J&#8217;ai cr\u00e9\u00e9 la m\u00eame table et les m\u00eames index que dans mon conteneur Docker. Pour r\u00e9aliser ce test, j&#8217;ai repris le script pg_bench de test fourni par Oriole.<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">11c0860b7abc:~$ cat test.sql\r\n\\set id random(1, 10000000)\r\nINSERT INTO test VALUES(:id, random(), random(), random(), random(), now() - random() * random() * 1800 * interval '1 second')\r\nON CONFLICT (id) DO UPDATE SET ts = now();<\/pre>\n<p>Ce petit script de test permet de lancer des insertions successives de donn\u00e9es dans notre table de test. Il est con\u00e7u pour maximiser les chances de fragmentation \u00e0 mesure que nous ins\u00e9rons des donn\u00e9es dans notre table, car les doublons de cl\u00e9 primaire entra\u00eenent la mise \u00e0 jour d&#8217;anciennes lignes. Cela devrait donc nous permettre de constater la diff\u00e9rence d&#8217;espace disque entre une version standard de PostgreSQL et la version du moteur d\u00e9velopp\u00e9e par Oriole.<\/p>\n<h2>R\u00e9sultats des test :<\/h2>\n<p>Mes tests sont r\u00e9alis\u00e9s sur une machine Amazon EC2 de type &#8220;large&#8221;, \u00e9quip\u00e9e de 7 gigaoctets de RAM et de 2 unit\u00e9s de traitement central (CPU).<\/p>\n<p>Voici la capture d&#8217;\u00e9cran de l&#8217;occupation de l&#8217;espace disque pour le premier test, celui concernant l&#8217;instance OrioleDB :<\/p>\n<p><a href=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/10\/OrioleDB.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/10\/OrioleDB.png\" alt=\"\" width=\"1261\" height=\"345\" class=\"aligncenter size-full wp-image-10306\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/10\/OrioleDB.png 1261w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/10\/OrioleDB-300x82.png 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/10\/OrioleDB-1024x280.png 1024w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/10\/OrioleDB-768x210.png 768w\" sizes=\"auto, (max-width: 1261px) 100vw, 1261px\" \/><\/a><\/p>\n<p>On peut observer que la progression de la taille de l&#8217;instance est r\u00e9guli\u00e8re et tr\u00e8s mod\u00e9r\u00e9e. Pendant le test, j&#8217;ai surveill\u00e9 l&#8217;utilisation de la RAM de la machine, qui atteignait un pic \u00e0 95 % et demeurait relativement stable pendant toute la dur\u00e9e du test. Conform\u00e9ment \u00e0 la promesse du moteur, aucun processus d&#8217;autovacuum n&#8217;a \u00e9t\u00e9 constat\u00e9 pendant le processus.<\/p>\n<p>En comparaison, le graphique de la base de donn\u00e9es non Oriole pr\u00e9sente une nette diff\u00e9rence :<\/p>\n<p><a href=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/10\/nonOrioleDB.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/10\/nonOrioleDB.png\" alt=\"\" width=\"1268\" height=\"345\" class=\"aligncenter size-full wp-image-10308\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/10\/nonOrioleDB.png 1268w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/10\/nonOrioleDB-300x82.png 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/10\/nonOrioleDB-1024x279.png 1024w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/10\/nonOrioleDB-768x209.png 768w\" sizes=\"auto, (max-width: 1268px) 100vw, 1268px\" \/><\/a><\/p>\n<p>On observe notamment de nombreux pics et chutes fr\u00e9quents dus aux vacuums organis\u00e9s r\u00e9guli\u00e8rement. Le trac\u00e9 n&#8217;est pas lin\u00e9aire.<\/p>\n<p>De plus, en surveillant les valeurs d&#8217;utilisation CPU, \u00e0 la diff\u00e9rence d&#8217;Oriole o\u00f9 les valeurs \u00e9taient constantes car il \u00e9tait toujours en train d&#8217;ajouter des donn\u00e9es, les moments de vacuum de la base provoquent d&#8217;importantes mont\u00e9es de charge, suivies de chutes lorsque ces processus sont termin\u00e9s sur notre instance de base.<\/p>\n<h2>Conclusion :<\/h2>\n<p>Sur le blog d&#8217;OrioleDB, les graphiques affich\u00e9s sont le r\u00e9sultat de l&#8217;injection de 80 gigaoctets de donn\u00e9es dans leur base de donn\u00e9es \u00e0 l&#8217;aide de pg_bench. Cependant, lorsque l&#8217;on examine les sp\u00e9cifications de la machine qu&#8217;ils ont utilis\u00e9e pour leurs tests, on se rend compte qu&#8217;elle n&#8217;est pas \u00e0 la port\u00e9e de toutes les bourses. La machine utilis\u00e9e comprend en effet 72 CPU et dispose d&#8217;un total de 144 Go de RAM, une configuration que tr\u00e8s peu de personnes, principalement en raison du co\u00fbt \u00e9lev\u00e9 de ce type de mat\u00e9riel, pourraient envisager pour leur infrastructure.<\/p>\n<p>Oriole fonctionne, comme nous l&#8217;avons vu sur les graphiques que j&#8217;ai comment\u00e9s pr\u00e9c\u00e9demment. Cependant, il s&#8217;agit d&#8217;un outil con\u00e7u pour les architectures de tr\u00e8s grande envergure et les besoins importants en termes d&#8217;entr\u00e9es\/sorties de donn\u00e9es. Les gains ne sont pas aussi significatifs sur des machines de plus petite taille, qui correspondent davantage \u00e0 la r\u00e9alit\u00e9 de nombreuses entreprises actuelles.<\/p>\n<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F10248&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F10248&#038;title=OrioleDB%20%3A%20la%20promesse%20d%E2%80%99un%20No-Vacuum\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=OrioleDB%20%3A%20la%20promesse%20d%E2%80%99un%20No-Vacuum&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F10248\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a>","protected":false},"excerpt":{"rendered":"<p>La gestion efficace de l&#8217;espace disque dans PostgreSQL est une pr\u00e9occupation constante pour les administrateurs de bases de donn\u00e9es. C&#8217;est l\u00e0 qu&#8217;intervient le processus de &#8220;vacuum&#8221;, une fonctionnalit\u00e9 puissante et complexe qui peut jouer un r\u00f4le d\u00e9terminant dans la performance&hellip; <a href=\"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/\" class=\"more-link\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":41,"featured_media":10251,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[266],"tags":[463,431,349],"class_list":["post-10248","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-postgresql","tag-maintenance","tag-postgresql","tag-vacuum"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>OrioleDB : la promesse d&#039;un No-Vacuum - Capdata TECH BLOG<\/title>\n<meta name=\"description\" content=\"OrioleDB la base PostgreSQL sans vacuum OrioleDB : la promesse d&#039;un No-Vacuum PostgreSQL OrioleDB vacuum performance\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"OrioleDB : la promesse d&#039;un No-Vacuum - Capdata TECH BLOG\" \/>\n<meta property=\"og:description\" content=\"OrioleDB la base PostgreSQL sans vacuum OrioleDB : la promesse d&#039;un No-Vacuum PostgreSQL OrioleDB vacuum performance\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/\" \/>\n<meta property=\"og:site_name\" content=\"Capdata TECH BLOG\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-11T10:27:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/09\/no-vacuum.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1180\" \/>\n\t<meta property=\"og:image:height\" content=\"1126\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Sarah FAVEERE\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sarah FAVEERE\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/\"},\"author\":{\"name\":\"Sarah FAVEERE\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/686f2452f7ec79115d31e41c230a9da2\"},\"headline\":\"OrioleDB : la promesse d&#8217;un No-Vacuum\",\"datePublished\":\"2023-10-11T10:27:27+00:00\",\"dateModified\":\"2023-10-11T10:27:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/\"},\"wordCount\":2266,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"keywords\":[\"maintenance\",\"PostgreSQL\",\"vacuum\"],\"articleSection\":[\"PostgreSQL\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/\",\"url\":\"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/\",\"name\":\"OrioleDB : la promesse d'un No-Vacuum - Capdata TECH BLOG\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/#website\"},\"datePublished\":\"2023-10-11T10:27:27+00:00\",\"dateModified\":\"2023-10-11T10:27:27+00:00\",\"description\":\"OrioleDB la base PostgreSQL sans vacuum OrioleDB : la promesse d'un No-Vacuum PostgreSQL OrioleDB vacuum performance\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/blog.capdata.fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"OrioleDB : la promesse d&#8217;un No-Vacuum\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.capdata.fr\/#website\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"name\":\"Capdata TECH BLOG\",\"description\":\"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting\",\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.capdata.fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/blog.capdata.fr\/#organization\",\"name\":\"Capdata TECH BLOG\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"contentUrl\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"width\":800,\"height\":254,\"caption\":\"Capdata TECH BLOG\"},\"image\":{\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/686f2452f7ec79115d31e41c230a9da2\",\"name\":\"Sarah FAVEERE\",\"sameAs\":[\"http:\/\/blog.capdata.fr\"],\"url\":\"https:\/\/blog.capdata.fr\/index.php\/author\/sfaveere\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"OrioleDB : la promesse d'un No-Vacuum - Capdata TECH BLOG","description":"OrioleDB la base PostgreSQL sans vacuum OrioleDB : la promesse d'un No-Vacuum PostgreSQL OrioleDB vacuum performance","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/","og_locale":"fr_FR","og_type":"article","og_title":"OrioleDB : la promesse d'un No-Vacuum - Capdata TECH BLOG","og_description":"OrioleDB la base PostgreSQL sans vacuum OrioleDB : la promesse d'un No-Vacuum PostgreSQL OrioleDB vacuum performance","og_url":"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/","og_site_name":"Capdata TECH BLOG","article_published_time":"2023-10-11T10:27:27+00:00","og_image":[{"width":1180,"height":1126,"url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/09\/no-vacuum.png","type":"image\/png"}],"author":"Sarah FAVEERE","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Sarah FAVEERE","Dur\u00e9e de lecture estim\u00e9e":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/#article","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/"},"author":{"name":"Sarah FAVEERE","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/686f2452f7ec79115d31e41c230a9da2"},"headline":"OrioleDB : la promesse d&#8217;un No-Vacuum","datePublished":"2023-10-11T10:27:27+00:00","dateModified":"2023-10-11T10:27:27+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/"},"wordCount":2266,"commentCount":0,"publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"keywords":["maintenance","PostgreSQL","vacuum"],"articleSection":["PostgreSQL"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/","url":"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/","name":"OrioleDB : la promesse d'un No-Vacuum - Capdata TECH BLOG","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/#website"},"datePublished":"2023-10-11T10:27:27+00:00","dateModified":"2023-10-11T10:27:27+00:00","description":"OrioleDB la base PostgreSQL sans vacuum OrioleDB : la promesse d'un No-Vacuum PostgreSQL OrioleDB vacuum performance","breadcrumb":{"@id":"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.capdata.fr\/index.php\/orioledb-la-promesse-dun-no-vacuum\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/blog.capdata.fr\/"},{"@type":"ListItem","position":2,"name":"OrioleDB : la promesse d&#8217;un No-Vacuum"}]},{"@type":"WebSite","@id":"https:\/\/blog.capdata.fr\/#website","url":"https:\/\/blog.capdata.fr\/","name":"Capdata TECH BLOG","description":"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting","publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.capdata.fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/blog.capdata.fr\/#organization","name":"Capdata TECH BLOG","url":"https:\/\/blog.capdata.fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/","url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","contentUrl":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","width":800,"height":254,"caption":"Capdata TECH BLOG"},"image":{"@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/"]},{"@type":"Person","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/686f2452f7ec79115d31e41c230a9da2","name":"Sarah FAVEERE","sameAs":["http:\/\/blog.capdata.fr"],"url":"https:\/\/blog.capdata.fr\/index.php\/author\/sfaveere\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/10248","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/comments?post=10248"}],"version-history":[{"count":20,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/10248\/revisions"}],"predecessor-version":[{"id":10310,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/10248\/revisions\/10310"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media\/10251"}],"wp:attachment":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media?parent=10248"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/categories?post=10248"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/tags?post=10248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}