{"id":992,"date":"2021-05-10T14:04:25","date_gmt":"2021-05-10T14:04:25","guid":{"rendered":"https:\/\/www.hammerdb.com\/blog\/?p=992"},"modified":"2021-05-10T14:10:01","modified_gmt":"2021-05-10T14:10:01","slug":"hammerdb-v4-1-step-workloads","status":"publish","type":"post","link":"https:\/\/www.hammerdb.com\/blog\/uncategorized\/hammerdb-v4-1-step-workloads\/","title":{"rendered":"HammerDB v4.1 New Features Pt3: Step Workloads"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p>HammerDB Variable or Step Workloads are an advanced testing feature that enables you to automatically vary the load on the database over a period of time. When taking this approach you would not focus on the test result but instead monitor the databases ability to cope with the variation in demand and transaction response times.<\/p>\n<figure id=\"attachment_995\" aria-describedby=\"caption-attachment-995\" style=\"width: 504px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2021\/05\/step1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-995 size-full\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2021\/05\/step1.png\" alt=\"\" width=\"504\" height=\"255\" srcset=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2021\/05\/step1.png 504w, https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2021\/05\/step1-300x152.png 300w\" sizes=\"auto, (max-width: 504px) 100vw, 504px\" \/><\/a><figcaption id=\"caption-attachment-995\" class=\"wp-caption-text\">Step Workloads<\/figcaption><\/figure>\n<p>To implement Step Workloads, HammerDB v4.1 introduces a CLI only command called steprun combined with a new XML configuration file called steps.xml.\u00a0\u00a0 the steprun command reads the XML configuration file and creates primary and replica instances of HammerDB per step with the replica instances starting at pre-defined time intervals automatically connecting back to the primary instance of HammerDB.<\/p>\n<figure id=\"attachment_994\" aria-describedby=\"caption-attachment-994\" style=\"width: 844px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2021\/05\/variable.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-994 size-full\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2021\/05\/variable.png\" alt=\"\" width=\"844\" height=\"621\" srcset=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2021\/05\/variable.png 844w, https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2021\/05\/variable-300x221.png 300w, https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2021\/05\/variable-768x565.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><figcaption id=\"caption-attachment-994\" class=\"wp-caption-text\">Primary and Replicas<\/figcaption><\/figure>\n<p>When defining the workload it is best to think of the configuration as defining a pyramid with the primary at the base and the replicas sitting above it. Each replica must finish at the same time or earlier than the primary.\u00a0 The primary running time continues to be defined by the standard settings. For example for configuring an Oracle workload the following commands set the rampup and duration running times respectively. Therefore in this case the workload woud run for 12 minutes with 2 minutes of rampup and 10 minutes of duration.<\/p>\n<pre>diset tpcc rampup 2 \r\ndiset tpcc duration 10<\/pre>\n<p>The replicas are defined in steps.xml in the config directory to determine how many virtual users each replica will configure, how soon after the previous instance has started the replica should start and how long it will run for.<\/p>\n<pre>&lt;steps&gt;\r\n&lt;replica1&gt;\r\n&lt;start_after_prev&gt;2&lt;\/start_after_prev&gt;\r\n&lt;duration&gt;8&lt;\/duration&gt;\r\n&lt;virtual_users&gt;2&lt;\/virtual_users&gt;\r\n&lt;\/replica1&gt;\r\n&lt;replica2&gt;\r\n&lt;start_after_prev&gt;2&lt;\/start_after_prev&gt;\r\n&lt;duration&gt;6&lt;\/duration&gt;\r\n&lt;virtual_users&gt;2&lt;\/virtual_users&gt;\r\n&lt;\/replica2&gt;\r\n&lt;replica3&gt;\r\n&lt;start_after_prev&gt;2&lt;\/start_after_prev&gt;\r\n&lt;duration&gt;4&lt;\/duration&gt;\r\n&lt;virtual_users&gt;2&lt;\/virtual_users&gt;\r\n&lt;\/replica3&gt;\r\n&lt;replica4&gt;\r\n&lt;start_after_prev&gt;2&lt;\/start_after_prev&gt;\r\n&lt;duration&gt;2&lt;\/duration&gt;\r\n&lt;virtual_users&gt;2&lt;\/virtual_users&gt;\r\n&lt;\/replica4&gt;\r\n&lt;\/steps&gt;<\/pre>\n<p>If the configuration is incorrect HammerDB will report the error and fail to start the Step Workload.\u00a0 In the following example we have set the default 2 minutes of rampup and 5 minutes of test.<\/p>\n<pre>diset tpcc rampup 2 \r\ndiset tpcc duration 5<\/pre>\n<p>In this case the workload errors because the replica running times exceed the primary.<\/p>\n<pre>Value 2 for tpcc:rampup is the same as existing value 2, no change made\r\nValue 5 for tpcc:duration is the same as existing value 5, no change made\r\nprimary starts immediately, runs rampup for 2 minutes then runs test for 5 minutes with 2 Active VU\r\nreplica1 starts 2 minutes after rampup completes and runs test for 8 minutes with 2 Active VU\r\nError: replica1 is set to complete after 12 minutes and is longer than the Primary running time of 7 minutes\r\nreplica2 starts 2 minutes after previous replica starts and runs test for 6 minutes with 2 Active VU\r\nError: replica2 is set to complete after 12 minutes and is longer than the Primary running time of 7 minutes\r\nreplica3 starts 2 minutes after previous replica starts and runs test for 4 minutes with 2 Active VU\r\nError: replica3 is set to complete after 12 minutes and is longer than the Primary running time of 7 minutes\r\nreplica4 starts 2 minutes after previous replica starts and runs test for 2 minutes with 2 Active VU\r\nError: replica4 is set to complete after 12 minutes and is longer than the Primary running time of 7 minutes\r\nError: Step workload primary running time must exceed the running time of all replicas<\/pre>\n<p>Instead the following script defines the rampup of 2 minutes and duration of 10 correctly so that the primary provides an adequate base for the pyramid, starting before and ending at the same time or after all of the replicas. The workload is started with the steprun command as the last command.\u00a0 No commands should follow steprun as the command will intentionally exit all replicas and the primary when the workload is complete.<\/p>\n<pre>dbset db ora\r\ndbset bm TPC-C\r\ndiset connection system_user system\r\ndiset connection system_password oracle\r\ndiset connection instance RAZPDB1\r\ndiset tpcc tpcc_user tpcc\r\ndiset tpcc tpcc_pass tpcc\r\ndiset tpcc total_iterations 10000000\r\ndiset tpcc ora_driver timed\r\ndiset tpcc rampup 2\r\ndiset tpcc duration 10\r\nvuset logtotemp 1\r\nvuset vu 2\r\nsteprun<\/pre>\n<p>Running this script it can be seen that without further intervention the primary and replicas are created with the replicas automatically connecting back to the primary,\u00a0 the replicas are then started at the time interval given in the steps.xml file.<\/p>\n<p>The primary sets the rampup in the replicas to zero (as the rampup has completed in the primary) and then sends the individual duration times to the replicas. Time profiling is also disabled in the replicas.\u00a0 When complete replicas will call exit from the primary and when the final replica has completed the primary will also exit.<\/p>\n<p>Note that it is expected for Virtual User 1 of the replicas to end immediately with the message.<\/p>\n<pre>Vuser 1:FINISHED SUCCESS<\/pre>\n<p>This is because Virtual User 1 is the monitor Virtual User but this Virtual User does not run in the replica meaning it ends immediately. When the replicas are started the message sending &#8220;run_virtual&#8221; is recorded.<\/p>\n<pre>Sending \"run_virtual\" ....<\/pre>\n<p>The following output shows the previously defined step workload running against an Oracle database.<\/p>\n<pre>hammerdb&gt;source runstepora.tcl\r\nDatabase set to Oracle\r\nBenchmark set to TPC-C for Oracle\r\nValue system for connection:system_user is the same as existing value system, no change made\r\nChanged connection:system_password from manager to oracle for Oracle\r\nChanged connection:instance from oracle to RAZPDB1 for Oracle\r\nValue tpcc for tpcc:tpcc_user is the same as existing value tpcc, no change made\r\nValue tpcc for tpcc:tpcc_pass is the same as existing value tpcc, no change made\r\nChanged tpcc:total_iterations from 1000000 to 10000000 for Oracle\r\nClearing Script, reload script to activate new setting\r\nScript cleared\r\nChanged tpcc:ora_driver from test to timed for Oracle\r\nValue 2 for tpcc:rampup is the same as existing value 2, no change made\r\nChanged tpcc:duration from 5 to 10 for Oracle\r\nprimary starts immediately, runs rampup for 2 minutes then runs test for 10 minutes with 2 Active VU\r\nreplica1 starts 2 minutes after rampup completes and runs test for 8 minutes with 2 Active VU\r\nreplica2 starts 2 minutes after previous replica starts and runs test for 6 minutes with 2 Active VU\r\nreplica3 starts 2 minutes after previous replica starts and runs test for 4 minutes with 2 Active VU\r\nreplica4 starts 2 minutes after previous replica starts and runs test for 2 minutes with 2 Active VU\r\nSwitch from Local\r\nto Primary mode?\r\nEnter yes or no: replied yes\r\nSetting Primary Mode at id : 20166, hostname : razorbill.home\r\nPrimary Mode active at id : 20166, hostname : razorbill.home\r\nStarting 1 replica HammerDB instance\r\nStarting 2 replica HammerDB instance\r\nHammerDB CLI v4.1\r\nCopyright (C) 2003-2021 Steve Shaw\r\nType \"help\" for a list of commands\r\nHammerDB CLI v4.1\r\nCopyright (C) 2003-2021 Steve Shaw\r\nType \"help\" for a list of commands\r\nStarting 3 replica HammerDB instance\r\nStarting 4 replica HammerDB instance\r\nDoing wait to connnect ....\r\nPrimary waiting for all replicas to connect .... 0 out of 4 are connected\r\nHammerDB CLI v4.1\r\nCopyright (C) 2003-2021 Steve Shaw\r\nType \"help\" for a list of commands\r\nHammerDB CLI v4.1\r\nCopyright (C) 2003-2021 Steve Shaw\r\nType \"help\" for a list of commands\r\nThe xml is well-formed, applying configuration\r\nThe xml is well-formed, applying configuration\r\nThe xml is well-formed, applying configuration\r\nSwitch from Local\r\nto Replica mode?\r\nEnter yes or no: replied yes\r\nSwitch from Local\r\nto Replica mode?\r\nEnter yes or no: replied yes\r\nSetting Replica Mode at id : 20182, hostname : razorbill.home\r\nReplica connecting to localhost 20166 : Connection succeeded\r\nReceived a new replica connection from host ::1\r\nSetting Replica Mode at id : 20181, hostname : razorbill.home\r\nReplica connecting to localhost 20166 : Connection succeeded\r\nNew replica joined : {20182 razorbill.home}\r\nThe xml is well-formed, applying configuration\r\nReceived a new replica connection from host ::1\r\nNew replica joined : {20182 razorbill.home} {20181 razorbill.home}\r\nSwitch from Local\r\nto Replica mode?\r\nPrimary call back successful\r\nSwitched to Replica mode via callback\r\nEnter yes or no: replied yes\r\nPrimary call back successful\r\nSwitched to Replica mode via callback\r\nSetting Replica Mode at id : 20183, hostname : razorbill.home\r\nReceived a new replica connection from host ::1\r\nReplica connecting to localhost 20166 : Connection succeeded\r\nNew replica joined : {20182 razorbill.home} {20181 razorbill.home} {20183 razorbill.home}\r\nPrimary call back successful\r\nSwitched to Replica mode via callback\r\nSwitch from Local\r\nto Replica mode?\r\nEnter yes or no: replied yes\r\nSetting Replica Mode at id : 20184, hostname : razorbill.home\r\nReceived a new replica connection from host ::1\r\nReplica connecting to localhost 20166 : Connection succeeded\r\nNew replica joined : {20182 razorbill.home} {20181 razorbill.home} {20183 razorbill.home} {20184 razorbill.home}\r\nPrimary call back successful\r\nSwitched to Replica mode via callback\r\nPrimary waiting for all replicas to connect .... {20182 razorbill.home} {20181 razorbill.home} {20183 razorbill.home} {20184 razorbill.home} out of 4 are connected\r\nPrimary Received all replica connections {20182 razorbill.home} {20181 razorbill.home} {20183 razorbill.home} {20184 razorbill.home}\r\nDatabase set to Oracle\r\nDatabase set to Oracle\r\nDatabase set to Oracle\r\nSetting primary to run 2 virtual users for 10 duration\r\nDatabase set to Oracle\r\nDatabase set to Oracle\r\nValue 10 for tpcc:duration is the same as existing value 10, no change made\r\nSending dbset all to 20182 razorbill.home\r\nSetting replica1 to start after 2 duration 8 VU count 2, Replica instance is 20182 razorbill.home\r\nSending \"diset tpcc ora_timeprofile false\" to 20182 razorbill.home\r\nValue false for tpcc:ora_timeprofile is the same as existing value false, no change made\r\nSending \"diset tpcc rampup 0\" to 20182 razorbill.home\r\nChanged tpcc:rampup from 2 to 0 for Oracle\r\nSending \"diset tpcc duration 8\" to 20182 razorbill.home\r\nChanged tpcc:duration from 10 to 8 for Oracle\r\nSending \"vuset vu 2\" to 20182 razorbill.home\r\nSending dbset all to 20181 razorbill.home\r\nSetting replica2 to start after 2 duration 6 VU count 2, Replica instance is 20181 razorbill.home\r\nSending \"diset tpcc ora_timeprofile false\" to 20181 razorbill.home\r\nValue false for tpcc:ora_timeprofile is the same as existing value false, no change made\r\nSending \"diset tpcc rampup 0\" to 20181 razorbill.home\r\nChanged tpcc:rampup from 2 to 0 for Oracle\r\nSending \"diset tpcc duration 6\" to 20181 razorbill.home\r\nChanged tpcc:duration from 10 to 6 for Oracle\r\nSending \"vuset vu 2\" to 20181 razorbill.home\r\nSending dbset all to 20183 razorbill.home\r\nSetting replica3 to start after 2 duration 4 VU count 2, Replica instance is 20183 razorbill.home\r\nSending \"diset tpcc ora_timeprofile false\" to 20183 razorbill.home\r\nValue false for tpcc:ora_timeprofile is the same as existing value false, no change made\r\nSending \"diset tpcc rampup 0\" to 20183 razorbill.home\r\nChanged tpcc:rampup from 2 to 0 for Oracle\r\nSending \"diset tpcc duration 4\" to 20183 razorbill.home\r\nChanged tpcc:duration from 10 to 4 for Oracle\r\nSending \"vuset vu 2\" to 20183 razorbill.home\r\nSending dbset all to 20184 razorbill.home\r\nSetting replica4 to start after 2 duration 2 VU count 2, Replica instance is 20184 razorbill.home\r\nSending \"diset tpcc ora_timeprofile false\" to 20184 razorbill.home\r\nValue false for tpcc:ora_timeprofile is the same as existing value false, no change made\r\nSending \"diset tpcc rampup 0\" to 20184 razorbill.home\r\nChanged tpcc:rampup from 2 to 0 for Oracle\r\nSending \"diset tpcc duration 2\" to 20184 razorbill.home\r\nChanged tpcc:duration from 10 to 2 for Oracle\r\nSending \"vuset vu 2\" to 20184 razorbill.home\r\nScript loaded, Type \"print script\" to view\r\nScript loaded, Type \"print script\" to view\r\nScript loaded, Type \"print script\" to view\r\nScript loaded, Type \"print script\" to view\r\nScript loaded, Type \"print script\" to view\r\nVuser 1 created MONITOR - WAIT IDLE\r\nVuser 2 created - WAIT IDLE\r\nVuser 3 created - WAIT IDLE\r\nVuser 1 created MONITOR - WAIT IDLE\r\nVuser 2 created - WAIT IDLE\r\nVuser 1 created MONITOR - WAIT IDLE\r\nVuser 3 created - WAIT IDLE\r\nVuser 2 created - WAIT IDLE\r\n3 Virtual Users Created with Monitor VU\r\nVuser 3 created - WAIT IDLE\r\n3 Virtual Users Created with Monitor VU\r\nVuser 1 created MONITOR - WAIT IDLE\r\nVuser 2 created - WAIT IDLE\r\nVuser 3 created - WAIT IDLE\r\n3 Virtual Users Created with Monitor VU\r\nVuser 1 created MONITOR - WAIT IDLE\r\nVuser 2 created - WAIT IDLE\r\nVuser 3 created - WAIT IDLE\r\n3 Virtual Users Created with Monitor VU\r\nLogging activated\r\nto \/tmp\/hammerdb.log\r\n3 Virtual Users Created with Monitor VU\r\nStarting Primary VUs\r\nVuser 1:RUNNING\r\nVuser 1:Beginning rampup time of 2 minutes\r\nVuser 2:RUNNING\r\nVuser 2:Processing 10000000 transactions with output suppressed...\r\nVuser 3:RUNNING\r\nVuser 3:Processing 10000000 transactions with output suppressed...\r\nDelaying Start of Replicas to rampup 2 replica1 2 replica2 2 replica3 2 replica4 2\r\nDelaying replica1 for 4 minutes.\r\nDelaying replica2 for 6 minutes.\r\nDelaying replica3 for 8 minutes.\r\nDelaying replica4 for 10 minutes.\r\nPrimary entering loop waiting for vucomplete\r\nVuser 1:Rampup 1 minutes complete ...\r\nVuser 1:Rampup 2 minutes complete ...\r\nVuser 1:Rampup complete, Taking start AWR snapshot.\r\nVuser 1:Start Snapshot 18 taken at 10 MAY 2021 09:07 of instance RAZCDB1 (1) of database RAZCDB1 (171153594)\r\nVuser 1:Timing test period of 10 in minutes\r\nVuser 1:1 ...,\r\nSending \"run_virtual\" to 20182 razorbill.home\r\nVuser 1:RUNNING\r\nVuser 1:Operating in Replica Mode, No Snapshots taken...\r\nVuser 1:FINISHED SUCCESS\r\nVuser 2:RUNNING\r\nVuser 2:Processing 10000000 transactions with output suppressed...\r\nVuser 3:RUNNING\r\nVuser 3:Processing 10000000 transactions with output suppressed...\r\nVuser 1:2 ...,\r\nVuser 1:3 ...,\r\nSending \"run_virtual\" to 20181 razorbill.home\r\nVuser 1:RUNNING\r\nVuser 1:Operating in Replica Mode, No Snapshots taken...\r\nVuser 1:FINISHED SUCCESS\r\nVuser 2:RUNNING\r\nVuser 2:Processing 10000000 transactions with output suppressed...\r\nVuser 3:RUNNING\r\nVuser 3:Processing 10000000 transactions with output suppressed...\r\nVuser 1:4 ...,\r\nVuser 1:5 ...,\r\nSending \"run_virtual\" to 20183 razorbill.home\r\nVuser 1:RUNNING\r\nVuser 1:Operating in Replica Mode, No Snapshots taken...\r\nVuser 1:FINISHED SUCCESS\r\nVuser 2:RUNNING\r\nVuser 2:Processing 10000000 transactions with output suppressed...\r\nVuser 3:RUNNING\r\nVuser 3:Processing 10000000 transactions with output suppressed...\r\nVuser 1:6 ...,\r\nVuser 1:7 ...,\r\nSending \"run_virtual\" to 20184 razorbill.home\r\nVuser 1:RUNNING\r\nVuser 1:Operating in Replica Mode, No Snapshots taken...\r\nVuser 1:FINISHED SUCCESS\r\nVuser 2:RUNNING\r\nVuser 2:Processing 10000000 transactions with output suppressed...\r\nVuser 3:RUNNING\r\nVuser 3:Processing 10000000 transactions with output suppressed...\r\nVuser 1:8 ...,\r\nVuser 1:9 ...,\r\nVuser 1:10 ...,\r\nVuser 1:Test complete, Taking end AWR snapshot.\r\nVuser 1:End Snapshot 19 taken at 10 MAY 2021 09:17 of instance RAZCDB1 (1) of database RAZCDB1 (171153594)\r\nVuser 1:Test complete: view report from SNAPID 18 to 19\r\nVuser 1:2 Active Virtual Users configured\r\nVuser 1:TEST RESULT : System achieved 13607 NOPM from 28559 Oracle TPM\r\nVuser 1:FINISHED SUCCESS\r\nVuser 2:FINISHED SUCCESS\r\nVuser 3:FINISHED SUCCESS\r\nVuser 2:FINISHED SUCCESS\r\nVuser 3:FINISHED SUCCESS\r\nVuser 3:FINISHED SUCCESS\r\nALL VIRTUAL USERS COMPLETE\r\nVuser 2:FINISHED SUCCESS\r\nReplica workload complete and calling exit from primary\r\nLost connection to : 20182 razorbill.home because target application died or connection lost\r\nVuser 3:FINISHED SUCCESS\r\nALL VIRTUAL USERS COMPLETE\r\nVuser 3:FINISHED SUCCESS\r\nALL VIRTUAL USERS COMPLETE\r\nVuser 2:FINISHED SUCCESS\r\nALL VIRTUAL USERS COMPLETE\r\nVuser 2:FINISHED SUCCESS\r\nALL VIRTUAL USERS COMPLETE\r\nReplica workload complete and calling exit from primary\r\nLost connection to : 20181 razorbill.home because target application died or connection lost\r\nReplica workload complete and calling exit from primary\r\nLost connection to : 20183 razorbill.home because target application died or connection lost\r\nReplica workload complete and calling exit from primary\r\nLost connection to : 20184 razorbill.home because target application died or connection lost\r\nPrimary complete\r\ndeleting port_file \/tmp\/hdbcallback.tcl\r\nStep workload complete<\/pre>\n<p>Monitoring the workload enables you to see the variation and the impact of starting additional instances against the same database over time.<\/p>\n<figure id=\"attachment_999\" aria-describedby=\"caption-attachment-999\" style=\"width: 642px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2021\/05\/Screenshot-from-2021-05-10-09-14-07.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-999 size-full\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2021\/05\/Screenshot-from-2021-05-10-09-14-07.png\" alt=\"\" width=\"642\" height=\"358\" srcset=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2021\/05\/Screenshot-from-2021-05-10-09-14-07.png 642w, https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2021\/05\/Screenshot-from-2021-05-10-09-14-07-300x167.png 300w\" sizes=\"auto, (max-width: 642px) 100vw, 642px\" \/><\/a><figcaption id=\"caption-attachment-999\" class=\"wp-caption-text\">Oracle Transaction Counter<\/figcaption><\/figure>\n<p>Step workloads enable you to configure complex Virtual User configurations to see how your database responds to changes in load over time.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; HammerDB Variable or Step Workloads are an advanced testing feature that enables you to automatically vary the load on the database over a period of time. When taking this approach you would not focus on the test result but instead monitor the databases ability to cope with the variation in demand and transaction response &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.hammerdb.com\/blog\/uncategorized\/hammerdb-v4-1-step-workloads\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;HammerDB v4.1 New Features Pt3: Step Workloads&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"ppma_author":[5],"class_list":["post-992","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"authors":[{"term_id":5,"user_id":2,"is_guest":0,"slug":"hammerdb","display_name":"HammerDB","avatar_url":{"url":"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2018\/10\/logo-white.png","url2x":"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2018\/10\/logo-white.png"},"author_category":"","user_url":"http:\/\/www.hammerdb.com","last_name":"","first_name":"","job_title":"","description":""}],"_links":{"self":[{"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/posts\/992","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/comments?post=992"}],"version-history":[{"count":10,"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/posts\/992\/revisions"}],"predecessor-version":[{"id":1007,"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/posts\/992\/revisions\/1007"}],"wp:attachment":[{"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/media?parent=992"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/categories?post=992"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/tags?post=992"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=992"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}