{"id":16356,"date":"2021-05-25T16:18:18","date_gmt":"2021-05-25T14:18:18","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/"},"modified":"2021-05-25T16:18:18","modified_gmt":"2021-05-25T14:18:18","slug":"postgresql-on-arm-oci","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/","title":{"rendered":"PostgreSQL on Oracle free tier ARM"},"content":{"rendered":"<h2>By Franck Pachot<\/h2>\n<p>.<br \/>\nThis follows the <a href=\"https:\/\/www.dbi-services.com\/blog\/oracle-oci-arm-free\/\">previous post<\/a> about the Oracle Cloud ARM compute shape just announced on May 25th. The processor is ARM v8.2 with LSE (atomic instructions) and PostgreSQL can benefit from it (see <a href=\"https:\/\/akorotkov.github.io\/blog\/2021\/04\/30\/arm\/\" target=\"_blank\" rel=\"noopener\">Dramatical Effect of LSE Instructions for PostgreSQL on Graviton2 Instances<\/a>).<\/p>\n<p>I have installed GCC 11 in the previous post, on a Oracle Linux 7.9 image with comes with GCC 7. If you installed the Ubuntu 20.4 image, you have GCC 9 and I also recommand to install the latest version. Anyway, if you use a version before GCC 11 you must set CFLAGS as below to benefit from ARM v8.1 LSE.<\/p>\n<p>I&#8217;ll install PostgreSQL 14 which is currently in beta1:<\/p>\n<pre><code>\n(\nsudo yum install -y git gcc readline-devel bison-devel zlib-devel\ncurl -s https:\/\/ftp.postgresql.org\/pub\/snapshot\/dev\/postgresql-snapshot.tar.gz | tar -zxvf -\nsudo rm -rf \/usr\/local\/pgsql ; sudo mkdir -p \/usr\/local\/pgsql\ncd postgresql-14beta1\nmake clean\nCFLAGS=\"-march=armv8.2-a+fp16\" .\/configure --enable-debug\nmake\nsudo make install\ncd contrib\nmake\nsudo make install\n)\n<\/code><\/pre>\n<p>I initially tried to use CFLAGS=&#8221;-mcpu=neoverse-n1&#8243; to compile for this processor only (GCC 11 defaults to -m_ouline_atomics to build binaries compatible with ARM v8 but this adds the very small overhead of runtime detection) but I got &#8220;unknown architectural extension `rcpc+dotprod+profile'&#8221; and that&#8217;s why I used CFLAGS=&#8221;-march=armv8.2-a+fp16&#8243;. Actually installing GCC11 here is not sufficient, the assemble should also be upgraded for Neoverse-N1 instructions. See below for the right usage of GCC in this distribution (devtoolset-10).<\/p>\n<pre><code>\n[opc@arm-lon ~]$ nm \/usr\/local\/pgsql\/bin\/postgres | grep -E \"aarch64(_have_lse_atomics)?\"                                                     \n\n[opc@arm-lon ~]$ objdump -d \/usr\/local\/pgsql\/bin\/postgres | awk '\/\\t(ldxr|ldaxr|stxr|stlxr)\/{print $3\"\\t(load and store exclusives)\"}\/\\t(cas|casp|swp|ldadd|stadd|ldclr|stclr|ldeor|steor|ldset|stset|ldsmax|stsmax|ldsmin|stsmin|ldumax|stumax|ldumin|stumin)\/{print $3\"\\t(large-system extensions)\"}' | sort | uniq -c | sort -n\n\n      1 ldclral (large-system extensions)\n      3 ldsetal (large-system extensions)\n     12 ldaddal (large-system extensions)\n     15 casal   (large-system extensions)\n     31 swpa    (large-system extensions)\n<\/code><\/pre>\n<p>I see no __aarch64_ functions to outline atomics and no load and store for pre-v8.1 ARM because I disabled the default -mno-outline-atomics runtime detection. That&#8217;s what I wanted to be optimized for this processor. I&#8217;ll compile differently later to check the difference.<\/p>\n<pre><code>\n\/usr\/local\/pgsql\/bin\/psql --version\n\/usr\/local\/pgsql\/bin\/initdb -D \/var\/tmp\/pgdata\n\/usr\/local\/pgsql\/bin\/pg_ctl -D \/var\/tmp\/pgdata start\n<\/code><\/pre>\n<p>This creates a database and starts the instance<\/p>\n<pre><code>[opc@arm-lon contrib]$ free -h\n\n              total        used        free      shared  buff\/cache   available\nMem:            22G        1.0G        4.9G         50M         16G         18G\nSwap:          8.0G          0B        8.0G\n\nsed -ie \"\/huge_pages\/s\/^.*=.*\/huge_pages= true\/\" \/var\/tmp\/pgdata\/postgresql.conf\nsed -ie \"\/shared_buffers\/s\/^.*=.*\/shared_buffers= 4800MB\/\" \/var\/tmp\/pgdata\/postgresql.conf\n\/usr\/local\/pgsql\/bin\/pg_ctl -D \/var\/tmp\/pgdata -l postgres.log stop\n<\/code><\/pre>\n<p>I have 24 GB RAM here (which is what Oracle gives you for free &#8211; this is quite awesome, isn&#8217;t it?)<br \/>\nI&#8217;ll use enough shared buffers to fit my working set (4 schemas of 1GB) because I want to measure shared buffer cache access (this is where atimics are used).21<\/p>\n<pre><code>[opc@arm-lon contrib]$ $ grep Hugepagesize \/proc\/meminfo\n\nHugepagesize:     524288 kB\n<\/code><\/pre>\n<p>The huge pages are 512MB here. This processor is build for large systems and that&#8217;s perfect for a database. Of course, I&#8217;ll define enough huge pages for the shared buffers.<\/p>\n<pre><code>\nawk '\/Hugepagesize.*kB\/{print ( 1 + 1024 * MB \/ $2 ) }' MB=8192 \/proc\/meminfo | tee \/dev\/stderr | sudo bash -c  \"cat &gt; \/proc\/sys\/vm\/nr_hugepages\"\n\n\/usr\/local\/pgsql\/bin\/pg_ctl -D \/var\/tmp\/pgdata -l postgres.log restart\n\n[opc@arm-lon ~]$ free -h\n\n              total        used        free      shared  buff\/cache   available\nMem:            22G        9.1G        4.0G         24M        9.4G         10G\nSwap:          8.0G        112M        7.9G\n<\/code><\/pre>\n<p>Here we are. 8GB for the postgresql shared buffers. 10GB available for the filesystem cache. You need this double buffering because PostgreSQL has no pre-fetching and write ordering optimizations, but still need its own cache to avoid a system call per page access.<\/p>\n<p>I&#8217;ll run <a href=\"https:\/\/kevinclosson.net\/2019\/09\/21\/announcing-pgio-the-slob-method-for-postgresql-is-released-under-apache-2-0-and-available-at-github\/\" target=\"_blank\" rel=\"noopener\">PGIO <\/a>to look at the CPU performance, as I did on <a href=\"https:\/\/dev.to\/aws-heroes\/aws-postgresql-on-graviton2-3n44\" target=\"_blank\" rel=\"noopener\">AWS Graviton2<\/a>. Because it measures exactly what I want to measure: access to the shared buffers. Without spending all time on client-server calls (see <a href=\"https:\/\/amitdkhan-pg.blogspot.com\/2020\/05\/postgresql-on-arm.html\" target=\"_blank\" rel=\"noopener\">https:\/\/amitdkhan-pg.blogspot.com\/2020\/05\/postgresql-on-arm.html<\/a> for other ways to do it with a pgbench-like workload).<\/p>\n<pre><code>\ngit clone https:\/\/github.com\/therealkevinc\/pgio\ntar -zxf pgio\/pgio*tar.gz\ncat &gt; pgio\/pgio.conf &lt;&lt;CAT\n UPDATE_PCT=0\n RUN_TIME=$(( 60 * 60))\n NUM_SCHEMAS=4\n NUM_THREADS=1\n WORK_UNIT=255\n UPDATE_WORK_UNIT=8\n SCALE=1024M\n DBNAME=pgio\n CONNECT_STRING=\"pgio\"\n CREATE_BASE_TABLE=TRUE\nCAT\n\/usr\/local\/pgsql\/bin\/psql postgres &lt;&lt;&lt;'create database pgio;'\ntime ( PATH=\/usr\/local\/pgsql\/bin:$PATH ; cd pgio &amp;&amp; bash setup.sh )\n<\/code><\/pre>\n<p>This setup a database for a read-only workload from 4 sessions reading in their own schema. If you are interesting by atomics improvement for AWL lightweight locks, you can set the PCT_UPDATE. But I like to show something that is often overlooked: a read-only workload on the database is still a read-write workload on the shared memory. And there is no connection, parsing, vacuuming, analyze&#8230; here. I use Kevin Closson PGIO, the &#8220;SLOB method&#8221; to run only what I want to measure: pin and read shared buffers.<\/p>\n<pre><code>\n( PATH=\/usr\/local\/pgsql\/bin:$PATH ; cd pgio &amp;&amp; bash runit.sh | sed -e \"s\/^\/$n|\\t\/\" )\n\nDate: Sun May 23 16:56:49 GMT 2021\nDatabase connect string: \"pgio\".\nShared buffers: 4800MB.\nTesting 4 schemas with 1 thread(s) accessing 1024M (131072 blocks) of each schema.\nRunning iostat, vmstat and mpstat on current host--in background.\nLaunching sessions. 4 schema(s) will be accessed by 1 thread(s) each.\npg_stat_database stats:\n          datname| blks_hit| blks_read|tup_returned|tup_fetched|tup_updated\nBEFORE:  pgio    | 10070507688 |   6920153 |   9870736490 |  9862382424 |      988185\nAFTER:   pgio    | 10936832180 |   7446586 |  10723766109 | 10715208260 |      988185\nDBNAME:  pgio. 4 schemas, 1 threads(each). Run time: 600 seconds. RIOPS &gt;877&lt; CACHE_HITS\/s &gt;1443874&lt;\n\nobjdump -d \/usr\/local\/pgsql\/bin\/postgres | awk '\/\\t(ldxr|ldaxr|stxr|stlxr)\/{print $3\"\\t(load and store exclusives)\"}\/\\t(cas|casp|swp|ldadd|stadd|ldclr|stclr|ldeor|steor|ldset|stset|ldsmax|stsmax|ldsmin|stsmin|ldumax|stumax|ldumin|stumin)\/{print $3\"\\t(large-system extensions)\"}' | sort | uniq -c | sort -n\n\n      1 ldclral (large-system extensions)\n      3 ldsetal (large-system extensions)\n     12 ldaddal (large-system extensions)\n     15 casal   (large-system extensions)\n     31 swpa    (large-system extensions)\n\n<\/code><\/pre>\n<p>1443874 page read per second from the 4 sessions. This is 360969 LIOPS\/thread, with CFLAGS=&#8221;-march=armv8.2-a&#8221; which calls the CASAL atomic in order to acquire the share mode LWLock to lookup for the block in the shared buffer partition.<\/p>\n<p>I mentioned that I compiled for ARM v8.2 only rather than relying on the defaults that try to build an ARM v8 compatible binary. Let&#8217;s do the same with CFLAGS=&#8221;-march=armv8-a -moutline-atomics&#8221;.<\/p>\n<pre><code>\n( PATH=\/usr\/local\/pgsql\/bin:$PATH ; cd pgio &amp;&amp; bash runit.sh | sed -e \"s\/^\/$n|\\t\/\" )\n\nDate: Sun May 23 16:31:43 GMT 2021\nDatabase connect string: \"pgio\".\nShared buffers: 4800MB.\nTesting 4 schemas with 1 thread(s) accessing 1024M (131072 blocks) of each schema.\nRunning iostat, vmstat and mpstat on current host--in background.\nLaunching sessions. 4 schema(s) will be accessed by 1 thread(s) each.\npg_stat_database stats:\n          datname| blks_hit| blks_read|tup_returned|tup_fetched|tup_updated\nBEFORE:  pgio    | 9196454698 |   6919962 |   9010603761 |  9002477779 |      988150\nAFTER:   pgio    | 10070502579 |   6919975 |   9870712088 |  9862380498 |      988183\nDBNAME:  pgio. 4 schemas, 1 threads(each). Run time: 600 seconds. RIOPS &gt;0&lt; CACHE_HITS\/s &gt;1456746&lt;\n\nobjdump -d \/usr\/local\/pgsql\/bin\/postgres | awk '\/\\t(ldxr|ldaxr|stxr|stlxr)\/{print $3\"\\t(load and store exclusives)\"}\/\\t(cas|casp|swp|ldadd|stadd|ldclr|stclr|ldeor|steor|ldset|stset|ldsmax|stsmax|ldsmin|stsmin|ldumax|stumax|ldumin|stumin)\/{print $3\"\\t(large-system extensions)\"}' | sort | uniq -c | sort -n\n\n      1 ldclral (large-system extensions)\n      1 ldsetal (large-system extensions)\n      1 stxr    (load and store exclusives)\n      1 swpa    (large-system extensions)\n      2 casal   (large-system extensions)\n      2 ldaddal (large-system extensions)\n      6 stlxr   (load and store exclusives)\n      7 ldaxr   (load and store exclusives)\n\n<\/code><\/pre>\n<p>1456746 page read per second from the 4 sessions. This is 364187 LIOPS\/thread, with CFLAGS=&#8221;-march=armv8 -moutline-atomics&#8221; but with LSE outlined (which is the default in GCC 11). This uses a a runtime detection to use CASAL is LSE are available or LDAXR\/STXX if not. I would expect a little overhead for this detection but my test shows that I was able to read nearly 1% more buffers with there. Surprising, isn&#8217;t it?<\/p>\n<p>Here are some screenshots fro perf top when those were running:<br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/arm-oci.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-50081\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/arm-oci.png\" alt=\"\" width=\"3705\" height=\"1728\" \/><\/a><\/p>\n<p>You can see that I&#8217;ve also run with the ARM v8 without LSE:<\/p>\n<pre><code>\n( PATH=\/usr\/local\/pgsql\/bin:$PATH ; cd pgio &amp;&amp; bash runit.sh | sed -e \"s\/^\/$n|\\t\/\" )\n\nDate: Sun May 23 17:17:35 GMT 2021\nDatabase connect string: \"pgio\".\nShared buffers: 4800MB.\nTesting 4 schemas with 1 thread(s) accessing 1024M (131072 blocks) of each schema.\nRunning iostat, vmstat and mpstat on current host--in background.\nLaunching sessions. 4 schema(s) will be accessed by 1 thread(s) each.\npg_stat_database stats:\n          datname| blks_hit| blks_read|tup_returned|tup_fetched|tup_updated\nBEFORE:  pgio    | 10936836909 |   7446768 |  10723783569 | 10715210130 |      988187\nAFTER:   pgio    | 11785746100 |   7973262 |  11559676977 | 11550904052 |      988213\nDBNAME:  pgio. 4 schemas, 1 threads(each). Run time: 600 seconds. RIOPS &gt;877&lt; CACHE_HITS\/s &gt;1414848&lt;\n\nobjdump -d \/usr\/local\/pgsql\/bin\/postgres | awk '\/\\t(ldxr|ldaxr|stxr|stlxr)\/{print $3\"\\t(load and store exclusives)\"}\/\\t(cas|casp|swp|ldadd|stadd|ldclr|stclr|ldeor|steor|ldset|stset|ldsmax|stsmax|ldsmin|stsmin|ldumax|stumax|ldumin|stumin)\/{print $3\"\\t(large-system extensions)\"}' | sort | uniq -c | sort -n\n     15 ldaxr   (load and store exclusives)\n     31 stlxr   (load and store exclusives)\n     31 stxr    (load and store exclusives)\n     47 ldxr    (load and store exclusives)\n\n<\/code><\/pre>\n<p>1414848 page read per second from the 4 sessions. This is 353712 LIOPS\/thread, with CFLAGS=&#8221;-march=armv8 -mno-outline-atomics&#8221;. I&#8217;ve run 2% less buffer reads when the LWLock is implemented as load store loop.<\/p>\n<p>I show all these to show how you can check if your binaries use all the processor features, and how to measure and understand the difference. But the numbers have no meaning outside of this specific context. Numbers from benchmarks are useless outside of marketing slides. Here, my context is only 4 sessions (because I want my demos to run on free tier) and PostgreSQL has the shared buffer partitioned to 16 latches. My data is equally distributed, there are no page misses, no session reading the same blocks, no update&#8230; I have set, on purpose, the situation with the less contention to show that the lightweight lock optimizations are still important here. And you see where the contention will be in case of CPU starvation: non-LSE loop on load store will be a problem and LSE atomics will help, outlined for runtime detection, or not.<\/p>\n<h3>Update 27-MAY-2021<\/h3>\n<p>I mentioned above that I installed the latest GCC (version 11) and PostgreSQL (14 beta) for this test, but I think it is important to give the correct way to install the latest stable version (here 13.3) with the latest GCC shipped with OL7 (the devtoolset-10 software collection) as this one has all required components to generate Neoverse-N1 instructions:<\/p>\n<pre><code>\nVER=13.3 CFLAGS=\"-mcpu=neoverse-n1\" scl enable devtoolset-10 bash &lt;&lt;'SCL'\nsudo yum install -y git gcc readline-devel zlib-devel bison bison-devel flex &amp;&amp; \\\ncurl https:\/\/ftp.postgresql.org\/pub\/source\/v$VER\/postgresql-$VER.tar.gz | tar -zxf - &amp;&amp; \\\ncd postgresql-$VER &amp;&amp;  .\/configure --enable-debug &amp;&amp; make &amp;&amp; sudo make install\nSCL\n\/usr\/local\/pgsql\/bin\/initdb -D \/var\/tmp\/test_pgdata\n\/usr\/local\/pgsql\/bin\/pg_ctl -D \/var\/tmp\/test_pgdata start -l \/dev\/stdout | grep GCC\n\/usr\/local\/pgsql\/bin\/pg_ctl -D \/var\/tmp\/test_pgdata stop  \n<\/code><\/pre>\n<p>waiting for server to start&#8230;.2021-05-27 19:20:43.024 GMT [30480] LOG: starting PostgreSQL 14beta1 on aarch64-unknown-linux-gnu, compiled by gcc (GCC) 10.2.1 20200804 (Red Hat 10.2.1-2.0.2), 64-bit<\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Franck Pachot . This follows the previous post about the Oracle Cloud ARM compute shape just announced on May 25th. The processor is ARM v8.2 with LSE (atomic instructions) and PostgreSQL can benefit from it (see Dramatical Effect of LSE Instructions for PostgreSQL on Graviton2 Instances). I have installed GCC 11 in the previous [&hellip;]<\/p>\n","protected":false},"author":27,"featured_media":16358,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[59,83],"tags":[2335,1375,77],"type_dbi":[],"class_list":["post-16356","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oracle","category-postgresql","tag-arm","tag-oci","tag-postgresql"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>PostgreSQL on Oracle free tier ARM - dbi 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.dbi-services.com\/blog\/postgresql-on-arm-oci\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PostgreSQL on Oracle free tier ARM\" \/>\n<meta property=\"og:description\" content=\"By Franck Pachot . This follows the previous post about the Oracle Cloud ARM compute shape just announced on May 25th. The processor is ARM v8.2 with LSE (atomic instructions) and PostgreSQL can benefit from it (see Dramatical Effect of LSE Instructions for PostgreSQL on Graviton2 Instances). I have installed GCC 11 in the previous [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-05-25T14:18:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2021-05-13-195537.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1436\" \/>\n\t<meta property=\"og:image:height\" content=\"526\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Oracle Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Oracle Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"headline\":\"PostgreSQL on Oracle free tier ARM\",\"datePublished\":\"2021-05-25T14:18:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/\"},\"wordCount\":946,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2021-05-13-195537.jpg\",\"keywords\":[\"ARM\",\"OCI\",\"PostgreSQL\"],\"articleSection\":[\"Oracle\",\"PostgreSQL\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/\",\"name\":\"PostgreSQL on Oracle free tier ARM - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2021-05-13-195537.jpg\",\"datePublished\":\"2021-05-25T14:18:18+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2021-05-13-195537.jpg\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2021-05-13-195537.jpg\",\"width\":1436,\"height\":526},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PostgreSQL on Oracle free tier ARM\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\",\"name\":\"Oracle Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"caption\":\"Oracle Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"PostgreSQL on Oracle free tier ARM - dbi 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.dbi-services.com\/blog\/postgresql-on-arm-oci\/","og_locale":"en_US","og_type":"article","og_title":"PostgreSQL on Oracle free tier ARM","og_description":"By Franck Pachot . This follows the previous post about the Oracle Cloud ARM compute shape just announced on May 25th. The processor is ARM v8.2 with LSE (atomic instructions) and PostgreSQL can benefit from it (see Dramatical Effect of LSE Instructions for PostgreSQL on Graviton2 Instances). I have installed GCC 11 in the previous [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/","og_site_name":"dbi Blog","article_published_time":"2021-05-25T14:18:18+00:00","og_image":[{"width":1436,"height":526,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2021-05-13-195537.jpg","type":"image\/jpeg"}],"author":"Oracle Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Oracle Team","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"headline":"PostgreSQL on Oracle free tier ARM","datePublished":"2021-05-25T14:18:18+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/"},"wordCount":946,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2021-05-13-195537.jpg","keywords":["ARM","OCI","PostgreSQL"],"articleSection":["Oracle","PostgreSQL"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/","url":"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/","name":"PostgreSQL on Oracle free tier ARM - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2021-05-13-195537.jpg","datePublished":"2021-05-25T14:18:18+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2021-05-13-195537.jpg","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2021-05-13-195537.jpg","width":1436,"height":526},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-on-arm-oci\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PostgreSQL on Oracle free tier ARM"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee","name":"Oracle Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","caption":"Oracle Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/16356","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=16356"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/16356\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/16358"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=16356"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=16356"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=16356"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=16356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}