mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Merge 10.6 into 10.9
This commit is contained in:
@@ -35,9 +35,20 @@ log, should the query be slow.
|
||||
2. Timing data. Measuring the time it took to run parts of query has noticeable
|
||||
overhead. Because of that, we measure the time only when running "ANALYZE
|
||||
$stmt").
|
||||
|
||||
*/
|
||||
|
||||
/* fake microseconds as cycles if cycles isn't available */
|
||||
|
||||
static inline double timer_tracker_frequency()
|
||||
{
|
||||
#if (MY_TIMER_ROUTINE_CYCLES)
|
||||
return static_cast<double>(sys_timer_info.cycles.frequency);
|
||||
#else
|
||||
return static_cast<double>(sys_timer_info.microseconds.frequency);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
class Gap_time_tracker;
|
||||
void attach_gap_time_tracker(THD *thd, Gap_time_tracker *gap_tracker, ulonglong timeval);
|
||||
void process_gap_time_tracker(THD *thd, ulonglong timeval);
|
||||
@@ -52,12 +63,19 @@ protected:
|
||||
ulonglong cycles;
|
||||
ulonglong last_start;
|
||||
|
||||
ulonglong measure() const
|
||||
{
|
||||
#if (MY_TIMER_ROUTINE_CYCLES)
|
||||
return my_timer_cycles();
|
||||
#else
|
||||
return my_timer_microseconds();
|
||||
#endif
|
||||
}
|
||||
|
||||
void cycles_stop_tracking(THD *thd)
|
||||
{
|
||||
ulonglong end= my_timer_cycles();
|
||||
ulonglong end= measure();
|
||||
cycles += end - last_start;
|
||||
if (unlikely(end < last_start))
|
||||
cycles += ULONGLONG_MAX;
|
||||
|
||||
process_gap_time_tracker(thd, end);
|
||||
if (my_gap_tracker)
|
||||
@@ -80,7 +98,7 @@ public:
|
||||
// interface for collecting time
|
||||
void start_tracking(THD *thd)
|
||||
{
|
||||
last_start= my_timer_cycles();
|
||||
last_start= measure();
|
||||
process_gap_time_tracker(thd, last_start);
|
||||
}
|
||||
|
||||
@@ -92,11 +110,21 @@ public:
|
||||
|
||||
// interface for getting the time
|
||||
ulonglong get_loops() const { return count; }
|
||||
double get_time_ms() const
|
||||
|
||||
inline double cycles_to_ms(ulonglong cycles_arg) const
|
||||
{
|
||||
// convert 'cycles' to milliseconds.
|
||||
return 1000.0 * static_cast<double>(cycles) /
|
||||
static_cast<double>(sys_timer_info.cycles.frequency);
|
||||
return 1000.0 * static_cast<double>(cycles_arg) /
|
||||
timer_tracker_frequency();
|
||||
}
|
||||
|
||||
double get_time_ms() const
|
||||
{
|
||||
return cycles_to_ms(cycles);
|
||||
}
|
||||
ulonglong get_cycles() const
|
||||
{
|
||||
return cycles;
|
||||
}
|
||||
|
||||
bool has_timed_statistics() const { return cycles > 0; }
|
||||
@@ -122,13 +150,11 @@ public:
|
||||
double get_time_ms() const
|
||||
{
|
||||
// convert 'cycles' to milliseconds.
|
||||
return 1000.0 * static_cast<double>(cycles) /
|
||||
static_cast<double>(sys_timer_info.cycles.frequency);
|
||||
return 1000.0 * static_cast<double>(cycles) / timer_tracker_frequency();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*
|
||||
A class for counting certain actions (in all queries), and optionally
|
||||
collecting the timings (in ANALYZE queries).
|
||||
|
Reference in New Issue
Block a user