{"id":8492,"date":"2018-06-19T21:34:51","date_gmt":"2018-06-19T19:34:51","guid":{"rendered":"https:\/\/www.salvis.com\/blog\/?p=8492"},"modified":"2023-11-08T02:14:57","modified_gmt":"2023-11-08T01:14:57","slug":"memoptimized-rowstore-in-oracle-database-18c-with-oci","status":"publish","type":"post","link":"https:\/\/www.salvis.com\/blog\/2018\/06\/19\/memoptimized-rowstore-in-oracle-database-18c-with-oci\/","title":{"rendered":"MemOptimized RowStore in Oracle Database 18c with OCI"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">On June 10 2018 I blogged about the <a href=\"https:\/\/www.salvis.com\/blog\/2018\/06\/10\/memoptimized-rowstore-in-oracle-database-18c\/\">MemOptimized RowStore in Oracle Database 18c<\/a>. If you haven&#8217;t read this post, it is a good idea to catch up now. I showed that accessing a memoptimized table <code>t4<\/code> via the MemOptimized RowStore was around 60% slower than accessing a heap-organized table <code>t1<\/code>. I suspected that this disappointing result was related to my unsupported Docker environment. But I was wrong.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The next day, Chris Antognini contacted me, since he planned to talk about this feature at the <a href=\"http:\/\/www.aoug.at\/Event\/474\">AOUG Anwenderkonferenz 2018<\/a>.&nbsp;We exchanged our thoughts and shared our findings. Chris did his tests in the Oracle cloud and could also reproduce my test results.&nbsp;That&#8217;s interesting. Even more interesting is, that Chris translated my Java program to C and proved that the MemOptimized RowStore can be fast.&nbsp;That&#8217;s cool. But why didn&#8217;t it work in Java? It&#8217;s the same after all, right? No. The Java program used the JDBC thin driver and the C program OCI.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this blog post, I will show that OCI is a prerequisite for getting good performance out of the MemOptimized RowStore.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Program<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I use the Java program from my previous post. I only added 3 parameters. The JDBC URL, the username and the password. Here&#8217;s the program.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">J.java &#8211; 100,000 queries<\/span><span role=\"button\" tabindex=\"0\" data-code=\"import java.sql.Connection;\nimport java.sql.DriverManager;\nimport java.sql.PreparedStatement;\nimport java.sql.ResultSet;\nimport java.sql.SQLException;\nimport oracle.jdbc.driver.OracleDriver;\npublic class J {\n   private static boolean isRunningInDatabase() {\n      return System.getProperty(&quot;oracle.jserver.version&quot;) != null;\n   }\n   public static void m(String tableName, String url, String userName, String password) throws SQLException {\n      Connection conn;\n      if (isRunningInDatabase()) {\n         conn = new OracleDriver().defaultConnection();\n      } else {\n         conn = DriverManager.getConnection(\n           url, userName, password);\n      }\n      conn.setAutoCommit(false);\n      long start = System.currentTimeMillis();\n      String query = &quot;SELECT value FROM &quot; + tableName + &quot; WHERE key = ?&quot;;      \n      PreparedStatement ps = conn.prepareStatement(query);\n      for (long i = 1; i <= 100000; i++) {\n         ps.setLong(1, i);\n         ResultSet rs = ps.executeQuery();\n         while (rs.next()) {\n            rs.getString(&quot;value&quot;);\n         }\n         rs.close();\n      }\n      ps.close();\n      if (!isRunningInDatabase()) {\n         conn.close();\n      }\n      long end = System.currentTimeMillis();\n      System.out.println(&quot;read 100000 rows from &quot; + tableName + &quot; in &quot; +\n         String.valueOf((double) (end-start)\/1000) + &quot; seconds via &quot; + url + &quot;.&quot;);      \n   }\n   public static void main(String[] args) throws SQLException {\n      m(args[0], args[1], args[2], args[3]);\n   }\n}\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">import<\/span><span style=\"color: #D4D4D4\"> java.sql.Connection;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">import<\/span><span style=\"color: #D4D4D4\"> java.sql.DriverManager;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">import<\/span><span style=\"color: #D4D4D4\"> java.sql.PreparedStatement;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">import<\/span><span style=\"color: #D4D4D4\"> java.sql.ResultSet;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">import<\/span><span style=\"color: #D4D4D4\"> java.sql.SQLException;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">import<\/span><span style=\"color: #D4D4D4\"> oracle.jdbc.driver.OracleDriver;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">public<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">class<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4EC9B0\">J<\/span><span style=\"color: #D4D4D4\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">private<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">static<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4EC9B0\">boolean<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">isRunningInDatabase<\/span><span style=\"color: #D4D4D4\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">System<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">getProperty<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&quot;oracle.jserver.version&quot;<\/span><span style=\"color: #D4D4D4\">) != <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">public<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">static<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4EC9B0\">void<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">m<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #4EC9B0\">String<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">tableName<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #4EC9B0\">String<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">url<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #4EC9B0\">String<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">userName<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #4EC9B0\">String<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">password<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">throws<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4EC9B0\">SQLException<\/span><span style=\"color: #D4D4D4\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #4EC9B0\">Connection<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">conn<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #DCDCAA\">isRunningInDatabase<\/span><span style=\"color: #D4D4D4\">()) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         conn = <\/span><span style=\"color: #C586C0\">new<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">OracleDriver<\/span><span style=\"color: #D4D4D4\">().<\/span><span style=\"color: #DCDCAA\">defaultConnection<\/span><span style=\"color: #D4D4D4\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      } <\/span><span style=\"color: #C586C0\">else<\/span><span style=\"color: #D4D4D4\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         conn = <\/span><span style=\"color: #9CDCFE\">DriverManager<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">getConnection<\/span><span style=\"color: #D4D4D4\">(<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">           url, userName, password);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #9CDCFE\">conn<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">setAutoCommit<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #569CD6\">false<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #4EC9B0\">long<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">start<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #9CDCFE\">System<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">currentTimeMillis<\/span><span style=\"color: #D4D4D4\">();<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #4EC9B0\">String<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">query<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&quot;SELECT value FROM &quot;<\/span><span style=\"color: #D4D4D4\"> + tableName + <\/span><span style=\"color: #CE9178\">&quot; WHERE key = ?&quot;<\/span><span style=\"color: #D4D4D4\">;      <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #4EC9B0\">PreparedStatement<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">ps<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #9CDCFE\">conn<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">prepareStatement<\/span><span style=\"color: #D4D4D4\">(query);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #C586C0\">for<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #4EC9B0\">long<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">i<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">; i &lt;= <\/span><span style=\"color: #B5CEA8\">100000<\/span><span style=\"color: #D4D4D4\">; i++) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #9CDCFE\">ps<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">setLong<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">, i);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #4EC9B0\">ResultSet<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">rs<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #9CDCFE\">ps<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">executeQuery<\/span><span style=\"color: #D4D4D4\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #C586C0\">while<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #9CDCFE\">rs<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">next<\/span><span style=\"color: #D4D4D4\">()) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #9CDCFE\">rs<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">getString<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&quot;value&quot;<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #9CDCFE\">rs<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">close<\/span><span style=\"color: #D4D4D4\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #9CDCFE\">ps<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">close<\/span><span style=\"color: #D4D4D4\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> (!<\/span><span style=\"color: #DCDCAA\">isRunningInDatabase<\/span><span style=\"color: #D4D4D4\">()) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #9CDCFE\">conn<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">close<\/span><span style=\"color: #D4D4D4\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #4EC9B0\">long<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">end<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #9CDCFE\">System<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">currentTimeMillis<\/span><span style=\"color: #D4D4D4\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #9CDCFE\">System<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #9CDCFE\">out<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">println<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&quot;read 100000 rows from &quot;<\/span><span style=\"color: #D4D4D4\"> + tableName + <\/span><span style=\"color: #CE9178\">&quot; in &quot;<\/span><span style=\"color: #D4D4D4\"> +<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #9CDCFE\">String<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">valueOf<\/span><span style=\"color: #D4D4D4\">((<\/span><span style=\"color: #4EC9B0\">double<\/span><span style=\"color: #D4D4D4\">) (end-start)\/<\/span><span style=\"color: #B5CEA8\">1000<\/span><span style=\"color: #D4D4D4\">) + <\/span><span style=\"color: #CE9178\">&quot; seconds via &quot;<\/span><span style=\"color: #D4D4D4\"> + url + <\/span><span style=\"color: #CE9178\">&quot;.&quot;<\/span><span style=\"color: #D4D4D4\">);      <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">public<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">static<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4EC9B0\">void<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">main<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #4EC9B0\">String<\/span><span style=\"color: #D4D4D4\">[] <\/span><span style=\"color: #9CDCFE\">args<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">throws<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4EC9B0\">SQLException<\/span><span style=\"color: #D4D4D4\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #DCDCAA\">m<\/span><span style=\"color: #D4D4D4\">(args[<\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">], args[<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">], args[<\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">], args[<\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">]);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">I copied this program to my Docker container into the directory <code>$ORACLE_HOME\/jdbc\/lib<\/code>&nbsp;and compiled it with the following script:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">compile.sh<\/span><span role=\"button\" tabindex=\"0\" data-code=\"export rt CLASSPATH=.:.\/ojdbc8.jar\njavac J.java\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">export<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">rt<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">CLASSPATH=.:.\/ojdbc8.jar<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">javac<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">J.java<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">The Test Script<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I&#8217;ve run the tests for my <a href=\"https:\/\/www.salvis.com\/blog\/2018\/06\/10\/memoptimized-rowstore-in-oracle-database-18c\/\">previous post<\/a> from the Eclipse IDE because it was convenient for me to set a break point on line 20 to identify the Oracle process for <code>perf<\/code>. Now, I do not need to produce flame graphs. Running the test script on the server directly will also reduce the network overhead, especially when running without Oracle Net.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s the test script:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">run.sh<\/span><span role=\"button\" tabindex=\"0\" data-code=\"#\/bin\/bash\n\nrun(){\n    TABLE=${1}\n    URL=${2}\n    for ((i=1;i<=5;i++));\n    do\n        echo -n &quot;run #${i}: &quot;\n        java J ${TABLE} ${URL} ${USERNAME} ${PASSWORD}\n    done\n    echo &quot;&quot;\n} \n\nexport CLASSPATH=.:.\/ojdbc8.jar\nexport USERNAME=tvdca\nexport PASSWORD=tvdca\n\n# Thin driver\nrun t1 &quot;jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker&quot;\nrun t2 &quot;jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker&quot;\nrun t3 &quot;jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker&quot;\nrun t4 &quot;jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker&quot;\n\n# OCI driver with Oracle*Net\nrun t1 &quot;jdbc:oracle:oci:@odb&quot;\nrun t2 &quot;jdbc:oracle:oci:@odb&quot;\nrun t3 &quot;jdbc:oracle:oci:@odb&quot;\nrun t4 &quot;jdbc:oracle:oci:@odb&quot;\n\n# OCI driver without Oracle*Net\nrun t1 &quot;jdbc:oracle:oci:@&quot;\nrun t2 &quot;jdbc:oracle:oci:@&quot;\nrun t3 &quot;jdbc:oracle:oci:@&quot;\nrun t4 &quot;jdbc:oracle:oci:@&quot;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955\">#\/bin\/bash<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">run<\/span><span style=\"color: #D4D4D4\">(){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">TABLE<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #9CDCFE\">${1}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">URL<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #9CDCFE\">${2}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #C586C0\">for<\/span><span style=\"color: #D4D4D4\"> ((i=<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">;i&lt;=<\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\">;i++));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #C586C0\">do<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #DCDCAA\">echo<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">-n<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&quot;run #${<\/span><span style=\"color: #9CDCFE\">i<\/span><span style=\"color: #CE9178\">}: &quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #DCDCAA\">java<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">J<\/span><span style=\"color: #D4D4D4\"> ${<\/span><span style=\"color: #9CDCFE\">TABLE<\/span><span style=\"color: #D4D4D4\">} ${<\/span><span style=\"color: #9CDCFE\">URL<\/span><span style=\"color: #D4D4D4\">} ${<\/span><span style=\"color: #9CDCFE\">USERNAME<\/span><span style=\"color: #D4D4D4\">} ${<\/span><span style=\"color: #9CDCFE\">PASSWORD<\/span><span style=\"color: #D4D4D4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #C586C0\">done<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #DCDCAA\">echo<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">} <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">export<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">CLASSPATH<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #CE9178\">.:.\/ojdbc8.jar<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">export<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">USERNAME<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #CE9178\">tvdca<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">export<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">PASSWORD<\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #CE9178\">tvdca<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\"># Thin driver<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">run<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">t1<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&quot;jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">run<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">t2<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&quot;jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">run<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">t3<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&quot;jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">run<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">t4<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&quot;jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\"># OCI driver with Oracle*Net<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">run<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">t1<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&quot;jdbc:oracle:oci:@odb&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">run<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">t2<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&quot;jdbc:oracle:oci:@odb&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">run<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">t3<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&quot;jdbc:oracle:oci:@odb&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">run<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">t4<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&quot;jdbc:oracle:oci:@odb&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\"># OCI driver without Oracle*Net<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">run<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">t1<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&quot;jdbc:oracle:oci:@&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">run<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">t2<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&quot;jdbc:oracle:oci:@&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">run<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">t3<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&quot;jdbc:oracle:oci:@&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">run<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">t4<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&quot;jdbc:oracle:oci:@&quot;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">The Result<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s the output of the <code>run.sh<\/code> call:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">Console output of run.sh<\/span><span role=\"button\" tabindex=\"0\" data-code=\"[oracle@odb180 lib]$ .\/run.sh\nrun #1: read 100000 rows from t1 in 11.918 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.\nrun #2: read 100000 rows from t1 in 11.625 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.\nrun #3: read 100000 rows from t1 in 11.662 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.\nrun #4: read 100000 rows from t1 in 11.574 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.\nrun #5: read 100000 rows from t1 in 11.729 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.\n\nrun #1: read 100000 rows from t2 in 11.786 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.\nrun #2: read 100000 rows from t2 in 12.071 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.\nrun #3: read 100000 rows from t2 in 12.621 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.\nrun #4: read 100000 rows from t2 in 11.913 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.\nrun #5: read 100000 rows from t2 in 11.972 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.\n\nrun #1: read 100000 rows from t3 in 11.397 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.\nrun #2: read 100000 rows from t3 in 11.429 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.\nrun #3: read 100000 rows from t3 in 11.308 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.\nrun #4: read 100000 rows from t3 in 11.793 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.\nrun #5: read 100000 rows from t3 in 11.903 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.\n\nrun #1: read 100000 rows from t4 in 19.789 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.\nrun #2: read 100000 rows from t4 in 19.461 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.\nrun #3: read 100000 rows from t4 in 19.181 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.\nrun #4: read 100000 rows from t4 in 19.211 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.\nrun #5: read 100000 rows from t4 in 19.242 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.\n\nrun #1: read 100000 rows from t1 in 13.145 seconds via jdbc:oracle:oci:@odb.\nrun #2: read 100000 rows from t1 in 12.698 seconds via jdbc:oracle:oci:@odb.\nrun #3: read 100000 rows from t1 in 13.14 seconds via jdbc:oracle:oci:@odb.\nrun #4: read 100000 rows from t1 in 12.842 seconds via jdbc:oracle:oci:@odb.\nrun #5: read 100000 rows from t1 in 12.978 seconds via jdbc:oracle:oci:@odb.\n\nrun #1: read 100000 rows from t2 in 13.049 seconds via jdbc:oracle:oci:@odb.\nrun #2: read 100000 rows from t2 in 12.581 seconds via jdbc:oracle:oci:@odb.\nrun #3: read 100000 rows from t2 in 12.44 seconds via jdbc:oracle:oci:@odb.\nrun #4: read 100000 rows from t2 in 12.787 seconds via jdbc:oracle:oci:@odb.\nrun #5: read 100000 rows from t2 in 12.727 seconds via jdbc:oracle:oci:@odb.\n\nrun #1: read 100000 rows from t3 in 12.402 seconds via jdbc:oracle:oci:@odb.\nrun #2: read 100000 rows from t3 in 12.479 seconds via jdbc:oracle:oci:@odb.\nrun #3: read 100000 rows from t3 in 12.483 seconds via jdbc:oracle:oci:@odb.\nrun #4: read 100000 rows from t3 in 12.346 seconds via jdbc:oracle:oci:@odb.\nrun #5: read 100000 rows from t3 in 12.528 seconds via jdbc:oracle:oci:@odb.\n\nrun #1: read 100000 rows from t4 in 11.452 seconds via jdbc:oracle:oci:@odb.\nrun #2: read 100000 rows from t4 in 10.945 seconds via jdbc:oracle:oci:@odb.\nrun #3: read 100000 rows from t4 in 11.597 seconds via jdbc:oracle:oci:@odb.\nrun #4: read 100000 rows from t4 in 11.295 seconds via jdbc:oracle:oci:@odb.\nrun #5: read 100000 rows from t4 in 11.746 seconds via jdbc:oracle:oci:@odb.\n\nrun #1: read 100000 rows from t1 in 10.508 seconds via jdbc:oracle:oci:@.\nrun #2: read 100000 rows from t1 in 10.662 seconds via jdbc:oracle:oci:@.\nrun #3: read 100000 rows from t1 in 10.105 seconds via jdbc:oracle:oci:@.\nrun #4: read 100000 rows from t1 in 10.44 seconds via jdbc:oracle:oci:@.\nrun #5: read 100000 rows from t1 in 10.415 seconds via jdbc:oracle:oci:@.\n\nrun #1: read 100000 rows from t2 in 10.29 seconds via jdbc:oracle:oci:@.\nrun #2: read 100000 rows from t2 in 10.15 seconds via jdbc:oracle:oci:@.\nrun #3: read 100000 rows from t2 in 10.266 seconds via jdbc:oracle:oci:@.\nrun #4: read 100000 rows from t2 in 10.351 seconds via jdbc:oracle:oci:@.\nrun #5: read 100000 rows from t2 in 10.259 seconds via jdbc:oracle:oci:@.\n\nrun #1: read 100000 rows from t3 in 9.95 seconds via jdbc:oracle:oci:@.\nrun #2: read 100000 rows from t3 in 9.756 seconds via jdbc:oracle:oci:@.\nrun #3: read 100000 rows from t3 in 10.325 seconds via jdbc:oracle:oci:@.\nrun #4: read 100000 rows from t3 in 9.517 seconds via jdbc:oracle:oci:@.\nrun #5: read 100000 rows from t3 in 9.951 seconds via jdbc:oracle:oci:@.\n\nrun #1: read 100000 rows from t4 in 9.182 seconds via jdbc:oracle:oci:@.\nrun #2: read 100000 rows from t4 in 8.996 seconds via jdbc:oracle:oci:@.\nrun #3: read 100000 rows from t4 in 8.977 seconds via jdbc:oracle:oci:@.\nrun #4: read 100000 rows from t4 in 9.024 seconds via jdbc:oracle:oci:@.\nrun #5: read 100000 rows from t4 in 9.082 seconds via jdbc:oracle:oci:@.\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">[oracle@odb180 lib]$ .\/run.sh<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #1: read 100000 rows from t1 in 11.918 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #2: read 100000 rows from t1 in 11.625 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #3: read 100000 rows from t1 in 11.662 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #4: read 100000 rows from t1 in 11.574 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #5: read 100000 rows from t1 in 11.729 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #1: read 100000 rows from t2 in 11.786 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #2: read 100000 rows from t2 in 12.071 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #3: read 100000 rows from t2 in 12.621 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #4: read 100000 rows from t2 in 11.913 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #5: read 100000 rows from t2 in 11.972 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #1: read 100000 rows from t3 in 11.397 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #2: read 100000 rows from t3 in 11.429 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #3: read 100000 rows from t3 in 11.308 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #4: read 100000 rows from t3 in 11.793 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #5: read 100000 rows from t3 in 11.903 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #1: read 100000 rows from t4 in 19.789 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #2: read 100000 rows from t4 in 19.461 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #3: read 100000 rows from t4 in 19.181 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #4: read 100000 rows from t4 in 19.211 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #5: read 100000 rows from t4 in 19.242 seconds via jdbc:oracle:thin:@\/\/localhost:1521\/odb.docker.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #1: read 100000 rows from t1 in 13.145 seconds via jdbc:oracle:oci:@odb.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #2: read 100000 rows from t1 in 12.698 seconds via jdbc:oracle:oci:@odb.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #3: read 100000 rows from t1 in 13.14 seconds via jdbc:oracle:oci:@odb.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #4: read 100000 rows from t1 in 12.842 seconds via jdbc:oracle:oci:@odb.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #5: read 100000 rows from t1 in 12.978 seconds via jdbc:oracle:oci:@odb.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #1: read 100000 rows from t2 in 13.049 seconds via jdbc:oracle:oci:@odb.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #2: read 100000 rows from t2 in 12.581 seconds via jdbc:oracle:oci:@odb.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #3: read 100000 rows from t2 in 12.44 seconds via jdbc:oracle:oci:@odb.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #4: read 100000 rows from t2 in 12.787 seconds via jdbc:oracle:oci:@odb.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #5: read 100000 rows from t2 in 12.727 seconds via jdbc:oracle:oci:@odb.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #1: read 100000 rows from t3 in 12.402 seconds via jdbc:oracle:oci:@odb.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #2: read 100000 rows from t3 in 12.479 seconds via jdbc:oracle:oci:@odb.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #3: read 100000 rows from t3 in 12.483 seconds via jdbc:oracle:oci:@odb.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #4: read 100000 rows from t3 in 12.346 seconds via jdbc:oracle:oci:@odb.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #5: read 100000 rows from t3 in 12.528 seconds via jdbc:oracle:oci:@odb.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #1: read 100000 rows from t4 in 11.452 seconds via jdbc:oracle:oci:@odb.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #2: read 100000 rows from t4 in 10.945 seconds via jdbc:oracle:oci:@odb.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #3: read 100000 rows from t4 in 11.597 seconds via jdbc:oracle:oci:@odb.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #4: read 100000 rows from t4 in 11.295 seconds via jdbc:oracle:oci:@odb.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #5: read 100000 rows from t4 in 11.746 seconds via jdbc:oracle:oci:@odb.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #1: read 100000 rows from t1 in 10.508 seconds via jdbc:oracle:oci:@.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #2: read 100000 rows from t1 in 10.662 seconds via jdbc:oracle:oci:@.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #3: read 100000 rows from t1 in 10.105 seconds via jdbc:oracle:oci:@.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #4: read 100000 rows from t1 in 10.44 seconds via jdbc:oracle:oci:@.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #5: read 100000 rows from t1 in 10.415 seconds via jdbc:oracle:oci:@.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #1: read 100000 rows from t2 in 10.29 seconds via jdbc:oracle:oci:@.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #2: read 100000 rows from t2 in 10.15 seconds via jdbc:oracle:oci:@.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #3: read 100000 rows from t2 in 10.266 seconds via jdbc:oracle:oci:@.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #4: read 100000 rows from t2 in 10.351 seconds via jdbc:oracle:oci:@.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #5: read 100000 rows from t2 in 10.259 seconds via jdbc:oracle:oci:@.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #1: read 100000 rows from t3 in 9.95 seconds via jdbc:oracle:oci:@.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #2: read 100000 rows from t3 in 9.756 seconds via jdbc:oracle:oci:@.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #3: read 100000 rows from t3 in 10.325 seconds via jdbc:oracle:oci:@.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #4: read 100000 rows from t3 in 9.517 seconds via jdbc:oracle:oci:@.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #5: read 100000 rows from t3 in 9.951 seconds via jdbc:oracle:oci:@.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #1: read 100000 rows from t4 in 9.182 seconds via jdbc:oracle:oci:@.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #2: read 100000 rows from t4 in 8.996 seconds via jdbc:oracle:oci:@.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #3: read 100000 rows from t4 in 8.977 seconds via jdbc:oracle:oci:@.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #4: read 100000 rows from t4 in 9.024 seconds via jdbc:oracle:oci:@.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">run #5: read 100000 rows from t4 in 9.082 seconds via jdbc:oracle:oci:@.<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">As in my previous post, I ignore the slowest and fastest run and take the average of the remaining three results per test variant to produce a chart.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/06\/Performance.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1010\" height=\"614\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/06\/Performance.png\" alt=\"\" class=\"wp-image-8506\" srcset=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/06\/Performance.png 1010w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/06\/Performance-300x182.png 300w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/06\/Performance-768x467.png 768w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/06\/Performance-240x146.png 240w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/06\/Performance-50x30.png 50w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/06\/Performance-123x75.png 123w\" sizes=\"auto, (max-width:767px) 480px, (max-width:1010px) 100vw, 1010px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">We see that using the JDBC OCI driver delivers the fastest results when skipping Oracle Net. Furthermore, the MemOptimized RowStore delivers the fastest results via OCI. Accessing the MemOptimized RowStore via the JDBC thin driver leads by to a bad performance. This looks like a bug.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To get benefit from the MemOptimized RowStore you have to access the database via OCI.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>On June 10 2018 I blogged about the MemOptimized RowStore in Oracle Database 18c. If you haven&#8217;t read this post, it is a good idea to catch up now. I showed that accessing a memoptimized table t4 via the MemOptimized RowStore was around 60% slower than accessing a heap-organized table t1. I<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/p>\n","protected":false},"author":1,"featured_media":9513,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[107,25,13,85],"class_list":["post-8492","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oracle","tag-java","tag-performance","tag-plsql","tag-sql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>MemOptimized RowStore in Oracle Database 18c with OCI - Philipp Salvisberg&#039;s Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.salvis.com\/blog\/2018\/06\/19\/memoptimized-rowstore-in-oracle-database-18c-with-oci\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"MemOptimized RowStore in Oracle Database 18c with OCI - Philipp Salvisberg&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"On June 10 2018 I blogged about the MemOptimized RowStore in Oracle Database 18c. If you haven&#8217;t read this post, it is a good idea to catch up now. I showed that accessing a memoptimized table t4 via the MemOptimized RowStore was around 60% slower than accessing a heap-organized table t1. I [\u2026]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.salvis.com\/blog\/2018\/06\/19\/memoptimized-rowstore-in-oracle-database-18c-with-oci\/\" \/>\n<meta property=\"og:site_name\" content=\"Philipp Salvisberg&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-06-19T19:34:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-08T01:14:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2019\/02\/memoptimize_pool.png\" \/>\n\t<meta property=\"og:image:width\" content=\"414\" \/>\n\t<meta property=\"og:image:height\" content=\"537\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Philipp Salvisberg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@phsalvisberg\" \/>\n<meta name=\"twitter:site\" content=\"@phsalvisberg\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Philipp Salvisberg\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/06\\\/19\\\/memoptimized-rowstore-in-oracle-database-18c-with-oci\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/06\\\/19\\\/memoptimized-rowstore-in-oracle-database-18c-with-oci\\\/\"},\"author\":{\"name\":\"Philipp Salvisberg\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"headline\":\"MemOptimized RowStore in Oracle Database 18c with OCI\",\"datePublished\":\"2018-06-19T19:34:51+00:00\",\"dateModified\":\"2023-11-08T01:14:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/06\\\/19\\\/memoptimized-rowstore-in-oracle-database-18c-with-oci\\\/\"},\"wordCount\":421,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"image\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/06\\\/19\\\/memoptimized-rowstore-in-oracle-database-18c-with-oci\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/memoptimize_pool.png\",\"keywords\":[\"Java\",\"Performance\",\"PL\\\/SQL\",\"SQL\"],\"articleSection\":[\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/06\\\/19\\\/memoptimized-rowstore-in-oracle-database-18c-with-oci\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/06\\\/19\\\/memoptimized-rowstore-in-oracle-database-18c-with-oci\\\/\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/06\\\/19\\\/memoptimized-rowstore-in-oracle-database-18c-with-oci\\\/\",\"name\":\"MemOptimized RowStore in Oracle Database 18c with OCI - Philipp Salvisberg&#039;s Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/06\\\/19\\\/memoptimized-rowstore-in-oracle-database-18c-with-oci\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/06\\\/19\\\/memoptimized-rowstore-in-oracle-database-18c-with-oci\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/memoptimize_pool.png\",\"datePublished\":\"2018-06-19T19:34:51+00:00\",\"dateModified\":\"2023-11-08T01:14:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/06\\\/19\\\/memoptimized-rowstore-in-oracle-database-18c-with-oci\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/06\\\/19\\\/memoptimized-rowstore-in-oracle-database-18c-with-oci\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/06\\\/19\\\/memoptimized-rowstore-in-oracle-database-18c-with-oci\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/memoptimize_pool.png\",\"contentUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/memoptimize_pool.png\",\"width\":414,\"height\":537},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/06\\\/19\\\/memoptimized-rowstore-in-oracle-database-18c-with-oci\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"MemOptimized RowStore in Oracle Database 18c with OCI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/\",\"name\":\"Philipp Salvisberg&#039;s Blog\",\"description\":\"Database-centric development\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\",\"name\":\"Philipp Salvisberg\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"contentUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"width\":400,\"height\":400,\"caption\":\"Philipp Salvisberg\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\"},\"sameAs\":[\"http:\\\/\\\/www.salvis.com\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"MemOptimized RowStore in Oracle Database 18c with OCI - Philipp Salvisberg&#039;s Blog","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:\/\/www.salvis.com\/blog\/2018\/06\/19\/memoptimized-rowstore-in-oracle-database-18c-with-oci\/","og_locale":"en_US","og_type":"article","og_title":"MemOptimized RowStore in Oracle Database 18c with OCI - Philipp Salvisberg&#039;s Blog","og_description":"On June 10 2018 I blogged about the MemOptimized RowStore in Oracle Database 18c. If you haven&#8217;t read this post, it is a good idea to catch up now. I showed that accessing a memoptimized table t4 via the MemOptimized RowStore was around 60% slower than accessing a heap-organized table t1. I [\u2026]","og_url":"https:\/\/www.salvis.com\/blog\/2018\/06\/19\/memoptimized-rowstore-in-oracle-database-18c-with-oci\/","og_site_name":"Philipp Salvisberg&#039;s Blog","article_published_time":"2018-06-19T19:34:51+00:00","article_modified_time":"2023-11-08T01:14:57+00:00","og_image":[{"width":414,"height":537,"url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2019\/02\/memoptimize_pool.png","type":"image\/png"}],"author":"Philipp Salvisberg","twitter_card":"summary_large_image","twitter_creator":"@phsalvisberg","twitter_site":"@phsalvisberg","twitter_misc":{"Written by":"Philipp Salvisberg","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.salvis.com\/blog\/2018\/06\/19\/memoptimized-rowstore-in-oracle-database-18c-with-oci\/#article","isPartOf":{"@id":"https:\/\/www.salvis.com\/blog\/2018\/06\/19\/memoptimized-rowstore-in-oracle-database-18c-with-oci\/"},"author":{"name":"Philipp Salvisberg","@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"headline":"MemOptimized RowStore in Oracle Database 18c with OCI","datePublished":"2018-06-19T19:34:51+00:00","dateModified":"2023-11-08T01:14:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.salvis.com\/blog\/2018\/06\/19\/memoptimized-rowstore-in-oracle-database-18c-with-oci\/"},"wordCount":421,"commentCount":2,"publisher":{"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"image":{"@id":"https:\/\/www.salvis.com\/blog\/2018\/06\/19\/memoptimized-rowstore-in-oracle-database-18c-with-oci\/#primaryimage"},"thumbnailUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2019\/02\/memoptimize_pool.png","keywords":["Java","Performance","PL\/SQL","SQL"],"articleSection":["Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.salvis.com\/blog\/2018\/06\/19\/memoptimized-rowstore-in-oracle-database-18c-with-oci\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.salvis.com\/blog\/2018\/06\/19\/memoptimized-rowstore-in-oracle-database-18c-with-oci\/","url":"https:\/\/www.salvis.com\/blog\/2018\/06\/19\/memoptimized-rowstore-in-oracle-database-18c-with-oci\/","name":"MemOptimized RowStore in Oracle Database 18c with OCI - Philipp Salvisberg&#039;s Blog","isPartOf":{"@id":"https:\/\/www.salvis.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.salvis.com\/blog\/2018\/06\/19\/memoptimized-rowstore-in-oracle-database-18c-with-oci\/#primaryimage"},"image":{"@id":"https:\/\/www.salvis.com\/blog\/2018\/06\/19\/memoptimized-rowstore-in-oracle-database-18c-with-oci\/#primaryimage"},"thumbnailUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2019\/02\/memoptimize_pool.png","datePublished":"2018-06-19T19:34:51+00:00","dateModified":"2023-11-08T01:14:57+00:00","breadcrumb":{"@id":"https:\/\/www.salvis.com\/blog\/2018\/06\/19\/memoptimized-rowstore-in-oracle-database-18c-with-oci\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.salvis.com\/blog\/2018\/06\/19\/memoptimized-rowstore-in-oracle-database-18c-with-oci\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.salvis.com\/blog\/2018\/06\/19\/memoptimized-rowstore-in-oracle-database-18c-with-oci\/#primaryimage","url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2019\/02\/memoptimize_pool.png","contentUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2019\/02\/memoptimize_pool.png","width":414,"height":537},{"@type":"BreadcrumbList","@id":"https:\/\/www.salvis.com\/blog\/2018\/06\/19\/memoptimized-rowstore-in-oracle-database-18c-with-oci\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.salvis.com\/blog\/"},{"@type":"ListItem","position":2,"name":"MemOptimized RowStore in Oracle Database 18c with OCI"}]},{"@type":"WebSite","@id":"https:\/\/www.salvis.com\/blog\/#website","url":"https:\/\/www.salvis.com\/blog\/","name":"Philipp Salvisberg&#039;s Blog","description":"Database-centric development","publisher":{"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.salvis.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515","name":"Philipp Salvisberg","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","contentUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","width":400,"height":400,"caption":"Philipp Salvisberg"},"logo":{"@id":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg"},"sameAs":["http:\/\/www.salvis.com\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/8492","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/comments?post=8492"}],"version-history":[{"count":32,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/8492\/revisions"}],"predecessor-version":[{"id":12638,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/8492\/revisions\/12638"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/media\/9513"}],"wp:attachment":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/media?parent=8492"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/categories?post=8492"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/tags?post=8492"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}