{"id":1275,"date":"2022-12-01T14:54:29","date_gmt":"2022-12-01T14:54:29","guid":{"rendered":"https:\/\/www.hammerdb.com\/blog\/?p=1275"},"modified":"2022-12-02T11:11:49","modified_gmt":"2022-12-02T11:11:49","slug":"hammerdb-v4-6-new-features-pt2-jobs-interface","status":"publish","type":"post","link":"https:\/\/www.hammerdb.com\/blog\/uncategorized\/hammerdb-v4-6-new-features-pt2-jobs-interface\/","title":{"rendered":"HammerDB v4.6 New Features Pt2: Jobs Interface"},"content":{"rendered":"<p>Feedback from the Community raised the Issue <a href=\"https:\/\/github.com\/TPC-Council\/HammerDB\/issues\/352\"><span class=\"js-issue-title markdown-title\">Adding the enhancement for storing and retrieval of HammerDB results and configurations<\/span> <span class=\"f1-light color-fg-muted\">#352<\/span><\/a> that although HammerDB prints result output interactively and to log files, it would be preferred to have these results stored in a format that could be browsed at a later point. In particular, after a running a test it would be ideal to have a repository where we could verify the configuration of the workload that was run, the results and any timing or transaction count data generated to bring all the log output into a central location. HammerDB v4.6 does this with the &#8220;jobs&#8221; command.<\/p>\n<h3>Jobs Configuration and Storage<\/h3>\n<p>The base configuration for the jobs storage can be found in the generic.xml file in the commandline section.<\/p>\n<pre>&lt;commandline&gt;\r\n&lt;sqlite_db&gt;TMP&lt;\/sqlite_db&gt; \r\n&lt;jobsoutput&gt;JSON&lt;\/jobsoutput&gt;\r\n&lt;jobs_disable&gt;0&lt;\/jobs_disable&gt;\r\n&lt;\/commandline&gt;<\/pre>\n<p>The default storage location is set to &#8220;TMP&#8221; where HammerDB will firstly check to see if a TMP or TEMP environment variable has been set and if not find a default temp location and either create a SQLite database called hammer.DB if one does not already exist in this location or open the existing one.\u00a0 For example on Windows an example of opening a new database.<\/p>\n<div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#abb8c3;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/p>\n<pre class=\"dm-pre-admin-side\">HammerDB CLI v4.6\r\nCopyright (C) 2003-2022 Steve Shaw\r\nType \"help\" for a list of commands\r\nInitialized new SQLite on-disk database C:\/Users\/Hdb\/AppData\/Local\/Temp\/hammer.DB\r\nhammerdb&gt;<\/pre>\n<p><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div>\n<p>and on Linux for opening a new database where we have set the TMP environment variable to a new directory called TMP under the HammerDB-4.6 directory.<\/p>\n<div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#abb8c3;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/p>\n<pre class=\"dm-pre-admin-side\">HammerDB CLI v4.6\r\nCopyright (C) 2003-2022 Steve Shaw\r\nType \"help\" for a list of commands\r\nInitialized SQLite on-disk database \/home\/hdb\/HammerDB-4.6\/TMP\/hammer.DB using existing tables (36,864 KB)\r\nhammerdb&gt;\r\n<\/pre>\n<p><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div>\n<p>If for any reason you wish to completely refresh all jobs data it is safe to remove the hammer.DB file and it will be recreated on the next restart. The options for jobs output and disabling jobs can be set at runtime.<\/p>\n<p>An additional option is given in the timeprofile section called xt_job_storage, where if using the xt time profiler it will enable\/disable the storage of the time profile data.<\/p>\n<pre>&lt;timeprofile&gt;\r\n&lt;profiler&gt;xtprof&lt;\/profiler&gt;\r\n...\r\n&lt;xt_job_storage&gt;1&lt;\/xt_job_storage&gt;\r\n&lt;\/timeprofile&gt;<\/pre>\n<p>By default, the jobs storage is disabled in the GUI for v4.6, however advanced users can fully enable it by modifying the following sections in the jobs and xtprof modules respectively with the output from the GUI queryable from the CLI at this release.<\/p>\n<div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#abb8c3;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/p>\n<pre class=\"dm-pre-admin-side\">proc init_job_tables_gui { } {\r\n#In the GUI, we disable the jobs output even though it works by running the jobs command in the console\r\n rename jobs {}\r\n uplevel #0 {proc hdbjobs { args } { return \"\" }}\r\n#If we want to enable jobs output in the GUI comment out previous 2 lines and uncomment the following line\r\n #init_job_tables\r\n}\r\n\r\nTo enable the time profiling in the GUI in the xtprof module update the following:\r\n\r\n#If running in the GUI do not try to store output in SQLite\r\nif { [ tsv::exists commandline sqldb ] eq 0 } {\r\nset xtjob_storage 0\r\n}<\/pre>\n<p><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div>\n<h3>Disabling Jobs<\/h3>\n<p><span role=\"presentation\">If the storage of job related data is not desired, then it is possible to disable\/enable this feature with the jobs disable command.<br \/>\n<\/span><\/p>\n<p><span role=\"presentation\"><div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#abb8c3;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/span><\/p>\n<pre class=\"dm-pre-admin-side\">hammerdb&gt;jobs disable 1\r\nDisabling jobs repository, restart HammerDB to take effect\r\n\r\nhammerdb&gt;jobs disable 0\r\nEnabling jobs repository, restart HammerDB to take effect\r\n<\/pre>\n<p><span id=\"container-1453-outerCt\" role=\"presentation\"><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div><br \/>\n<\/span><\/p>\n<p>If disabled, the SQLite repository database is not opened, and it is not possible to query any jobs related data. Doing so will prompt on how to re-enable the feature. When enabled, the repository will be opened and it will be possible to query the data previously stored.<\/p>\n<p><span role=\"presentation\"><div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#abb8c3;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/span><\/p>\n<pre class=\"dm-pre-admin-side\">$ .\/hammerdbcli\r\nHammerDB CLI v4.6\r\nCopyright (C) 2003-2022 Steve Shaw\r\nType \"help\" for a list of commands\r\nhammerdb&gt;jobs\r\nError: Jobs Disabled: enable with command \"jobs disable 0\" and restart HammerDB\r\n\r\n$ .\/hammerdbcli\r\nHammerDB CLI v4.6\r\nCopyright (C) 2003-2022 Steve Shaw\r\nType \"help\" for a list of commands\r\nInitialized SQLite on-disk database \/home\/steve\/HammerDB-4.6\/TMP\/hammer.DB using existing tables (36,864 KB)\r\nhammerdb&gt;<\/pre>\n<p><span id=\"container-1453-outerCt\" role=\"presentation\"><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div><\/span><\/p>\n<h3>Creating Jobs and Formatting Output<\/h3>\n<p><span id=\"container-1453-outerCt\" role=\"presentation\">\u00a0When enabled, a job will be created with a unique id whenever a workload is run. This happens for both a schema build and running a test.<br \/>\n<\/span><\/p>\n<p>For example, we will run the following script to build a TPROC-C schema<\/p>\n<div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#abb8c3;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/p>\n<pre class=\"dm-pre-admin-side\">puts \"SETTING CONFIGURATION\"\r\ndbset db maria\r\ndbset bm TPC-C\r\n\r\ndiset connection maria_host localhost\r\ndiset connection maria_port 3306\r\ndiset connection maria_socket \/tmp\/mariadb.sock\r\n\r\nset vu [ numberOfCPUs ]\r\nset warehouse [ expr {$vu * 5} ]\r\ndiset tpcc maria_count_ware $warehouse\r\ndiset tpcc maria_num_vu $vu\r\ndiset tpcc maria_user root\r\ndiset tpcc maria_pass maria\r\ndiset tpcc maria_dbase tpcc\r\ndiset tpcc maria_storage_engine innodb\r\nif { $warehouse &gt;= 200 } {\r\ndiset tpcc maria_partition true\r\n    } else {\r\ndiset tpcc maria_partition false\r\n    }\r\nputs \"SCHEMA BUILD STARTED\"\r\nbuildschema\r\nputs \"SCHEMA BUILD COMPLETED\"<\/pre>\n<p><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div>\n<p>and the following to run a test<\/p>\n<div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#abb8c3;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/p>\n<pre class=\"dm-pre-admin-side\">puts \"SETTING CONFIGURATION\"\r\ndbset db maria\r\ndbset bm TPC-C\r\n\r\ndiset connection maria_host localhost\r\ndiset connection maria_port 3306\r\ndiset connection maria_socket \/tmp\/mariadb.sock\r\n\r\ndiset tpcc maria_user root\r\ndiset tpcc maria_pass maria\r\ndiset tpcc maria_dbase tpcc\r\ndiset tpcc maria_driver timed\r\ndiset tpcc maria_rampup 2\r\ndiset tpcc maria_duration 5\r\ndiset tpcc maria_allwarehouse true\r\ndiset tpcc maria_timeprofile true\r\n\r\nloadscript\r\nputs \"TEST STARTED\"\r\nvuset vu vcpu\r\nvucreate\r\ntcstart\r\ntcstatus\r\nset jobid [ vurun ]\r\nvudestroy\r\ntcstop\r\nputs \"TEST COMPLETE\"<\/pre>\n<p><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div>\n<p>After running the scripts using the jobs command we can now see that we have created 2 jobs. One for building the schema and one for running the test as expected.<\/p>\n<p><span role=\"presentation\"><div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#abb8c3;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/span><\/p>\n<pre class=\"dm-pre-admin-side\">hammerdb&gt;jobs\r\n[\r\n\u00a0 \"6388A0385EEC03E263531353\",\r\n\u00a0 \"6388A1585EEC03E243839333\"\r\n]<\/pre>\n<p><span role=\"presentation\"><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div><br \/>\n<\/span><\/p>\n<p><span role=\"presentation\">For querying a build, the status command will show whether all Virtual Users started and finished successfully, allowing a quick way to check the status of a build.\u00a0 <\/span><\/p>\n<p><span role=\"presentation\"><div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#abb8c3;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/span><\/p>\n<pre class=\"dm-pre-admin-side\">hammerdb&gt;job 6388A0385EEC03E263531353 status\r\n[\r\n\u00a0 \"0\",\r\n\u00a0 \"Ready to create a 20 Warehouse MariaDB TPROC-C schema\\nin host LOCALHOST:\\\/TMP\\\/MARIADB.SOCK under user ROOT in database TPCC with storage engine INNODB?\",\r\n\u00a0 \"0\",\r\n\u00a0 \"Vuser 1:RUNNING\",\r\n\u00a0 \"0\",\r\n\u00a0 \"Vuser 2:RUNNING\",\r\n\u00a0 \"0\",\r\n\u00a0 \"Vuser 3:RUNNING\",\r\n\u00a0 \"0\",\r\n\u00a0 \"Vuser 4:RUNNING\",\r\n\u00a0 \"0\",\r\n\u00a0 \"Vuser 5:RUNNING\",\r\n\u00a0 \"0\",\r\n\u00a0 \"Vuser 2:FINISHED SUCCESS\",\r\n\u00a0 \"0\",\r\n\u00a0 \"Vuser 3:FINISHED SUCCESS\",\r\n\u00a0 \"0\",\r\n\u00a0 \"Vuser 5:FINISHED SUCCESS\",\r\n\u00a0 \"0\",\r\n\u00a0 \"Vuser 4:FINISHED SUCCESS\",\r\n\u00a0 \"0\",\r\n\u00a0 \"Vuser 1:FINISHED SUCCESS\",\r\n\u00a0 \"0\",\r\n\u00a0 \"ALL VIRTUAL USERS COMPLETE\"\r\n]<\/pre>\n<p><span id=\"container-1453-outerCt\" role=\"presentation\"><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div><br \/>\n<\/span><\/p>\n<p><span role=\"presentation\">For formatting output, there is the option of converting the output to JSON or outputting text which is done with the jobs format command. <\/span><\/p>\n<p><span role=\"presentation\"><div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#abb8c3;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/span><\/p>\n<pre class=\"dm-pre-admin-side\">hammerdb&gt;job format JSON\r\nSetting jobs output format to json\r\n\r\nhammerdb&gt;jobs format text\r\nSetting jobs output format to text<\/pre>\n<p><span role=\"presentation\"><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div><\/span><\/p>\n<p>In the following example, we verify more details about the build by querying the output of Virtual User 1, we can see that it monitored all of the Virtual Users to load the data correctly and created the stored procedures and gathered statistics, so we can be sure that the schema build was fully complete.<\/p>\n<p><span role=\"presentation\"><div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#abb8c3;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/span><\/p>\n<pre class=\"dm-pre-admin-side\">hammerdb&gt;job 6388A0385EEC03E263531353 1\r\nVirtual User 1: Monitor Thread\r\nVirtual User 1: CREATING TPCC SCHEMA\r\nVirtual User 1: Ssl_cipher {}\r\nVirtual User 1: CREATING DATABASE tpcc\r\nVirtual User 1: CREATING TPCC TABLES\r\nVirtual User 1: Loading Item\r\nVirtual User 1: Loading Items - 50000\r\nVirtual User 1: Loading Items - 100000\r\nVirtual User 1: Item done\r\nVirtual User 1: Monitoring Workers...\r\nVirtual User 1: Workers: 4 Active 0 Done\r\nVirtual User 1: Workers: 0 Active 4 Done\r\nVirtual User 1: CREATING TPCC STORED PROCEDURES\r\nVirtual User 1: GATHERING SCHEMA STATISTICS\r\nVirtual User 1: TPCC SCHEMA COMPLETE<\/pre>\n<p><span id=\"container-1453-outerCt\" role=\"presentation\"><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div><br \/>\n<\/span><\/p>\n<h3>Querying\u00a0 Job Output<\/h3>\n<p>As we ran a workload we can now query the configuration of HammerDB when the job was run,\u00a0 in the example we query the database, benchmark, timestamp for the job and the dict at the time it was run.<\/p>\n<div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#abb8c3;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/p>\n<pre class=\"dm-pre-admin-side\">hammerdb&gt;job 6388A1585EEC03E243839333 db\r\n[\"MariaDB\"]\r\n\r\nhammerdb&gt;job 6388A1585EEC03E243839333 bm\r\n[\"TPC-C\"]\r\n\r\nhammerdb&gt;job 6388A1585EEC03E243839333 timestamp\r\n6388A1585EEC03E243839333 {2022-12-01 12:43:04}\r\n\r\nhammerdb&gt;job 6388A1585EEC03E243839333 dict\r\n{\r\n  \"connection\": {\r\n    \"maria_host\": \"localhost\",\r\n    \"maria_port\": \"3306\",\r\n    \"maria_socket\": \"\\\/tmp\\\/mariadb.sock\",\r\n    \"maria_ssl\": \"false\",\r\n    \"maria_ssl_two_way\": \"false\",\r\n    \"maria_ssl_linux_capath\": \"\\\/etc\\\/mysql\\\/certs\",\r\n    \"maria_ssl_windows_capath\": \"C:\\\\mysql\\\\certs\",\r\n    \"maria_ssl_ca\": \"ca-cert.pem\",\r\n    \"maria_ssl_cert\": \"client-cert.pem\",\r\n    \"maria_ssl_key\": \"client-key.pem\",\r\n    \"maria_ssl_cipher\": \"server\"\r\n  },\r\n  \"tpcc\": {\r\n    \"maria_count_ware\": \"20\",\r\n    \"maria_num_vu\": \"4\",\r\n    \"maria_user\": \"root\",\r\n    \"maria_pass\": \"maria\",\r\n    \"maria_dbase\": \"tpcc\",\r\n    \"maria_storage_engine\": \"innodb\",\r\n    \"maria_partition\": \"false\",\r\n    \"maria_prepared\": \"false\",\r\n    \"maria_total_iterations\": \"10000000\",\r\n    \"maria_raiseerror\": \"false\",\r\n    \"maria_keyandthink\": \"false\",\r\n    \"maria_driver\": \"timed\",\r\n    \"maria_rampup\": \"2\",\r\n    \"maria_duration\": \"5\",\r\n    \"maria_allwarehouse\": \"true\",\r\n    \"maria_timeprofile\": \"true\",\r\n    \"maria_async_scale\": \"false\",\r\n    \"maria_async_client\": \"10\",\r\n    \"maria_async_verbose\": \"false\",\r\n    \"maria_async_delay\": \"1000\",\r\n    \"maria_connect_pool\": \"false\"\r\n  }\r\n}\r\n<\/pre>\n<p><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div>\n<p>We can also query the job result, the transaction count and the captured xtprof timings.\u00a0 By default the summary timings are reported, however by adding the vuid you can also drill down into the timings for a specific virtual user.<\/p>\n<div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#abb8c3;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/p>\n<pre class=\"dm-pre-admin-side\">hammerdb&gt;job 6388A1585EEC03E243839333 result\r\n[\r\n  \"6388A1585EEC03E243839333\",\r\n  \"2022-12-01 12:43:04\",\r\n  \"4 Active Virtual Users configured\",\r\n  \"TEST RESULT : System achieved 28564 NOPM from 66576 MariaDB TPM\"\r\n]\r\n\r\nhammerdb&gt;job 6388A1585EEC03E243839333 tcount\r\n{\"MariaDB tpm\": {\r\n    \"0\": \"2022-12-01 12:43:04\",\r\n    \"67644\": \"2022-12-01 12:43:14\",\r\n    \"82308\": \"2022-12-01 12:43:24\",\r\n    \"80886\": \"2022-12-01 12:43:34\",\r\n    \"79746\": \"2022-12-01 12:43:44\",\r\n    \"80916\": \"2022-12-01 12:43:54\",\r\n    \"81000\": \"2022-12-01 12:44:04\",\r\n    \"80160\": \"2022-12-01 12:44:14\",\r\n    \"78690\": \"2022-12-01 12:44:24\",\r\n    \"81114\": \"2022-12-01 12:44:34\",\r\n    \"79776\": \"2022-12-01 12:44:44\",\r\n    \"79878\": \"2022-12-01 12:44:54\",\r\n    \"77592\": \"2022-12-01 12:45:04\",\r\n    \"73290\": \"2022-12-01 12:45:14\",\r\n    \"76368\": \"2022-12-01 12:45:24\",\r\n    \"76782\": \"2022-12-01 12:45:34\",\r\n    \"73698\": \"2022-12-01 12:45:44\",\r\n    \"54996\": \"2022-12-01 12:45:54\",\r\n    \"62448\": \"2022-12-01 12:46:04\",\r\n    \"66192\": \"2022-12-01 12:46:14\",\r\n    \"62046\": \"2022-12-01 12:46:24\",\r\n    \"63030\": \"2022-12-01 12:46:34\",\r\n    \"64110\": \"2022-12-01 12:46:44\",\r\n    \"63816\": \"2022-12-01 12:46:54\",\r\n    \"66036\": \"2022-12-01 12:47:04\",\r\n    \"65268\": \"2022-12-01 12:47:14\",\r\n    \"64638\": \"2022-12-01 12:47:24\",\r\n    \"61878\": \"2022-12-01 12:47:34\",\r\n    \"64716\": \"2022-12-01 12:47:44\",\r\n    \"61800\": \"2022-12-01 12:47:54\",\r\n    \"63486\": \"2022-12-01 12:48:04\",\r\n    \"64530\": \"2022-12-01 12:48:14\",\r\n    \"64524\": \"2022-12-01 12:48:24\",\r\n    \"65166\": \"2022-12-01 12:48:34\",\r\n    \"65640\": \"2022-12-01 12:48:44\",\r\n    \"68286\": \"2022-12-01 12:48:54\",\r\n    \"68970\": \"2022-12-01 12:49:04\",\r\n    \"70998\": \"2022-12-01 12:49:14\",\r\n    \"68964\": \"2022-12-01 12:49:24\",\r\n    \"69456\": \"2022-12-01 12:49:34\",\r\n    \"69378\": \"2022-12-01 12:49:44\",\r\n    \"69018\": \"2022-12-01 12:49:54\",\r\n    \"69072\": \"2022-12-01 12:50:04\"\r\n  }}\r\n\r\nhammerdb&gt;job 6388A1585EEC03E243839333 timing\r\n{\r\n  \"NEWORD\": {\r\n    \"elapsed_ms\": \"420522.5\",\r\n    \"calls\": \"53829\",\r\n    \"min_ms\": \"1.284\",\r\n    \"avg_ms\": \"4.239\",\r\n    \"max_ms\": \"187.509\",\r\n    \"total_ms\": \"228207.349\",\r\n    \"p99_ms\": \"14.224\",\r\n    \"p95_ms\": \"6.92\",\r\n    \"p50_ms\": \"3.846\",\r\n    \"sd\": \"3409.688\",\r\n    \"ratio_pct\": \"54.213\"\r\n  },\r\n  \"PAYMENT\": {\r\n    \"elapsed_ms\": \"420522.5\",\r\n    \"calls\": \"53889\",\r\n    \"min_ms\": \"0.612\",\r\n    \"avg_ms\": \"1.685\",\r\n    \"max_ms\": \"193.093\",\r\n    \"total_ms\": \"90797.186\",\r\n    \"p99_ms\": \"6.48\",\r\n    \"p95_ms\": \"3.134\",\r\n    \"p50_ms\": \"1.434\",\r\n    \"sd\": \"1893.599\",\r\n    \"ratio_pct\": \"21.57\"\r\n  },\r\n  \"DELIVERY\": {\r\n    \"elapsed_ms\": \"420522.5\",\r\n    \"calls\": \"5321\",\r\n    \"min_ms\": \"5.065\",\r\n    \"avg_ms\": \"13.447\",\r\n    \"max_ms\": \"250.596\",\r\n    \"total_ms\": \"71553.841\",\r\n    \"p99_ms\": \"85.008\",\r\n    \"p95_ms\": \"30.665\",\r\n    \"p50_ms\": \"9.919\",\r\n    \"sd\": \"15320.906\",\r\n    \"ratio_pct\": \"16.998\"\r\n  },\r\n  \"OSTAT\": {\r\n    \"elapsed_ms\": \"420522.5\",\r\n    \"calls\": \"5472\",\r\n    \"min_ms\": \"0.413\",\r\n    \"avg_ms\": \"2.232\",\r\n    \"max_ms\": \"127.654\",\r\n    \"total_ms\": \"12215.15\",\r\n    \"p99_ms\": \"34.898\",\r\n    \"p95_ms\": \"4.028\",\r\n    \"p50_ms\": \"1.155\",\r\n    \"sd\": \"6872.841\",\r\n    \"ratio_pct\": \"2.902\"\r\n  },\r\n  \"SLEV\": {\r\n    \"elapsed_ms\": \"420522.5\",\r\n    \"calls\": \"5393\",\r\n    \"min_ms\": \"0.903\",\r\n    \"avg_ms\": \"1.932\",\r\n    \"max_ms\": \"30.993\",\r\n    \"total_ms\": \"10419.8\",\r\n    \"p99_ms\": \"6.303\",\r\n    \"p95_ms\": \"3.094\",\r\n    \"p50_ms\": \"1.706\",\r\n    \"sd\": \"1177.113\",\r\n    \"ratio_pct\": \"2.475\"\r\n  }\r\n}<\/pre>\n<p><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div>\n<p>For a TPROC-H workload, we can query the output of the individual Virtual Users to capture the query times.<\/p>\n<div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#abb8c3;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/p>\n<pre class=\"dm-pre-admin-side\">hammerdb&gt;job 6388A4F05EEC03E233931323 1\r\n[\r\n  \"1\",\r\n  \"Ssl_cipher {}\",\r\n  \"1\",\r\n  \"Executing Query 14 (1 of 22)\",\r\n  \"1\",\r\n  \"query 14 completed in 16.743 seconds\",\r\n  \"1\",\r\n  \"Executing Query 2 (2 of 22)\",\r\n  \"1\",\r\n  \"query 2 completed in 0.719 seconds\",\r\n  \"1\",\r\n  \"Executing Query 9 (3 of 22)\",\r\n  \"1\",\r\n  \"query 9 completed in 5.79 seconds\",\r\n  \"1\",\r\n  \"Executing Query 20 (4 of 22)\",\r\n  \"1\",\r\n  \"query 20 completed in 0.299 seconds\",\r\n  \"1\",\r\n  \"Executing Query 6 (5 of 22)\",\r\n  \"1\",\r\n  \"query 6 completed in 1.932 seconds\",\r\n  \"1\",\r\n  \"Executing Query 17 (6 of 22)\",\r\n  \"1\",\r\n  \"query 17 completed in 0.103 seconds\",\r\n  \"1\",\r\n  \"Executing Query 18 (7 of 22)\",\r\n  \"1\",\r\n  \"query 18 completed in 5.682 seconds\",\r\n  \"1\",\r\n  \"Executing Query 8 (8 of 22)\",\r\n  \"1\",\r\n  \"query 8 completed in 1.99 seconds\",\r\n  \"1\",\r\n  \"Executing Query 21 (9 of 22)\",\r\n  \"1\",\r\n  \"query 21 completed in 9.813 seconds\",\r\n  \"1\",\r\n  \"Executing Query 13 (10 of 22)\",\r\n  \"1\",\r\n  \"query 13 completed in 4.022 seconds\",\r\n  \"1\",\r\n  \"Executing Query 3 (11 of 22)\",\r\n  \"1\",\r\n  \"query 3 completed in 1.451 seconds\",\r\n  \"1\",\r\n  \"Executing Query 22 (12 of 22)\",\r\n  \"1\",\r\n  \"query 22 completed in 0.116 seconds\",\r\n  \"1\",\r\n  \"Executing Query 16 (13 of 22)\",\r\n  \"1\",\r\n  \"query 16 completed in 0.276 seconds\",\r\n  \"1\",\r\n  \"Executing Query 4 (14 of 22)\",\r\n  \"1\",\r\n  \"query 4 completed in 0.631 seconds\",\r\n  \"1\",\r\n  \"Executing Query 11 (15 of 22)\",\r\n  \"1\",\r\n  \"query 11 completed in 0.196 seconds\",\r\n  \"1\",\r\n  \"Executing Query 15 (16 of 22)\",\r\n  \"1\",\r\n  \"query 15 completed in 4.406 seconds\",\r\n  \"1\",\r\n  \"Executing Query 1 (17 of 22)\",\r\n  \"1\",\r\n  \"query 1 completed in 10.899 seconds\",\r\n  \"1\",\r\n  \"Executing Query 10 (18 of 22)\",\r\n  \"1\",\r\n  \"query 10 completed in 4.585 seconds\",\r\n  \"1\",\r\n  \"Executing Query 19 (19 of 22)\",\r\n  \"1\",\r\n  \"query 19 completed in 0.127 seconds\",\r\n  \"1\",\r\n  \"Executing Query 5 (20 of 22)\",\r\n  \"1\",\r\n  \"query 5 completed in 1.258 seconds\",\r\n  \"1\",\r\n  \"Executing Query 7 (21 of 22)\",\r\n  \"1\",\r\n  \"query 7 completed in 0.948 seconds\",\r\n  \"1\",\r\n  \"Executing Query 12 (22 of 22)\",\r\n  \"1\",\r\n  \"query 12 completed in 5.403 seconds\",\r\n  \"1\",\r\n  \"Completed 1 query set(s) in 78 seconds\",\r\n  \"1\",\r\n  \"Geometric mean of query times returning rows (21) is \\\"1.33547\\\"\"\r\n]<\/pre>\n<p><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div>\n<h3>Deleting Jobs<\/h3>\n<p>When the data related to a job is no loger required it can be deleted with the jobs delete command.<\/p>\n<div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#abb8c3;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/p>\n<pre class=\"dm-pre-admin-side\">hammerdb&gt;jobs\r\n[\r\n  \"6388A0385EEC03E263531353\",\r\n  \"6388A1585EEC03E243839333\",\r\n  \"6388A3035EEC03E243830373\",\r\n  \"6388A4F05EEC03E233931323\"\r\n]\r\n\r\n\r\nhammerdb&gt;job 6388A0385EEC03E263531353 delete\r\nDeleted Jobid 6388A0385EEC03E263531353\r\n\r\n\r\nhammerdb&gt;job 6388A3035EEC03E243830373 delete\r\nDeleted Jobid 6388A3035EEC03E243830373\r\n\r\n\r\nhammerdb&gt;jobs\r\n[\r\n  \"6388A1585EEC03E243839333\",\r\n  \"6388A4F05EEC03E233931323\"\r\n]<\/pre>\n<p><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div>\n<h3>Job Web Service<\/h3>\n<p>HammerDB CLI jobs are also compatible with the HammerDB Web Service command allowing the querying of the jobs output over HTTP.\u00a0 It is planned to enhance this webservice to provide an interactive to more easily visualise and analyse job data.<\/p>\n<p><a href=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2022\/12\/mdbtcount.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1289\" src=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2022\/12\/mdbtcount.png\" alt=\"\" width=\"585\" height=\"775\" srcset=\"https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2022\/12\/mdbtcount.png 585w, https:\/\/www.hammerdb.com\/blog\/wp-content\/uploads\/2022\/12\/mdbtcount-226x300.png 226w\" sizes=\"auto, (max-width: 585px) 100vw, 585px\" \/><\/a><\/p>\n<h3>Summary<\/h3>\n<p>The HammerDB jobs interface has been added to provide a central repository stored in a SQLite database where all output and configuration related to a workload is stored for ease of querying at a later point. The jobs interface provides a foundation for future development to provide more comprehensive insight into job related data.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Feedback from the Community raised the Issue Adding the enhancement for storing and retrieval of HammerDB results and configurations #352 that although HammerDB prints result output interactively and to log files, it would be preferred to have these results stored in a format that could be browsed at a later point. In particular, after a &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.hammerdb.com\/blog\/uncategorized\/hammerdb-v4-6-new-features-pt2-jobs-interface\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;HammerDB v4.6 New Features Pt2: Jobs Interface&#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-1275","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\/1275","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=1275"}],"version-history":[{"count":17,"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/posts\/1275\/revisions"}],"predecessor-version":[{"id":1293,"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/posts\/1275\/revisions\/1293"}],"wp:attachment":[{"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/media?parent=1275"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/categories?post=1275"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/tags?post=1275"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.hammerdb.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=1275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}