aboutsummaryrefslogtreecommitdiff
path: root/src/backend/tcop/postgres.c
diff options
context:
space:
mode:
authorDavid Rowley <drowley@postgresql.org>2023-02-20 16:18:27 +1300
committerDavid Rowley <drowley@postgresql.org>2023-02-20 16:18:27 +1300
commit2cb82e2acfba069d00c6bd253d58df03d315672a (patch)
tree12d9873bb0cca1dd03a4e638f0318eb3c8287b45 /src/backend/tcop/postgres.c
parentde2aca288569fd0cabb425c0858e92e2c8c938cb (diff)
downloadpostgresql-2cb82e2acfba069d00c6bd253d58df03d315672a.tar.gz
postgresql-2cb82e2acfba069d00c6bd253d58df03d315672a.zip
Speedup and increase usability of set proc title functions
The setting of the process title could be seen on profiles of very fast-to-execute queries. In many locations where we call set_ps_display() we pass along a string constant, the length of which is known during compilation. Here we effectively rename set_ps_display() to set_ps_display_with_len() and then add a static inline function named set_ps_display() which calls strlen() on the given string. This allows the compiler to optimize away the strlen() call when dealing with call sites passing a string constant. We can then also use memcpy() instead of strlcpy() to copy the string into the destination buffer. That's significantly faster than strlcpy's byte-at-a-time way of copying. Here we also take measures to improve some code which was adjusting the process title to add a " waiting" suffix to it. Call sites which require this can now just call set_ps_display_suffix() to add or adjust the suffix and call set_ps_display_remove_suffix() to remove it again. Reviewed-by: Andres Freund Discussion: https://postgr.es/m/CAApHDvocBvvk-0gWNA2Gohe+sv9fMcv+fK_G+siBKJrgDG4O7g@mail.gmail.com
Diffstat (limited to 'src/backend/tcop/postgres.c')
-rw-r--r--src/backend/tcop/postgres.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index 5d439f27100..cab709b07b1 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -1071,6 +1071,8 @@ exec_simple_query(const char *query_string)
Portal portal;
DestReceiver *receiver;
int16 format;
+ const char *cmdtagname;
+ size_t cmdtaglen;
pgstat_report_query_id(0, true);
@@ -1081,8 +1083,9 @@ exec_simple_query(const char *query_string)
* destination.
*/
commandTag = CreateCommandTag(parsetree->stmt);
+ cmdtagname = GetCommandTagNameAndLen(commandTag, &cmdtaglen);
- set_ps_display(GetCommandTagName(commandTag));
+ set_ps_display_with_len(cmdtagname, cmdtaglen);
BeginCommand(commandTag, dest);
@@ -2064,6 +2067,8 @@ exec_execute_message(const char *portal_name, long max_rows)
char msec_str[32];
ParamsErrorCbData params_data;
ErrorContextCallback params_errcxt;
+ const char *cmdtagname;
+ size_t cmdtaglen;
/* Adjust destination to tell printtup.c what to do */
dest = whereToSendOutput;
@@ -2110,7 +2115,9 @@ exec_execute_message(const char *portal_name, long max_rows)
pgstat_report_activity(STATE_RUNNING, sourceText);
- set_ps_display(GetCommandTagName(portal->commandTag));
+ cmdtagname = GetCommandTagNameAndLen(portal->commandTag, &cmdtaglen);
+
+ set_ps_display_with_len(cmdtagname, cmdtaglen);
if (save_log_statement_stats)
ResetUsage();