
{"id":4462,"date":"2021-04-13T09:01:26","date_gmt":"2021-04-13T08:01:26","guid":{"rendered":"http:\/\/dasini.net\/blog\/?p=4462"},"modified":"2021-09-20T10:49:12","modified_gmt":"2021-09-20T09:49:12","slug":"heatwave-a-mysql-cloud-feature-to-speed-up-your-queries","status":"publish","type":"post","link":"https:\/\/dasini.net\/blog\/2021\/04\/13\/heatwave-a-mysql-cloud-feature-to-speed-up-your-queries\/","title":{"rendered":"HeatWave &#8211; A MySQL cloud feature to speed up your queries"},"content":{"rendered":"\n<figure class=\"wp-block-image is-style-rounded\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/cloud_from_above_by_Olivier_Dasini_1632x918.JPG\" alt=\"Cloud from above by Olivier DASINI\"\/><\/figure>\n\n\n\n<p>If you have (too) long running select queries it is probably because of lack of relevant indexes, problematic schema that lead to poor queries or inadequate hardware.<\/p>\n\n\n\n<p>That said, sometime even if you doing it right, the query execution time could be too long regarding of what the application or your users expect. It is often true for reporting, real time analytics or BI queries.<\/p>\n\n\n\n<p>At Oracle we have developed <strong><a href=\"https:\/\/www.oracle.com\/mysql\/heatwave\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Heatwave, high-performance analytics engine for MySQL\">HeatWave<\/a><\/strong>, that allow you to easily <strong><a href=\"https:\/\/www.oracle.com\/mysql\/heatwave\/performance\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"run high performance analytics\">run high performance analytics<\/a><\/strong> against your MySQL database.<\/p>\n\n\n\n<p>To be more precise, <strong><a href=\"https:\/\/www.oracle.com\/mysql\/heatwave\/\" target=\"_blank\" rel=\"noreferrer noopener\">HeatWave<\/a><\/strong> is a massively-scalable integrated analytics engine for <a href=\"https:\/\/www.mysql.com\/cloud\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"MySQL Database Service\"><strong>MySQL Database Service<\/strong><\/a> (MDS), the MySQL DBaaS in <strong><a href=\"https:\/\/www.oracle.com\/cloud\/\" target=\"_blank\" rel=\"noreferrer noopener\">Oracle Cloud Infrastructure<\/a><\/strong> (OCI).<\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/dev.mysql.com\/doc\/heatwave\/en\/images\/heatwave-architecture.png?ssl=1\" alt=\"\"\/><figcaption>MySQL HeatWave Architecture<\/figcaption><\/figure><\/div>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Some key points of HeatWave:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Single <strong>MySQL<\/strong> database for<strong> OLTP &amp; analytics<\/strong> applications<\/li><li>All <strong>existing applications<\/strong> work <strong>without any changes<\/strong><\/li><li>Extreme <strong>performance<\/strong>: <ul><li><a href=\"https:\/\/www.oracle.com\/mysql\/heatwave\/performance\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>400x<\/strong> faster than <strong>MySQL<\/strong>, scales to thousands of cores<\/a><\/li><li><a href=\"https:\/\/www.oracle.com\/mysql\/heatwave\/performance\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"1100X faster than Amazon Aurora\"><strong>1100x<\/strong> faster than <strong>Amazon Aurora<\/strong><\/a><\/li><li><a href=\"https:\/\/www.oracle.com\/mysql\/heatwave\/performance\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>2.7x<\/strong> faster than <strong>Amazon Redshift<\/strong><\/a><\/li><\/ul><\/li><\/ul>\n\n\n\n<p>If your application already use a MySQL database that is not <strong>MySQL Database Service<\/strong>, you can still use <strong>HeatWave<\/strong>, thanks to the <a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/mysql-database\/doc\/replication.html\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Inbound Replication\">Inbound Replication<\/a> feature.<\/p>\n\n\n\n<p>This is basically what you architecture will look like<\/p>\n\n\n\n<div class=\"wp-block-image is-style-default\"><figure class=\"aligncenter size-large is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/04\/MySQL-Database-Service-HeatWave-Replication-800x338.png?resize=830%2C351\" alt=\"\" class=\"wp-image-4525\" width=\"830\" height=\"351\" srcset=\"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/04\/MySQL-Database-Service-HeatWave-Replication.png?resize=800%2C338&amp;ssl=1 800w, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/04\/MySQL-Database-Service-HeatWave-Replication.png?resize=300%2C127&amp;ssl=1 300w, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/04\/MySQL-Database-Service-HeatWave-Replication.png?resize=768%2C324&amp;ssl=1 768w, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/04\/MySQL-Database-Service-HeatWave-Replication.png?w=987&amp;ssl=1 987w\" sizes=\"auto, (max-width: 830px) 100vw, 830px\" \/><figcaption>Inbound Replication with MySQL Database Service<\/figcaption><\/figure><\/div>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Your \u00ab\u00a0problematic\u00a0\u00bb select queries will be running on MDS (with HeatWave plugin enabled).<\/p>\n\n\n\n<p>Create this architecture is pretty simple, this is the topic of this article&#8230;<\/p>\n\n\n\n<div style=\"height:75px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong><span style=\"text-decoration: underline;\">Assumptions<\/span><\/strong> <br>You have an application and a MySQL instance somewhere (on-premise \/ public | private cloud \/ on the moon, &#8230;), called <em>10.0.1.9 <\/em>in this article. <br>You&rsquo;ve already created your HeatWave instance, called <em>MDSHW<\/em> <em>(10.0.1.10)<\/em> in this article.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/04\/MySQL-Database-Service-Choice-800x73.png?resize=843%2C78\" alt=\"\" class=\"wp-image-4547\" width=\"843\" height=\"78\" srcset=\"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/04\/MySQL-Database-Service-Choice.png?resize=800%2C73&amp;ssl=1 800w, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/04\/MySQL-Database-Service-Choice.png?resize=300%2C27&amp;ssl=1 300w, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/04\/MySQL-Database-Service-Choice.png?resize=768%2C70&amp;ssl=1 768w, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/04\/MySQL-Database-Service-Choice.png?w=1225&amp;ssl=1 1225w\" sizes=\"auto, (max-width: 843px) 100vw, 843px\" \/><\/figure><\/div>\n\n\n\n<p><br>Not yet created? Don&rsquo;t worry it is quite easy : <a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/mysql-database\/doc\/heatwave1.html\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Getting Started with MySQL Database Service\">MySQL Database Service with a HeatWave cluster<\/a><\/p>\n\n\n\n<p>Last but not least, you want to <span style=\"text-decoration: underline;\">dramatically improve the response time<\/span> of your select queries.<\/p>\n\n\n\n<p><br>You can take advantage of the power of HeatWave, by <strong>setup a replication channel between your MySQL instance and a MySQL Database Service with a HeatWave cluster<\/strong>.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>For simplicity, in this blog post the MySQL instance is on OCI. However this architecture is also relevant with the DB out of OCI. <br>In that case you will need a <span style=\"text-decoration: underline;\">VPN<\/span> (e.g. <a href=\"https:\/\/lefred.be\/content\/using-openvpn-with-mysql-database-service\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Using OpenVPN with MySQL Database Service\">Using OpenVPN with MySQL Database Service<\/a>).<\/p>\n\n\n\n<p>Also for simplicity, I&rsquo;m using<strong> MySQL 8.0<\/strong>. However, the following architecture is also relevant with <strong>MySQL 5.7<\/strong>.<br>To understand how to setup a <span style=\"text-decoration: underline;\">replication channel from MySQL 5.7 to MySQL Database Service<\/span>, you can read : <a href=\"http:\/\/dasini.net\/blog\/2021\/01\/26\/replicate-from-mysql-5-7-to-mysql-database-service\/\" target=\"_blank\" rel=\"noreferrer noopener\">Replicate from MySQL 5.7 to MySQL Database Service<\/a>.<\/p>\n\n\n\n<div style=\"height:75px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong><span style=\"text-decoration: underline;\">What is the plan<\/span>?<\/strong><\/p>\n\n\n\n<p>Assuming we already have the application and a MySQL 8.0 database running, we will:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Create a dedicated replication user on the source<\/li><li>Create a dump of the MySQL instance <\/li><li>Load the dump into MySQL Database Service with HeatWave<\/li><li>Create a replication channel on MySQL Database Service with HeatWave<\/li><li>Enable a HeatWave cluster <\/li><\/ol>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Create a dedicated replication user on the source<\/h2>\n\n\n\n<p>Connect to the MySQL source instance <em>(10.0.1.9)<\/em>, using <a href=\"https:\/\/dev.mysql.com\/doc\/mysql-shell\/8.0\/en\/\" target=\"_blank\" rel=\"noreferrer noopener\">MySQL Shell<\/a>: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$\nmysqlsh root@localhost:3306 --sql<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>then create the replication user:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MySQL  localhost:3306 ssl SQL &gt; \nCREATE USER rpl@'10.0.1.%' IDENTIFIED BY 'Rpl1234_' REQUIRE SSL; <\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>with his relevant privileges:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MySQL  localhost:3306 ssl SQL &gt; \nGRANT REPLICATION SLAVE on *.* to rpl@'10.0.1.%';<\/code><\/pre>\n\n\n\n<p><em>Simple!<\/em><\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Create a dump of the MySQL instance<\/h2>\n\n\n\n<p>If you think <em>mysqldump<\/em> (or <em>mysqlpump<\/em>) when you heard \u00ab\u00a0<strong>dump<\/strong>\u00a0\u00bb then it is time to upgrade your knowledge!!! \ud83d\ude42<\/p>\n\n\n\n<p>When using MySQL 8.0 or even 5.7, forget these 2 tools and please welcome <strong>MySQL Shell<\/strong> <a href=\"https:\/\/dev.mysql.com\/doc\/mysql-shell\/8.0\/en\/mysql-shell-utilities.html\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>utilities<\/strong><\/a> and especially its <a href=\"https:\/\/dev.mysql.com\/doc\/mysql-shell\/8.0\/en\/mysql-shell-utilities-load-dump.html\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>load<\/strong><\/a> \/ <a href=\"https:\/\/dev.mysql.com\/doc\/mysql-shell\/8.0\/en\/mysql-shell-utilities-dump-instance-schema.html\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Instance Dump Utility, Schema Dump Utility, and Table Dump Utility\"><strong>dump<\/strong><\/a> tools &#8211; you&rsquo;ll thank me later  \ud83d\ude09<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MySQL  localhost:3306 ssl JS &gt; \nutil.dumpInstance(\"\/backup\/myDump20210316\", {ocimds: true, threads: 10, compatibility: &#91;\"force_innodb\", \"strip_definers\", \"strip_restricted_grants\", \"strip_tablespaces\"]})<\/code><\/pre>\n\n\n\n<p>Please note&nbsp;<strong><em>ocimds<\/em><\/strong>&nbsp;&amp;&nbsp;<strong><em>compatibility<\/em><\/strong>&nbsp;options. <br>These are very important in order to be able to load your data into MDS.<\/p>\n\n\n\n<p>Details are available in this great <a href=\"http:\/\/dasini.net\/blog\/en\/author\/anastasie\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"http:\/\/dasini.net\/blog\/en\/author\/anastasie\/\">Anastasia<\/a>&lsquo;s article (<a href=\"http:\/\/dasini.net\/blog\/2020\/12\/17\/mysql-shell-the-new-era\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"MySQL SHELL \u2013 The new era\"><\/a><a href=\"http:\/\/dasini.net\/blog\/2020\/12\/17\/mysql-shell-the-new-era\/\">MySQL SHELL \u2013 The new era<\/a>) and obviously in the&nbsp;<a href=\"https:\/\/dev.mysql.com\/doc\/mysql-shell\/8.0\/en\/mysql-shell-utilities-dump-instance-schema.html\" target=\"_blank\" rel=\"noreferrer noopener\">documentation<\/a>.<\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p> In this scenario the dump is stored locally. But MySQL Shell also allow you to store your dump into an <a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Object\/Concepts\/objectstorageoverview.htm\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Overview of Object Storage\">OCI Object Storage Bucket<\/a>. <br>This could be a better alternative if your data set is large.<\/p>\n\n\n\n<p><em>Super simple!<\/em><\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Load the dump into MySQL Database Service with HeatWave<\/h2>\n\n\n\n<p>Now it is the time to load the dump into MySQL Database Service with HeatWave <em>(10.0.1.10)<\/em>.<\/p>\n\n\n\n<p>MySQL Shell <a href=\"https:\/\/dev.mysql.com\/doc\/mysql-shell\/8.0\/en\/mysql-shell-utilities-load-dump.html\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Dump Loading Utility\">loadDump<\/a> utility is even more amazing than you think!<br>It allows you to <strong>start loading in parallel the dump even if it is not completed<\/strong> yet \ud83d\ude42<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mysqlsh root@10.0.1.10:3306 <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>MySQL  10.0.1.10:3306 ssl JS &gt; \nutil.loadDump(\"\/backup\/myDump20210316\", {updateGtidSet: \"replace\", threads: 10, waitDumpTimeout: 1800})<\/code><\/pre>\n\n\n\n<p>Please note the&nbsp;<strong><em>updateGtidSet<\/em><\/strong>&nbsp;option.<br>Documentation is available&nbsp;<a href=\"https:\/\/dev.mysql.com\/doc\/mysql-shell\/8.0\/en\/mysql-shell-utilities-load-dump.html\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/p>\n\n\n\n<p><em>Very simple!<\/em><\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Create a replication channel on MySQL Database Service with HeatWave<\/h2>\n\n\n\n<p>This step is even easier than the other \ud83d\ude42 because most of the work will be done using the <a href=\"https:\/\/www.oracle.com\/cloud\/free\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Oracle Cloud Free Tier - \">OCI<\/a> console.<br>I already described it in <a href=\"http:\/\/dasini.net\/blog\/2021\/01\/26\/replicate-from-mysql-5-7-to-mysql-database-service\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Replicate from MySQL 5.7 to MySQL Database Service\">this article<\/a> and you&rsquo;ll find all the details in the <a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/mysql-database\/doc\/replication.html\" target=\"_blank\" rel=\"noreferrer noopener\">documentation<\/a>.<\/p>\n\n\n\n<p>Below the main stages.<\/p>\n\n\n\n<p>The feature we are looking for is named <em><strong>Channel<\/strong><\/em>.<br>You can find it by clicking on \u00ab\u00a0<em><span style=\"text-decoration: underline;\">MySQL<\/span><\/em>\u00a0\u00bb then \u00ab\u00a0<em><span style=\"text-decoration: underline;\">Channel<\/span><\/em>\u00a0\u00bb and finally push the \u00ab\u00a0<em><span style=\"text-decoration: underline;\">Create Channel<\/span><\/em>\u00a0\u00bb button<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/MDS_create_channel.png\" alt=\"Create Inbound MySQL Replication in MySQL Database Service in OCI\"\/><figcaption>Create a replication channel on MySQL Database Service<\/figcaption><\/figure>\n\n\n\n<div style=\"height:75px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Then fill the form:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><em><span style=\"text-decoration: underline;\">Create in Compartment<\/span><\/em>: Choose the right Compartment<\/p>\n\n\n\n<p>Source Connection &#8211; Configure Connection to the MySQL Source<br><em><span style=\"text-decoration: underline;\">Hostname<\/span><\/em>: 10.0.0.9<\/p>\n\n\n\n<p><em><span style=\"text-decoration: underline;\">Username<\/span><\/em>: rpl  <br><em>(from the replication user created on the source)<\/em><\/p>\n\n\n\n<p><em><span style=\"text-decoration: underline;\">Password<\/span><\/em>: Rpl1234_<br><em>(from the replication user created on the source)<\/em><\/p>\n\n\n\n<p><em><span style=\"text-decoration: underline;\">SSL Mode<\/span><\/em>: &#8211; set when create the replication user &#8211;<br>Required (REQUIRED)<br>Establish an encrypted connection.<\/p>\n\n\n\n<p>Target &#8211; Configure the DB System target<br><em><span style=\"text-decoration: underline;\">Select a DB System<\/span><\/em>: MDSHW<\/p>\n\n\n\n<div style=\"height:75px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Finally, push the <em><strong>Create Channel<\/strong><\/em> button&#8230; et voil\u00e0!<\/p>\n\n\n\n<p>Wait for the Channel icon become green (ACTIVE)\u2026 <\/p>\n\n\n\n<div style=\"height:75px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>You can confirm the creation of the replication channel with the command <strong><a href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/show-replica-status.html\" target=\"_blank\" rel=\"noreferrer noopener\">SHOW REPLICA STATUS<\/a><\/strong>\\G or run the following query using the replication channel name (default:&nbsp;<em>replication_channel<\/em>) :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MySQL  10.0.1.10:3306 ssl SQL &gt; \nSELECT \n   SERVICE_STATE, \n   HOST, \n   USER, \n   PORT,\n   CHANNEL_NAME\nFROM performance_schema.replication_connection_configuration \n   INNER JOIN performance_schema.replication_applier_status \n      USING (CHANNEL_NAME) \nWHERE CHANNEL_NAME = 'replication_channel'\\G\n*************************** 1. row ***************************\nSERVICE_STATE: ON\n         HOST: 10.0.0.9\n         USER: rpl\n         PORT: 3306\n CHANNEL_NAME: replication_channel<\/code><\/pre>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Enable&nbsp;a HeatWave cluster<\/h2>\n\n\n\n<p>The last stage covered in this article is how to enable the HeatWave cluster.<\/p>\n\n\n\n<p>You must choose the number of node (2 minimum), it depends of the size of the data you want to put in HeatWave. <br>The \u00ab\u00a0<strong>Estimate Node Count<\/strong>\u00a0\u00bb feature will help you.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/04\/Configure-Heatwave-Cluster-800x252.png?resize=838%2C264\" alt=\"\" class=\"wp-image-4549\" width=\"838\" height=\"264\" srcset=\"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/04\/Configure-Heatwave-Cluster.png?resize=800%2C252&amp;ssl=1 800w, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/04\/Configure-Heatwave-Cluster.png?resize=300%2C95&amp;ssl=1 300w, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/04\/Configure-Heatwave-Cluster.png?resize=768%2C242&amp;ssl=1 768w, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/04\/Configure-Heatwave-Cluster.png?w=1199&amp;ssl=1 1199w\" sizes=\"auto, (max-width: 838px) 100vw, 838px\" \/><figcaption>Enable&nbsp;a HeatWave cluster<\/figcaption><\/figure><\/div>\n\n\n\n<p>Then click <strong>Add HeatWave Cluster<\/strong> button.<\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong><span style=\"text-decoration: underline;\">What next<\/span><\/strong>?<\/p>\n\n\n\n<p>There are some data preparation and finally load the data into the HeatWave cluster.<\/p>\n\n\n\n<p>But that would be for another article \ud83d\ude42<\/p>\n\n\n\n<p>Obviously all these information are available in the <a href=\"https:\/\/dev.mysql.com\/doc\/heatwave\/en\/heatwave-introduction.html\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"HeatWave User Guide\">HeatWave User Guide<\/a>.<\/p>\n\n\n\n<div style=\"height:150px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">P\u00e9roraison<\/h2>\n\n\n\n<p>We continuously try to push the limits to improve <a href=\"https:\/\/dev.mysql.com\/downloads\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"MySQL Community Downloads\">MySQL<\/a>, adding new features (check <a href=\"https:\/\/mysqlserverteam.com\/the-complete-list-of-new-features-in-mysql-8-0\/\" target=\"_blank\" rel=\"noreferrer noopener\">The complete list of new features in MySQL 8.0<\/a>) to allow you to reach your business objectives. <\/p>\n\n\n\n<p>Obviously, this is also true for <a href=\"https:\/\/www.oracle.com\/mysql\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"MySQL Database Service\">MySQL Database Service<\/a>. <br><strong><a href=\"https:\/\/www.oracle.com\/mysql\/heatwave\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"MySQL Database Service with HeatWave\">HeatWave<\/a><\/strong>, the query accelerator is therefore a great example.<\/p>\n\n\n\n<p>And you know what? <br>There are plenty of good things to come \ud83d\ude42<\/p>\n\n\n\n<p>Stay tuned! <\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Oh, one last thing, you can try MySQL Database Service, HeatWave and other Oracle Cloud Infrastructure services for free.<br><a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/FreeTier\/freetier.htm#Oracle_Cloud_Infrastructure_Free_Tier\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Oracle Cloud Infrastructure Free Tier\">Click here<\/a>.<\/p>\n\n\n\n<div style=\"height:150px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">References<\/h2>\n\n\n\n<ul class=\"has-luminous-vivid-orange-color has-text-color wp-block-list\"><li><a href=\"https:\/\/www.oracle.com\/mysql\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"MySQL Database Service\">MySQL Database Service<\/a><ul><li><a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/mysql-database\/doc\/getting-started.html\" target=\"_blank\" rel=\"noreferrer noopener\">Getting Started with MySQL Database Service<\/a><\/li><\/ul><ul><li><a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/mysql-database\/doc\/replication.html#GUID-94149D15-BE97-483E-99F7-82F347AB9D0E\" target=\"_blank\" rel=\"noreferrer noopener\">MySQL Database Service &#8211; Inbound Replication<\/a><\/li><\/ul><ul><li><a href=\"https:\/\/blogs.oracle.com\/mysql\/migrate-from-on-premise-mysql-to-mysql-database-service\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Migrate from on premise MySQL to MySQL Database Service\">Migrate from on premise MySQL to MySQL Database Service<\/a><\/li><li><a href=\"https:\/\/lefred.be\/content\/using-mysql-workbench-with-mysql-database-service\/\" target=\"_blank\" rel=\"noreferrer noopener\">Using MySQL Workbench with MySQL Database Service<\/a><\/li><li><a href=\"https:\/\/www.mortensi.com\/2020\/12\/options-to-run-mysql-server-in-oci-and-use-mysql-analytics-service\/\" target=\"_blank\" rel=\"noreferrer noopener\">Options to Run MySQL Server in OCI (and use MySQL Analytics Service)<\/a><\/li><\/ul><\/li><li><a href=\"https:\/\/www.oracle.com\/mysql\/heatwave\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Heatwave\">HeatWave<\/a><ul><li><a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/mysql-database\/doc\/heatwave1.html#GUID-AD2F350D-E2AE-4AFF-BD12-54449D403F85\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"HeatWave Quickstart\">HeatWave Quickstart<\/a><\/li><\/ul><ul><li><a href=\"https:\/\/dev.mysql.com\/doc\/heatwave\/en\/heatwave-introduction.html\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"HeatWave User Guide\">HeatWave User Guide<\/a><\/li><\/ul><\/li><li><a href=\"https:\/\/www.oracle.com\/mysql\/heatwave\/performance\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Performance comparison of HeatWave with MySQL Database, Amazon Redshift, and Amazon Aurora\">Performance comparison of HeatWave with MySQL Database, Amazon Redshift, and Amazon Aurora<\/a><\/li><li><a href=\"https:\/\/www.oracle.com\/events\/live\/mysql-heatwave-innovations\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"MySQL Database Service\u2014New HeatWave Innovations\">MySQL Database Service\u2014New HeatWave Innovations<\/a><\/li><li><a href=\"https:\/\/www.mysql.com\/fr\/why-mysql\/benchmarks\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"MySQL Benchmarks\">MySQL Benchmarks<\/a><\/li><li><a href=\"https:\/\/dev.mysql.com\/doc\/mysql-shell\/8.0\/en\/mysql-shell-utilities.html\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"MySQL Shell Utilities\">MySQL Shell<\/a><ul><li><a href=\"https:\/\/dev.mysql.com\/doc\/mysql-shell\/8.0\/en\/mysql-shell-utilities-dump-instance-schema.html\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Instance Dump Utility, Schema Dump Utility, and Table Dump Utility ?\">Instance Dump Utility, Schema Dump Utility, and Table Dump Utility<\/a><\/li><li><a href=\"https:\/\/dev.mysql.com\/doc\/mysql-shell\/8.0\/en\/mysql-shell-utilities-load-dump.html\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Dump Loading Utility\">Dump Loading Utility<\/a><\/li><\/ul><\/li><li><a href=\"https:\/\/www.oracle.com\/cloud\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Oracle Cloud Infrastructure (OCI)\">Oracle Cloud Infrastructure (OCI)<\/a><ul><li><strong><a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/FreeTier\/freetier.htm#Oracle_Cloud_Infrastructure_Free_Tier\" target=\"_blank\" rel=\"noreferrer noopener\">Oracle Cloud Infrastructure Free Tier<\/a><\/strong><\/li><\/ul><ul><li><a href=\"https:\/\/docs.cloud.oracle.com\/en-us\/iaas\/Content\/Object\/Concepts\/objectstorageoverview.htm\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Overview of Object Storage\">Overview of Object Storage<\/a><\/li><\/ul><\/li><li><a href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/replication.html\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"MySQL Replication\">MySQL Replication<\/a><\/li><\/ul>\n\n\n\n<div style=\"height:161px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><a href=\"https:\/\/twitter.com\/freshdaz\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"@freshdaz on Twitter\">Follow me on twitter<\/a><\/p>\n\n\n\n<p>Watch my videos on my <a href=\"https:\/\/www.youtube.com\/channel\/UC12TulyJsJZHoCmby3Nm3WQ\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Olivier's MySQL Channel\">YouTube channel<\/a> and <a href=\"https:\/\/www.youtube.com\/channel\/UC12TulyJsJZHoCmby3Nm3WQ\/?sub_confirmation=1\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Subscribe\">subscribe<\/a>.<\/p>\n\n\n\n<p>My <a href=\"https:\/\/www.slideshare.net\/freshdaz\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Olivier DASINI on Slideshare\">Slideshare account<\/a>.<\/p>\n\n\n\n\n\n<p class=\"has-vivid-red-color has-text-color\">Thanks for using MySQL!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you have (too) long running select queries it is probably because of lack of relevant indexes, problematic schema that lead to poor queries or inadequate hardware.<\/p>\n<p>That said, sometime even if you doing it right, the query execution time could be too long regarding of what the application or your users expect. It is often true for reporting, real time analytics or BI queries.<\/p>\n<p>At Oracle we have developed Heatwave, that allow you to easily run high performance analytics against your MySQL database.<\/p>\n<p>To be more precise, Heatwave is a massively-scalable integrated analytics engine for MySQL Database Service (MDS), the MySQL DBaaS in Oracle Cloud Infrastructure (OCI).<\/p>\n<p>Some key points of Heatwave:<\/p>\n<p> &#8211; Single MySQL database for OLTP &#038; analytics applications<br \/>\n &#8211; All existing applications work without any changes<br \/>\n &#8211; Extreme performance:<br \/>\n    + 400x faster than MySQL, scales to thousands of cores<br \/>\n    + 1100x faster than Amazon<br \/>\nAurora<br \/>\n    + 2.7x faster than Amazon Redshift<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"footnotes":""},"categories":[1638,1637,203,339],"tags":[306,1661,1639,1640],"class_list":["post-4462","post","type-post","status-publish","format-standard","hentry","category-cloud","category-mds","category-mysql-en","category-tuto-en","tag-cloud","tag-heatwave","tag-mds","tag-oci"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9LfWW-19Y","jetpack-related-posts":[{"id":8285,"url":"https:\/\/dasini.net\/blog\/2025\/09\/30\/ask-your-database-anything-natural-language-to-sql-in-mysql-heatwave\/","url_meta":{"origin":4462,"position":0},"title":"Ask Your Database Anything: Natural Language to SQL in MySQL HeatWave","author":"Olivier DASINI","date":"30 septembre 2025","format":false,"excerpt":"Natural Language to SQL in MySQL HeatWave makes data accessible to everyone, not just SQL experts. By turning plain English into optimized queries, it removes barriers and speeds up insights. While best practices help ensure accuracy, the feature already shows how LLMs are transforming the way we work with data.\u2026","rel":"","context":"Dans &quot;AI&quot;","block_context":{"text":"AI","link":"https:\/\/dasini.net\/blog\/category\/ai\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2025\/09\/nl2sql-demo3.gif?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2025\/09\/nl2sql-demo3.gif?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2025\/09\/nl2sql-demo3.gif?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2025\/09\/nl2sql-demo3.gif?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2025\/09\/nl2sql-demo3.gif?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2025\/09\/nl2sql-demo3.gif?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":5762,"url":"https:\/\/dasini.net\/blog\/2022\/06\/09\/explore-visualize-your-mysql-heatwave-data-with-superset\/","url_meta":{"origin":4462,"position":1},"title":"Explore &#038; visualize your MySQL HeatWave data with Superset","author":"Olivier DASINI","date":"9 juin 2022","format":false,"excerpt":"In this article I will show you how to properly configure Apache Superset in order to take advantage of a high performance, in-memory query accelerator: MySQL HeatWave.","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql-en\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2022\/06\/Configure-Heatwave-Cluster.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2022\/06\/Configure-Heatwave-Cluster.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2022\/06\/Configure-Heatwave-Cluster.png?resize=525%2C300 1.5x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2022\/06\/Configure-Heatwave-Cluster.png?resize=700%2C400 2x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2022\/06\/Configure-Heatwave-Cluster.png?resize=1050%2C600 3x"},"classes":[]},{"id":8393,"url":"https:\/\/dasini.net\/blog\/2025\/10\/07\/let-your-ai-dba-assistant-write-your-mysql-queries\/","url_meta":{"origin":4462,"position":2},"title":"Let Your AI DBA Assistant Write Your MySQL Queries","author":"Olivier DASINI","date":"7 octobre 2025","format":false,"excerpt":"Having explored the innovative MySQL HeatWave technology that converts Natural Language into SQL (Ask Your Database Anything: Natural Language to SQL in MySQL HeatWave), our next article in this series, dives into a practical use case demonstrating how an AI DBA Assistant can significantly simplify your query generation workflow. In\u2026","rel":"","context":"Dans &quot;AI&quot;","block_context":{"text":"AI","link":"https:\/\/dasini.net\/blog\/category\/ai\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2025\/10\/reltime_monitor.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2025\/10\/reltime_monitor.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2025\/10\/reltime_monitor.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2025\/10\/reltime_monitor.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":6960,"url":"https:\/\/dasini.net\/blog\/2024\/09\/10\/heatwave-genai-sentiment-analysis-made-easy-peasy\/","url_meta":{"origin":4462,"position":3},"title":"HeatWave GenAI: Sentiment Analysis Made Easy-Peasy","author":"Olivier DASINI","date":"10 septembre 2024","format":false,"excerpt":"This new AI tech, called generative AI (or GenAI), can dive deep into what people are saying and tell us if they\u2019re feeling positive, negative, or neutral. Let\u2019s see how HeatWave GenAI, can help you to enhance your understanding of customer sentiment, improve decision-making, and drive business success.","rel":"","context":"Dans &quot;HeatWave&quot;","block_context":{"text":"HeatWave","link":"https:\/\/dasini.net\/blog\/category\/heatwave-en\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2024\/07\/hw_product_image.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2024\/07\/hw_product_image.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2024\/07\/hw_product_image.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2024\/07\/hw_product_image.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2024\/07\/hw_product_image.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2024\/07\/hw_product_image.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":5915,"url":"https:\/\/dasini.net\/blog\/2022\/07\/05\/interactively-explore-visualize-your-mysql-heatwave-data-with-apache-zeppelin\/","url_meta":{"origin":4462,"position":4},"title":"Interactively explore &#038; visualize your MySQL HeatWave data with Apache Zeppelin","author":"Olivier DASINI","date":"5 juillet 2022","format":false,"excerpt":"In this article I will show you how to properly configure Apache Zeppelin in order to take advantage of the Analytics and Machine Learning capabilities of MySQL HeatWave the MySQL in-memory query accelerator.","rel":"","context":"Dans &quot;Machine Learning&quot;","block_context":{"text":"Machine Learning","link":"https:\/\/dasini.net\/blog\/category\/machine-learning-en\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2022\/06\/Configure-Heatwave-Cluster.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2022\/06\/Configure-Heatwave-Cluster.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2022\/06\/Configure-Heatwave-Cluster.png?resize=525%2C300 1.5x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2022\/06\/Configure-Heatwave-Cluster.png?resize=700%2C400 2x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2022\/06\/Configure-Heatwave-Cluster.png?resize=1050%2C600 3x"},"classes":[]},{"id":4774,"url":"https:\/\/dasini.net\/blog\/2021\/08\/24\/discovering-mysql-database-service-episode-4-dump-your-mysql-data-into-an-object-storage-bucket\/","url_meta":{"origin":4462,"position":5},"title":"Discovering MySQL Database Service &#8211; Episode 4 &#8211; Dump your MySQL data into an Object Storage bucket","author":"Olivier DASINI","date":"24 ao\u00fbt 2021","format":false,"excerpt":"This is the fourth episode of \u201cDiscovering MySQL Database Service\u201c, a series of tutorials where I will show you, step by step, how to use MySQL Database Service and some other Oracle Cloud Infrastructure services. In the previous episode we\u2019ve created our Virtual Cloud Network, that provides you with complete\u2026","rel":"","context":"Dans &quot;Cloud&quot;","block_context":{"text":"Cloud","link":"https:\/\/dasini.net\/blog\/category\/cloud\/"},"img":{"alt_text":"MySQL Database Service","src":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/06\/MDS_car_801x600.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/06\/MDS_car_801x600.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/06\/MDS_car_801x600.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/06\/MDS_car_801x600.png?resize=700%2C400&ssl=1 2x"},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/4462","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/comments?post=4462"}],"version-history":[{"count":128,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/4462\/revisions"}],"predecessor-version":[{"id":5361,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/4462\/revisions\/5361"}],"wp:attachment":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/media?parent=4462"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/categories?post=4462"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/tags?post=4462"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}