{"id":11943,"date":"2018-11-03T13:59:12","date_gmt":"2018-11-03T12:59:12","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/"},"modified":"2018-11-03T13:59:12","modified_gmt":"2018-11-03T12:59:12","slug":"some-more-zheap-testing","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/","title":{"rendered":"Some more zheap testing"},"content":{"rendered":"<p>Herv\u00e9 already did some tests with zheap and documented his results <a href=\"https:\/\/www.dbi-services.com\/blog\/deep-dive-postgres-at-the-pgconfeu-conference\/\" target=\"_blank\" rel=\"noopener noreferrer\">yesterday<\/a>. After some more discussions with <a href=\"https:\/\/twitter.com\/kapila_amit\" target=\"_blank\" rel=\"noopener noreferrer\">Amit<\/a> who did the session about zHeap at the conference here in Lisbon (you can find the slides <a href=\"https:\/\/www.postgresql.eu\/events\/pgconfeu2018\/sessions\/session\/2104\/slides\/93\/zheap-a-new-storage-format-postgresql.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">here<\/a>). I thought it might be a good idea to do some more testing on that probably upcoming feature. Lets go.<\/p>\n<p><!--more--><\/p>\n<p>If you want to test it for your own, here is a simple script that clones the repository, compiles and installs from source and then start the PostgreSQL instance:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] cat refresh_zheap.sh \n#!\/bin\/bash\n\nrm -rf zheap\ngit clone https:\/\/github.com\/EnterpriseDB\/zheap\ncd zheap\nPGHOME=\/u01\/app\/postgres\/product\/zheap\/db_1\/\nSEGSIZE=2\nBLOCKSIZE=8\n.\/configure --prefix=${PGHOME} \n            --exec-prefix=${PGHOME} \n            --bindir=${PGHOME}\/bin \n            --libdir=${PGHOME}\/lib \n            --sysconfdir=${PGHOME}\/etc \n            --includedir=${PGHOME}\/include \n            --datarootdir=${PGHOME}\/share \n            --datadir=${PGHOME}\/share \n            --with-pgport=5432 \n            --with-perl \n            --with-python \n            --with-openssl \n            --with-pam \n            --with-ldap \n            --with-libxml \n            --with-libxslt \n            --with-segsize=${SEGSIZE} \n            --with-blocksize=${BLOCKSIZE} \n\t    --with-systemd\nmake all\nmake install\ncd contrib\nmake install\nrm -rf \/u02\/pgdata\/zheap\n\/u01\/app\/postgres\/product\/zheap\/db_1\/bin\/initdb -D \/u02\/pgdata\/zheap\npg_ctl -D \/u02\/pgdata\/zheap start\npsql -c \"alter system set logging_collector='on'\" postgres\npsql -c \"alter system set log_truncate_on_rotation='on'\" postgres\npsql -c \"alter system set log_filename='postgresql-%a.log'\" postgres\npsql -c \"alter system set log_line_prefix='%m - %l - %p - %h - %u@%d '\" postgres\npsql -c \"alter system set log_directory='pg_log'\" postgres\npg_ctl -D \/u02\/pgdata\/zheap restart -m fast\n<\/pre>\n<p>First of all, when you startup PostgreSQL you&#8217;ll get two new background worker processes:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] ps -ef | egrep \"discard|undo\"\npostgres  1483  1475  0 14:40 ?        00:00:00 postgres: discard worker   \npostgres  1484  1475  0 14:40 ?        00:00:01 postgres: undo worker launcher   \npostgres  1566  1070  0 14:51 pts\/0    00:00:00 grep -E --color=auto discard|undo\n<\/pre>\n<p>The &#8220;discard worker&#8221; is responsible for getting rid of all the undo segments that are not required anymore and the &#8220;undo worker launcher&#8221; obviously is responsible for launching undo worker processes for doing the rollbacks. <\/p>\n<p>There is a new parameter which controls the default storage engine (at least the parameter is there as of now, maybe that will change in the future), so lets change that to zheap before we populate a sample database (&#8220;heap&#8221; is the default value):<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] psql -c \"alter system set storage_engine='zheap'\" postgres\nALTER SYSTEM\nTime: 12.722 ms\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] pg_ctl -D $PGDATA restart -m fast\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] psql -c \"show storage_engine\" postgres\n storage_engine \n----------------\n zheap\n(1 row)\n<\/pre>\n<p>Lets use <a href=\"https:\/\/www.postgresql.org\/docs\/current\/static\/pgbench.html\" target=\"_blank\" rel=\"noopener noreferrer\">pgbench<\/a> to create the sample data:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] psql -c \"create database zheap\" postgres\nCREATE DATABASE\nTime: 763.284 ms\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] time pgbench -i -s 100 zheap\n...\ndone.\n\nreal\t0m23.375s\nuser\t0m2.293s\nsys\t0m0.772s\n<\/pre>\n<p>That should have created the tables using the zheap storage engine:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [11]\">\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] psql -c \"d+ pgbench_accounts\" zheap\n                                  Table \"public.pgbench_accounts\"\n  Column  |     Type      | Collation | Nullable | Default | Storage  | Stats target | Description \n----------+---------------+-----------+----------+---------+----------+--------------+-------------\n aid      | integer       |           | not null |         | plain    |              | \n bid      | integer       |           |          |         | plain    |              | \n abalance | integer       |           |          |         | plain    |              | \n filler   | character(84) |           |          |         | extended |              | \nIndexes:\n    \"pgbench_accounts_pkey\" PRIMARY KEY, btree (aid)\nOptions: storage_engine=zheap, fillfactor=100\n<\/pre>\n<p>When we do the same using the &#8220;heap&#8221; storage format how long does that take?:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] psql -c \"alter system set storage_engine='heap'\" postgres\nALTER SYSTEM\nTime: 8.790 ms\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] pg_ctl -D $PGDATA restart -m fast\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] psql -c \"create database heap\" postgres\nCREATE DATABASE\nTime: 889.847 ms\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] time pgbench -i -s 100 heap\n...\n\nreal\t0m30.471s\nuser\t0m2.355s\nsys\t0m0.419s\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] psql -c \"d+ pgbench_accounts\" heap\n                                  Table \"public.pgbench_accounts\"\n  Column  |     Type      | Collation | Nullable | Default | Storage  | Stats target | Description \n----------+---------------+-----------+----------+---------+----------+--------------+-------------\n aid      | integer       |           | not null |         | plain    |              | \n bid      | integer       |           |          |         | plain    |              | \n abalance | integer       |           |          |         | plain    |              | \n filler   | character(84) |           |          |         | extended |              | \nIndexes:\n    \"pgbench_accounts_pkey\" PRIMARY KEY, btree (aid)\nOptions: fillfactor=100\n\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] \n<\/pre>\n<p>I ran that test several times but the difference of about 5 to 6 seconds is consistent. zheap is faster here, but that is coming from vacuum. When you run the same test again but skip the vacuum ( the &#8220;-n&#8221; option of pgbench) at the end, heap is faster:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] psql -c \"create database heap\" postgres\nCREATE DATABASE\nTime: 562.155 ms\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] time pgbench -i -n -s 100 heap\ndone.\n\nreal\t0m21.650s\nuser\t0m2.316s\nsys\t0m0.225s\n<\/pre>\n<p>But anyway: As zheap has to create undo segments more needs to go to disk initially. heap needs to run vacuum, not immediately but for sure some time later. When you compare a pure insert only workload, without vacuum, heap is faster. The great thing is, that you can decide what you want to use on the table level. Some tables might be better created with the zheap storage engine, others may be better created with heap. The important bit is that you have full control.<\/p>\n<p>Herv\u00e9 already compared the size of his tables in the last post. Do we see the same here when we compare the size of the entire databases?<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [6,12]\">\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] vacuumdb heap\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] psql -c \"l+\" postgres\n                                                                   List of databases\n   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   |  Size   | Tablespace |                Description         \n-----------+----------+----------+------------+------------+-----------------------+---------+------------+------------------------------------\n heap      | postgres | UTF8     | en_US.utf8 | en_US.utf8 |                       | 1503 MB | pg_default | \n postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 |                       | 7867 kB | pg_default | default administrative connection d\n template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c\/postgres          +| 7721 kB | pg_default | unmodifiable empty database\n           |          |          |            |            | postgres=CTc\/postgres |         |            | \n template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c\/postgres          +| 7721 kB | pg_default | default template for new databases\n           |          |          |            |            | postgres=CTc\/postgres |         |            | \n zheap     | postgres | UTF8     | en_US.utf8 | en_US.utf8 |                       | 1250 MB | pg_default | \n(5 rows)\n<\/pre>\n<p>Yes, heap is 253MB larger. That difference should even get bigger once we populate the &#8220;filler&#8221; column of the pgbench_accounts table, which is currently NULL:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [13,19]\">\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] psql -c \"update pgbench_accounts set filler = 'aaaaaa'\" zheap\nUPDATE 10000000\nTime: 55768.488 ms (00:55.768)\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] psql -c \"update pgbench_accounts set filler = 'aaaaaa'\" heap\nUPDATE 10000000\nTime: 52598.782 ms (00:52.599)\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] vacuumdb heap\nvacuumdb: vacuuming database \"heap\"\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] psql -c \"l+\" postgres\n                                                                   List of databases\n   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   |  Size   | Tablespace |                Description              \n-----------+----------+----------+------------+------------+-----------------------+---------+------------+-----------------------------------------\n heap      | postgres | UTF8     | en_US.utf8 | en_US.utf8 |                       | 3213 MB | pg_default | \n postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 |                       | 7867 kB | pg_default | default administrative connection databa\n template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c\/postgres          +| 7721 kB | pg_default | unmodifiable empty database\n           |          |          |            |            | postgres=CTc\/postgres |         |            | \n template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c\/postgres          +| 7721 kB | pg_default | default template for new databases\n           |          |          |            |            | postgres=CTc\/postgres |         |            | \n zheap     | postgres | UTF8     | en_US.utf8 | en_US.utf8 |                       | 1250 MB | pg_default | \n<\/pre>\n<p>As expected and consistent with what Herve has seen in his tests. The update against the heap table was a bit faster (around 3 seconds) but again: zheap hast to create undo segments and that causes additional writes on disk. Three seconds against a 10 million row table is not that huge, by the way, and how often do you update the complete table?<\/p>\n<p>Now lets run a standard pgbench workload against these database and check what we can see there. For the zheap database with 1 connection for 60 seconds this is the best result I got after ten runs:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [11,12]\">\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] pgbench -c 1 -T 60 zheap\nstarting vacuum...end.\ntransaction type: \nscaling factor: 100\nquery mode: simple\nnumber of clients: 1\nnumber of threads: 1\nduration: 60 s\nnumber of transactions actually processed: 29265\nlatency average = 2.050 ms\ntps = 487.726916 (including connections establishing)\ntps = 487.786025 (excluding connections establishing)\n<\/pre>\n<p>The same against the heap:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [11,12]\">\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] pgbench -c 1 -T 60 heap\nstarting vacuum...end.\ntransaction type: \nscaling factor: 100\nquery mode: simple\nnumber of clients: 1\nnumber of threads: 1\nduration: 60 s\nnumber of transactions actually processed: 24992\nlatency average = 2.401 ms\ntps = 416.485499 (including connections establishing)\ntps = 416.516805 (excluding connections establishing)\n<\/pre>\n<p>The numbers changed a bit for every execution but always zheap was better than heap (Be aware that I am on little VM here), so at least there is no regression in performance but rather an improvement for this workload. <\/p>\n<p>For the select only workload (the &#8220;-S&#8221; option) this is the best result for heap:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [12,13]\">\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] for i in {1..10}; do pgbench -c 1 -S -T 60 heap; done\n...\nstarting vacuum...end.\ntransaction type: \nscaling factor: 100\nquery mode: simple\nnumber of clients: 1\nnumber of threads: 1\nduration: 60 s\nnumber of transactions actually processed: 64954\nlatency average = 0.924 ms\ntps = 1082.514439 (including connections establishing)\ntps = 1082.578288 (excluding connections establishing)\n...\n<\/pre>\n<p>And this is the best result for zheap:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [12,13]\">\npostgres@pgbox:\/home\/postgres\/ [ZHEAP] for i in {1..10}; do pgbench -c 1 -S -T 60 zheap; done\n...\nstarting vacuum...end.\ntransaction type: \nscaling factor: 100\nquery mode: simple\nnumber of clients: 1\nnumber of threads: 1\nduration: 60 s\nnumber of transactions actually processed: 109023\nlatency average = 0.550 ms\ntps = 1816.787280 (including connections establishing)\ntps = 1817.485717 (excluding connections establishing)\n...\n<\/pre>\n<p>With this workload the difference is even more clear: zheap clearly wins.<\/p>\n<p>As noted before: all these test have been done locally on a little VM, so be careful with these number. We should have access to a great storage system with some good servers soon and once we have that I&#8217;ll do some more tests and publish the results.<\/p>\n<p>For now it is somehow clear that zheap is an improvement for several types of workloads while heap still is better for others. In the next post I&#8217;ll try to do some tests to help the developers, meaning: Can we break it?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Herv\u00e9 already did some tests with zheap and documented his results yesterday. After some more discussions with Amit who did the session about zHeap at the conference here in Lisbon (you can find the slides here). I thought it might be a good idea to do some more testing on that probably upcoming feature. Lets [&hellip;]<\/p>\n","protected":false},"author":29,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229],"tags":[1481],"type_dbi":[],"class_list":["post-11943","post","type-post","status-publish","format-standard","hentry","category-database-administration-monitoring","tag-postgresql-12"],"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>Some more zheap testing - dbi Blog<\/title>\n<meta name=\"description\" content=\"PostgreSQL zheap testing\" \/>\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\/some-more-zheap-testing\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Some more zheap testing\" \/>\n<meta property=\"og:description\" content=\"PostgreSQL zheap testing\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-11-03T12:59:12+00:00\" \/>\n<meta name=\"author\" content=\"Daniel Westermann\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@westermanndanie\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Westermann\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 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\/some-more-zheap-testing\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"Some more zheap testing\",\"datePublished\":\"2018-11-03T12:59:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/\"},\"wordCount\":672,\"commentCount\":0,\"keywords\":[\"postgresql 12\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/\",\"name\":\"Some more zheap testing - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2018-11-03T12:59:12+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"description\":\"PostgreSQL zheap testing\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Some more zheap testing\"}]},{\"@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\/8d08e9bd996a89bd75c0286cbabf3c66\",\"name\":\"Daniel Westermann\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"caption\":\"Daniel Westermann\"},\"description\":\"Daniel Westermann is Principal Consultant and Technology Leader Open Infrastructure at dbi services. He has more than 15 years of experience in management, engineering and optimization of databases and infrastructures, especially on Oracle and PostgreSQL. Since the beginning of his career, he has specialized in Oracle Technologies and is Oracle Certified Professional 12c and Oracle Certified Expert RAC\/GridInfra. Over time, Daniel has become increasingly interested in open source technologies, becoming \u201cTechnology Leader Open Infrastructure\u201d and PostgreSQL expert. \u00a0Based on community or EnterpriseDB tools, he develops and installs complex high available solutions with PostgreSQL. He is also a certified PostgreSQL Plus 9.0 Professional and a Postgres Advanced Server 9.4 Professional. He is a regular speaker at PostgreSQL conferences in Switzerland and Europe. Today Daniel is also supporting our customers on AWS services such as AWS RDS, database migrations into the cloud, EC2 and automated infrastructure management with AWS SSM (System Manager). He is a certified AWS Solutions Architect Professional. Prior to dbi services, Daniel was Management System Engineer at LC SYSTEMS-Engineering AG in Basel. Before that, he worked as Oracle Developper &amp;\u00a0Project Manager at Delta Energy Solutions AG in Basel (today Powel AG). Daniel holds a diploma in Business Informatics (DHBW, Germany). His branch-related experience mainly covers the pharma industry, the financial sector, energy, lottery and telecommunications.\",\"sameAs\":[\"https:\/\/x.com\/westermanndanie\"],\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/daniel-westermann\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Some more zheap testing - dbi Blog","description":"PostgreSQL zheap testing","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\/some-more-zheap-testing\/","og_locale":"en_US","og_type":"article","og_title":"Some more zheap testing","og_description":"PostgreSQL zheap testing","og_url":"https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/","og_site_name":"dbi Blog","article_published_time":"2018-11-03T12:59:12+00:00","author":"Daniel Westermann","twitter_card":"summary_large_image","twitter_creator":"@westermanndanie","twitter_misc":{"Written by":"Daniel Westermann","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"Some more zheap testing","datePublished":"2018-11-03T12:59:12+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/"},"wordCount":672,"commentCount":0,"keywords":["postgresql 12"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/","url":"https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/","name":"Some more zheap testing - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2018-11-03T12:59:12+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"description":"PostgreSQL zheap testing","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/some-more-zheap-testing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Some more zheap testing"}]},{"@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\/8d08e9bd996a89bd75c0286cbabf3c66","name":"Daniel Westermann","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","caption":"Daniel Westermann"},"description":"Daniel Westermann is Principal Consultant and Technology Leader Open Infrastructure at dbi services. He has more than 15 years of experience in management, engineering and optimization of databases and infrastructures, especially on Oracle and PostgreSQL. Since the beginning of his career, he has specialized in Oracle Technologies and is Oracle Certified Professional 12c and Oracle Certified Expert RAC\/GridInfra. Over time, Daniel has become increasingly interested in open source technologies, becoming \u201cTechnology Leader Open Infrastructure\u201d and PostgreSQL expert. \u00a0Based on community or EnterpriseDB tools, he develops and installs complex high available solutions with PostgreSQL. He is also a certified PostgreSQL Plus 9.0 Professional and a Postgres Advanced Server 9.4 Professional. He is a regular speaker at PostgreSQL conferences in Switzerland and Europe. Today Daniel is also supporting our customers on AWS services such as AWS RDS, database migrations into the cloud, EC2 and automated infrastructure management with AWS SSM (System Manager). He is a certified AWS Solutions Architect Professional. Prior to dbi services, Daniel was Management System Engineer at LC SYSTEMS-Engineering AG in Basel. Before that, he worked as Oracle Developper &amp;\u00a0Project Manager at Delta Energy Solutions AG in Basel (today Powel AG). Daniel holds a diploma in Business Informatics (DHBW, Germany). His branch-related experience mainly covers the pharma industry, the financial sector, energy, lottery and telecommunications.","sameAs":["https:\/\/x.com\/westermanndanie"],"url":"https:\/\/www.dbi-services.com\/blog\/author\/daniel-westermann\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/11943","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\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=11943"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/11943\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=11943"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=11943"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=11943"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=11943"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}