{"id":2196,"date":"2026-10-07T15:52:14","date_gmt":"2026-10-07T13:52:14","guid":{"rendered":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/?p=2196"},"modified":"2026-10-08T16:43:31","modified_gmt":"2026-10-08T14:43:31","slug":"database-performance-postgres-vs-mysql","status":"publish","type":"post","link":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/database-performance-postgres-vs-mysql\/","title":{"rendered":"Database performance: Postgres vs. MySQL"},"content":{"rendered":"<p><a href=\"https:\/\/kestra.io\">Kestra<\/a> supports Postgres and MySQL, among other databases; our internal benchmarks showed that Postgres performed much better than MySQL when running Kestra. We therefore generally recommend running Kestra in production with Postgres.<\/p>\n<p>During our <a href=\"https:\/\/kestra.io\/docs\/performance\/benchmark\">benchmarks<\/a>, Postgres sustains 4,000 executions\/min with a latency of 370 ms for our typical flows, and a latency of around 130 ms for a single launch. MySQL, for its part, cannot even sustain 1,000 executions\/min, and has a latency of around 160 ms for a single launch.<\/p>\n<p>But even so, some of our users were using MySQL without any issues, which prompted me to look into the issue.<\/p>\n<p>Kestra uses its database for three things:<\/p>\n<ol>\n<li>Storing workflow-related resources (flows, metadata, users, etc.)<\/li>\n<li>Storing workflow execution data<\/li>\n<li>An internal queue for asynchronous message passing between components<\/li>\n<\/ol>\n<p>The internal queue is the most critical component; it lies at the heart of Kestra, and its Executor, which is responsible for the orchestration logic, relies heavily on it.\nThe Executor processes an execution in a loop; at each step, it advances the workflow, then sends tasks to be executed to the Worker and an execution update event to trigger itself again.\nSo it reads a message from the queue, processes the message, and sends another one.\nThe JDBC queue operates via a <code>SELECT ... FOR UPDATE<\/code> statement; once the message has been processed, it is deleted within the same transaction.\nTo optimize performance, the queue reads in batches (<code>pollSize<\/code>, 100 by default), and the Executor processes them in parallel using a number of threads configured by default to the number of available CPU cores.<\/p>\n<p>Each execution can generate <strong>dozens or even hundreds of messages<\/strong> and thus DB transactions, which I suspect is the cause of the performance differences.<\/p>\n<p>After verifying that the indexes were identical between the two databases and were being used correctly, I tested several things:<\/p>\n<ol>\n<li>Configured the datasource, including enabling the prepared statement cache, which is disabled by default in MySQL but enabled in Postgres (see <a href=\"https:\/\/github.com\/brettwooldridge\/HikariCP\/wiki\/MySQL-Configuration\">here<\/a> for reference). <strong>No change<\/strong>.<\/li>\n<li>Increased the <code>pollSize<\/code> to create larger batches (250). <strong>No change<\/strong>.<\/li>\n<li>Decreased the <code>pollSize<\/code> to create smaller commits (10). <strong>Worse!<\/strong>.<\/li>\n<\/ol>\n<p>I then asked Claude what it thought, and it replied:<\/p>\n<blockquote>\n  MySQL&#8217;s default setting of <code>sync_binlog=1<\/code> enforces a synchronous <code>fsync<\/code> of the binlog on every commit, and Kestra\u2019s JDBC queue design performs extremely frequent commits (approximately 52 commits per execution, or about 2,600 commits per second during a 6-minute performance test with 18,000 executions), because message processing occurs within the same transaction as each query cycle of the queue. By default, Postgres performs one fsync on the WAL per commit and does not have a second log; MySQL performs two (redo log + bin log).\n<\/blockquote>\n<p>In summary, MySQL is configured by default to perform two fsync operations (system calls to synchronize file writes to disk) per commit, whereas Postgres performs only one. The second point relates to the binlog used for point-in-time recovery and replication between replicas: whereas the redo log is specific to MySQL\u2019s storage engine (InnoDB in this case), the binlog is identical regardless of the storage engine.<\/p>\n<p>When you disable the binlog (<code>--skip-log-bin<\/code>), performance is on par between MySQL and Postgres! :tada:<\/p>\n<p>However, in a production environment, completely disabling the binlog is not a good idea; instead, you can choose what should be stored in the binlog (using <code>binlog_row_image<\/code>) or how often it is written (using <code>sync_binlog<\/code>).<\/p>\n<p>Setting <code>binlog_row_image<\/code> to <code>MINIMAL<\/code> will create smaller events in the binlog, thereby reducing the number of bytes written per second. The tests were inconclusive; it is actually the number of writes that is the problem, not their size, which is consistent with the worste performance when <code>pollSize<\/code> is reduced.<\/p>\n<p>Setting <code>sync_binlog<\/code> to 25 will write the binlog to disk every 25 commits instead of after every commit. The InnoDB redo log remains synchronized with every commit: a MySQL crash will not result in any data loss. In the event of an OS or server crash, up to 24 commits may be missing from the binlog (but not from the database), which only affects replication and point-in-time recovery.<\/p>\n<p>Performance is then close to that of Postgres. This is a trade-off between performance and binlog durability: it&#8217;s up to you to choose the value based on your tolerance, but binlog configuration is a classic part of MySQL tuning.<\/p>\n<p>To wrap it up, I had a negative preconception about MySQL\u2019s performance, but knowing that some heavy users of Kestra (thousands of flows, millions of executions per month) were using it, I thoight I needed to look into it. And since I\u2019m not an expert, Claude\u2019s little help pointed me in the right direction and allowed me to learn a little more about how MySQL works under the hood.<\/p>","protected":false},"excerpt":{"rendered":"<p>Kestra supports Postgres and MySQL, among other databases; our internal benchmarks showed that Postgres performed much better than MySQL when running Kestra. We therefore generally recommend running Kestra in production with Postgres. During our benchmarks, Postgres sustains 4,000 executions\/min with a latency of 370 ms for our typical flows, and a latency of around 130 ms for a single launch. MySQL, for its part, cannot even sustain 1,000 executions\/min, and has a latency of around 160 ms for a single&#8230;<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/database-performance-postgres-vs-mysql\/\"> Read More<span class=\"screen-reader-text\">  Read More<\/span><\/a><\/p><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"federated","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false,"_members_access_role":[],"_members_access_error":""},"categories":[9],"tags":[203,211,236,159],"class_list":["post-2196","post","type-post","status-publish","format-standard","hentry","category-informatique","tag-database","tag-kestra","tag-mysql","tag-performance"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"Kestra supports Postgres and MySQL, among other databases; our internal benchmarks showed that Postgres performed much better than MySQL when running Kestra. We therefore generally recommend running Kestra in production with Postgres. During our benchmarks, Postgres sustains 4,000 executions\/min with a latency of 370 ms for our typical flows, and a latency of around 130\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"admin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/database-performance-postgres-vs-mysql\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Loic&#039;s Blog | Blog about IT developement, and some more stuff (travel, ecology, ...)\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Database performance: Postgres vs. MySQL | Loic&#039;s Blog\" \/>\n\t\t<meta property=\"og:description\" content=\"Kestra supports Postgres and MySQL, among other databases; our internal benchmarks showed that Postgres performed much better than MySQL when running Kestra. We therefore generally recommend running Kestra in production with Postgres. During our benchmarks, Postgres sustains 4,000 executions\/min with a latency of 370 ms for our typical flows, and a latency of around 130\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/database-performance-postgres-vs-mysql\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-10-07T13:52:14+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-10-08T14:43:31+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Database performance: Postgres vs. MySQL | Loic&#039;s Blog\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Kestra supports Postgres and MySQL, among other databases; our internal benchmarks showed that Postgres performed much better than MySQL when running Kestra. We therefore generally recommend running Kestra in production with Postgres. During our benchmarks, Postgres sustains 4,000 executions\/min with a latency of 370 ms for our typical flows, and a latency of around 130\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/informatique\\\/database-performance-postgres-vs-mysql\\\/#article\",\"name\":\"Database performance: Postgres vs. MySQL | Loic's Blog\",\"headline\":\"Database performance: Postgres vs. MySQL\",\"author\":{\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/author\\\/admin\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/#organization\"},\"datePublished\":\"2026-10-07T15:52:14+02:00\",\"dateModified\":\"2026-10-08T16:43:31+02:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/informatique\\\/database-performance-postgres-vs-mysql\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/informatique\\\/database-performance-postgres-vs-mysql\\\/#webpage\"},\"articleSection\":\"informatique, database, kestra, mysql, performance\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/informatique\\\/database-performance-postgres-vs-mysql\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/category\\\/informatique\\\/#listItem\",\"name\":\"informatique\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/category\\\/informatique\\\/#listItem\",\"position\":2,\"name\":\"informatique\",\"item\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/category\\\/informatique\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/informatique\\\/database-performance-postgres-vs-mysql\\\/#listItem\",\"name\":\"Database performance: Postgres vs. MySQL\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/informatique\\\/database-performance-postgres-vs-mysql\\\/#listItem\",\"position\":3,\"name\":\"Database performance: Postgres vs. MySQL\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/category\\\/informatique\\\/#listItem\",\"name\":\"informatique\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/#organization\",\"name\":\"Loic's Blog\",\"description\":\"Blog about IT developement, and some more stuff (travel, ecology, ...)\",\"url\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/author\\\/admin\\\/#author\",\"url\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/author\\\/admin\\\/\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/informatique\\\/database-performance-postgres-vs-mysql\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b39eb909797d1241a4191e41489c1fbe0b3d68daf31e77779b61ce2f4422b52?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"admin\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/informatique\\\/database-performance-postgres-vs-mysql\\\/#webpage\",\"url\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/informatique\\\/database-performance-postgres-vs-mysql\\\/\",\"name\":\"Database performance: Postgres vs. MySQL | Loic's Blog\",\"description\":\"Kestra supports Postgres and MySQL, among other databases; our internal benchmarks showed that Postgres performed much better than MySQL when running Kestra. We therefore generally recommend running Kestra in production with Postgres. During our benchmarks, Postgres sustains 4,000 executions\\\/min with a latency of 370 ms for our typical flows, and a latency of around 130\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/informatique\\\/database-performance-postgres-vs-mysql\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/author\\\/admin\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/author\\\/admin\\\/#author\"},\"datePublished\":\"2026-10-07T15:52:14+02:00\",\"dateModified\":\"2026-10-08T16:43:31+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/\",\"name\":\"Loic's Blog\",\"description\":\"Blog about IT developement, and some more stuff (travel, ecology, ...)\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.loicmathieu.fr\\\/wordpress\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Database performance: Postgres vs. MySQL | Loic's Blog","description":"Kestra supports Postgres and MySQL, among other databases; our internal benchmarks showed that Postgres performed much better than MySQL when running Kestra. We therefore generally recommend running Kestra in production with Postgres. During our benchmarks, Postgres sustains 4,000 executions\/min with a latency of 370 ms for our typical flows, and a latency of around 130","canonical_url":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/database-performance-postgres-vs-mysql\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/database-performance-postgres-vs-mysql\/#article","name":"Database performance: Postgres vs. MySQL | Loic's Blog","headline":"Database performance: Postgres vs. MySQL","author":{"@id":"https:\/\/www.loicmathieu.fr\/wordpress\/author\/admin\/#author"},"publisher":{"@id":"https:\/\/www.loicmathieu.fr\/wordpress\/#organization"},"datePublished":"2026-10-07T15:52:14+02:00","dateModified":"2026-10-08T16:43:31+02:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/database-performance-postgres-vs-mysql\/#webpage"},"isPartOf":{"@id":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/database-performance-postgres-vs-mysql\/#webpage"},"articleSection":"informatique, database, kestra, mysql, performance"},{"@type":"BreadcrumbList","@id":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/database-performance-postgres-vs-mysql\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.loicmathieu.fr\/wordpress\/#listItem","position":1,"name":"Home","item":"https:\/\/www.loicmathieu.fr\/wordpress\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/#listItem","name":"informatique"}},{"@type":"ListItem","@id":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/#listItem","position":2,"name":"informatique","item":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/database-performance-postgres-vs-mysql\/#listItem","name":"Database performance: Postgres vs. MySQL"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.loicmathieu.fr\/wordpress\/#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/database-performance-postgres-vs-mysql\/#listItem","position":3,"name":"Database performance: Postgres vs. MySQL","previousItem":{"@type":"ListItem","@id":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/#listItem","name":"informatique"}}]},{"@type":"Organization","@id":"https:\/\/www.loicmathieu.fr\/wordpress\/#organization","name":"Loic's Blog","description":"Blog about IT developement, and some more stuff (travel, ecology, ...)","url":"https:\/\/www.loicmathieu.fr\/wordpress\/"},{"@type":"Person","@id":"https:\/\/www.loicmathieu.fr\/wordpress\/author\/admin\/#author","url":"https:\/\/www.loicmathieu.fr\/wordpress\/author\/admin\/","name":"admin","image":{"@type":"ImageObject","@id":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/database-performance-postgres-vs-mysql\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/2b39eb909797d1241a4191e41489c1fbe0b3d68daf31e77779b61ce2f4422b52?s=96&d=mm&r=g","width":96,"height":96,"caption":"admin"}},{"@type":"WebPage","@id":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/database-performance-postgres-vs-mysql\/#webpage","url":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/database-performance-postgres-vs-mysql\/","name":"Database performance: Postgres vs. MySQL | Loic's Blog","description":"Kestra supports Postgres and MySQL, among other databases; our internal benchmarks showed that Postgres performed much better than MySQL when running Kestra. We therefore generally recommend running Kestra in production with Postgres. During our benchmarks, Postgres sustains 4,000 executions\/min with a latency of 370 ms for our typical flows, and a latency of around 130","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.loicmathieu.fr\/wordpress\/#website"},"breadcrumb":{"@id":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/database-performance-postgres-vs-mysql\/#breadcrumblist"},"author":{"@id":"https:\/\/www.loicmathieu.fr\/wordpress\/author\/admin\/#author"},"creator":{"@id":"https:\/\/www.loicmathieu.fr\/wordpress\/author\/admin\/#author"},"datePublished":"2026-10-07T15:52:14+02:00","dateModified":"2026-10-08T16:43:31+02:00"},{"@type":"WebSite","@id":"https:\/\/www.loicmathieu.fr\/wordpress\/#website","url":"https:\/\/www.loicmathieu.fr\/wordpress\/","name":"Loic's Blog","description":"Blog about IT developement, and some more stuff (travel, ecology, ...)","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.loicmathieu.fr\/wordpress\/#organization"}}]},"og:locale":"en_US","og:site_name":"Loic's Blog | Blog about IT developement, and some more stuff (travel, ecology, ...)","og:type":"article","og:title":"Database performance: Postgres vs. MySQL | Loic's Blog","og:description":"Kestra supports Postgres and MySQL, among other databases; our internal benchmarks showed that Postgres performed much better than MySQL when running Kestra. We therefore generally recommend running Kestra in production with Postgres. During our benchmarks, Postgres sustains 4,000 executions\/min with a latency of 370 ms for our typical flows, and a latency of around 130","og:url":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/database-performance-postgres-vs-mysql\/","article:published_time":"2026-10-07T13:52:14+00:00","article:modified_time":"2026-10-08T14:43:31+00:00","twitter:card":"summary","twitter:title":"Database performance: Postgres vs. MySQL | Loic's Blog","twitter:description":"Kestra supports Postgres and MySQL, among other databases; our internal benchmarks showed that Postgres performed much better than MySQL when running Kestra. We therefore generally recommend running Kestra in production with Postgres. During our benchmarks, Postgres sustains 4,000 executions\/min with a latency of 370 ms for our typical flows, and a latency of around 130"},"aioseo_meta_data":{"post_id":"2196","title":null,"description":null,"keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2026-09-16 11:03:58","updated":"2026-10-08 14:43:31","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.loicmathieu.fr\/wordpress\/\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/\" title=\"informatique\">informatique<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tDatabase performance: Postgres vs. MySQL\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.loicmathieu.fr\/wordpress\/"},{"label":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/"},{"label":"Database performance: Postgres vs. MySQL","link":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/database-performance-postgres-vs-mysql\/"}],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":1650,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/le-profiler-sql-de-visualvm\/","url_meta":{"origin":2196,"position":0},"title":"VisualVM SQL profiler SQL","author":"admin","date":"Tuesday April  4th, 2023","format":false,"excerpt":"A little while ago, I discovered the SQL profiler of VisualVM and I thought I should share it with you ;). VisualVM is a tool that provides a visual interface to display detailed information about applications running on a Java Virtual Machine (JVM). VisualVM is designed for use in development\u2026","rel":"","context":"In &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/Capture-decran-du-2023-04-03-14-17-25-1024x624.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/Capture-decran-du-2023-04-03-14-17-25-1024x624.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/Capture-decran-du-2023-04-03-14-17-25-1024x624.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":1786,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/concevoir-un-saas-multitenant\/","url_meta":{"origin":2196,"position":1},"title":"Designing a multi-tenant SaaS","author":"admin","date":"Tuesday March  5th, 2024","format":false,"excerpt":"This article is based on my talk Designing a multi-tenant SaaS given at Cloud Nord on October 12, 2023. Kestra is a highly scalable data scheduling and orchestration platform that creates, executes, schedules and monitors millions of complex pipelines. For an introduction to Kestra, you can read my article on\u2026","rel":"","context":"In &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/kestra-software-architecture-1024x576.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/kestra-software-architecture-1024x576.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/kestra-software-architecture-1024x576.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":2027,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/implementing-a-lock-in-elasticsearch\/","url_meta":{"origin":2196,"position":2},"title":"Implementing a lock in Elasticsearch","author":"admin","date":"Friday November 28th, 2025","format":false,"excerpt":"At Kestra, the workflow orchestration and scheduling platform I work for, we have two repository implementations: JDBC (with support for H2, MySQL, and Postgres) and Elasticsearch. In JDBC, locking a record for processing is fairly easy: 1. SELECT FOR UPDATE ... WHERE ... will place a lock on the record(s)\u2026","rel":"","context":"In &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1847,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/jooq-tip-ne-convertissez-pas-jsonb-en-string\/","url_meta":{"origin":2196,"position":3},"title":"jOOQ tip: don&#8217;t convert JSONB to a String","author":"admin","date":"Wednesday October 23rd, 2024","format":false,"excerpt":"A few weeks ago, while investigating possible performance improvements for Kestra's JDBC backend, I noticed that a method we were using to map an entity to be persisted in the database into its JSONB representation was taking up a lot of time in our CPU profiles. In the following flame\u2026","rel":"","context":"In &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/366507373-c44206a5-0085-43cc-902e-97756319b0ea-1024x737.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/366507373-c44206a5-0085-43cc-902e-97756319b0ea-1024x737.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/366507373-c44206a5-0085-43cc-902e-97756319b0ea-1024x737.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":1611,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/introduction-a-kestra\/","url_meta":{"origin":2196,"position":4},"title":"Introduction to Kestra","author":"admin","date":"Monday March  6th, 2023","format":false,"excerpt":"Kestra is an open-source data orchestrator and scheduler. With Kestra, data workflows, called flows, use the YAML format and are executed by its engine via an API call, the user interface, or a trigger (webhook, schedule, SQL query, Pub\/Sub message, ...). The important notions of Kestra are : The flow:\u2026","rel":"","context":"In &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/kestra-01-1024x267.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/kestra-01-1024x267.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/kestra-01-1024x267.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":1005,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/informatique\/quarkus-et-testcontainers\/","url_meta":{"origin":2196,"position":5},"title":"Quarkus and Testcontainers","author":"admin","date":"Monday February 17th, 2020","format":false,"excerpt":"If you did not know Quarkus, here is an introductory article: Zoom sur Quarkus (french). Quarkus offers Unit Test (TU) support with JUnit 5 via the @QuarkusTest annotation, documentation for Quarkus TU support can be found here. Here is an example of a TU from the Hibernate ORM Quickstart :\u2026","rel":"","context":"In &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/posts\/2196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/comments?post=2196"}],"version-history":[{"count":7,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/posts\/2196\/revisions"}],"predecessor-version":[{"id":2205,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/posts\/2196\/revisions\/2205"}],"wp:attachment":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/media?parent=2196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/categories?post=2196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/wp-json\/wp\/v2\/tags?post=2196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}