summaryrefslogtreecommitdiffstats
path: root/storage/innobase/include/mariadb_stats.h
diff options
context:
space:
mode:
Diffstat (limited to 'storage/innobase/include/mariadb_stats.h')
-rw-r--r--storage/innobase/include/mariadb_stats.h119
1 files changed, 119 insertions, 0 deletions
diff --git a/storage/innobase/include/mariadb_stats.h b/storage/innobase/include/mariadb_stats.h
new file mode 100644
index 00000000..e9051c0c
--- /dev/null
+++ b/storage/innobase/include/mariadb_stats.h
@@ -0,0 +1,119 @@
+/*****************************************************************************
+
+Copyright (c) 2023, MariaDB Foundation
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation; version 2 of the License.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
+
+*****************************************************************************/
+
+#ifndef mariadb_stats_h
+#define mariadb_stats_h
+
+/* Include file to handle mariadbd handler specific stats */
+
+#include "ha_handler_stats.h"
+#include "my_rdtsc.h"
+
+/* Not active threads are ponting to this structure */
+extern thread_local ha_handler_stats mariadb_dummy_stats;
+
+/* Points to either THD->handler_stats or mariad_dummy_stats */
+extern thread_local ha_handler_stats *mariadb_stats;
+
+/*
+ Returns 1 if MariaDB wants engine status
+*/
+
+inline bool mariadb_stats_active()
+{
+ return mariadb_stats->active != 0;
+}
+
+inline bool mariadb_stats_active(ha_handler_stats *stats)
+{
+ return stats->active != 0;
+}
+
+/* The following functions increment different engine status */
+
+inline void mariadb_increment_pages_accessed()
+{
+ mariadb_stats->pages_accessed++;
+}
+
+inline void mariadb_increment_pages_updated(ulonglong count)
+{
+ mariadb_stats->pages_updated+= count;
+}
+
+inline void mariadb_increment_pages_read()
+{
+ mariadb_stats->pages_read_count++;
+}
+
+inline void mariadb_increment_undo_records_read()
+{
+ mariadb_stats->undo_records_read++;
+}
+
+/*
+ The following has to be identical code as measure() in sql_analyze_stmt.h
+
+ One should only call this if mariadb_stats_active() is true.
+*/
+
+inline ulonglong mariadb_measure()
+{
+#if (MY_TIMER_ROUTINE_CYCLES)
+ return my_timer_cycles();
+#else
+ return my_timer_microseconds();
+#endif
+}
+
+/*
+ Call this only of start_time != 0
+ See buf0rea.cc for an example of how to use it efficiently
+*/
+
+inline void mariadb_increment_pages_read_time(ulonglong start_time)
+{
+ ha_handler_stats *stats= mariadb_stats;
+ ulonglong end_time= mariadb_measure();
+ /* Check that we only call this if active, see example! */
+ DBUG_ASSERT(start_time);
+ DBUG_ASSERT(mariadb_stats_active(stats));
+
+ stats->pages_read_time+= (end_time - start_time);
+}
+
+
+/*
+ Helper class to set mariadb_stats temporarly for one call in handler.cc
+*/
+
+class mariadb_set_stats
+{
+public:
+ uint flag;
+ mariadb_set_stats(ha_handler_stats *stats)
+ {
+ mariadb_stats= stats ? stats : &mariadb_dummy_stats;
+ }
+ ~mariadb_set_stats()
+ {
+ mariadb_stats= &mariadb_dummy_stats;
+ }
+};
+
+#endif /* mariadb_stats_h */