Обсуждение: PostgreSQL ODBC mylog() uses lots of CPU in INTEGER field SQL query

Поиск
Список
Период
Сортировка

PostgreSQL ODBC mylog() uses lots of CPU in INTEGER field SQL query

От
Marko Ristola
Дата:

I did a query of 4 million rows into an INTEGER field.

Linux perf shows following profile (hottest functions):

   9.91%  bc_sqlselect  psqlodbcw.so               [.] mylog 
   9.64%  bc_sqlselect  psqlodbcw.so               [.] QR_read_a_tuple_from_db
   4.83%  bc_sqlselect  psqlodbcw.so               [.] copy_and_convert_field
   4.57%  bc_sqlselect  libpthread-2.17.so         [.] pthread_mutex_unlock
   4.51%  bc_sqlselect  libpthread-2.17.so         [.] pthread_mutex_lock
   4.40%  bc_sqlselect  psqlodbcw.so               [.] SOCK_get_next_n_bytes.part.2
   3.93%  bc_sqlselect  psqlodbcw.so               [.] PGAPI_ExtendedFetch

Following patch removes the only mylog() call (not a macro)

from the PostgreSQL ODBC driver from consuming CPU:

(MYLOG() macro is used to avoid the heavy mylog() call.)


diff --git a/results.c b/results.c
index 1f6a12c..ec89600 100644
--- a/results.c
+++ b/results.c
@@ -4632,7 +4632,6 @@ SC_pos_add(StatementClass *stmt,
                        goto cleanup;
                }
                MYLOG(0, "addstr=%s\n", addstr.data);
-               mylog("addstr=%s\n", addstr.data);
                s.qstmt->exec_start_row = s.qstmt->exec_end_row = s.irow;
                s.updyes = TRUE;
                ret = PGAPI_ExecDirect(hstmt, (SQLCHAR *) addstr.data, SQL_NTS, 0);


Best Regards, Marko Ristola

--

Marko Ristola
Software developer
BC Platforms

m. +358 40 593 2182
e. marko.ristola@bcplatforms.com
w. www.bcplatforms.com

Re: PostgreSQL ODBC mylog() uses lots of CPU in INTEGER field SQL query

От
"Inoue,Hiroshi"
Дата:
Hi Marko,

I would take care of your patch.

Thanks.
Hiroshi Inoue

2021年5月8日(土) 4:31 Marko Ristola <marko.ristola@bcplatforms.com>:

I did a query of 4 million rows into an INTEGER field.

Linux perf shows following profile (hottest functions):

   9.91%  bc_sqlselect  psqlodbcw.so               [.] mylog 
   9.64%  bc_sqlselect  psqlodbcw.so               [.] QR_read_a_tuple_from_db
   4.83%  bc_sqlselect  psqlodbcw.so               [.] copy_and_convert_field
   4.57%  bc_sqlselect  libpthread-2.17.so         [.] pthread_mutex_unlock
   4.51%  bc_sqlselect  libpthread-2.17.so         [.] pthread_mutex_lock
   4.40%  bc_sqlselect  psqlodbcw.so               [.] SOCK_get_next_n_bytes.part.2
   3.93%  bc_sqlselect  psqlodbcw.so               [.] PGAPI_ExtendedFetch

Following patch removes the only mylog() call (not a macro)

from the PostgreSQL ODBC driver from consuming CPU:

(MYLOG() macro is used to avoid the heavy mylog() call.)


diff --git a/results.c b/results.c
index 1f6a12c..ec89600 100644
--- a/results.c
+++ b/results.c
@@ -4632,7 +4632,6 @@ SC_pos_add(StatementClass *stmt,
                        goto cleanup;
                }
                MYLOG(0, "addstr=%s\n", addstr.data);
-               mylog("addstr=%s\n", addstr.data);
                s.qstmt->exec_start_row = s.qstmt->exec_end_row = s.irow;
                s.updyes = TRUE;
                ret = PGAPI_ExecDirect(hstmt, (SQLCHAR *) addstr.data, SQL_NTS, 0);


Best Regards, Marko Ristola

--

Marko Ristola
Software developer
BC Platforms

m. +358 40 593 2182
e. marko.ristola@bcplatforms.com
w. www.bcplatforms.com