mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 19:37:16 +02:00
MDEV-24671 fixup: Merge lock_sys_t::wait_pending into wait_count
The maximum number of concurrently waiting transactions is one less than the maximum number of concurrent transactions. A 45-bit cumulative counter of lock waits will support more than one million lock waits per second for a year.
This commit is contained in:
parent
78284a4c11
commit
bda8a2a63a
2 changed files with 19 additions and 9 deletions
|
|
@ -670,10 +670,11 @@ public:
|
||||||
/** mutex covering lock waits; @see trx_lock_t::wait_lock */
|
/** mutex covering lock waits; @see trx_lock_t::wait_lock */
|
||||||
MY_ALIGNED(CPU_LEVEL1_DCACHE_LINESIZE) mysql_mutex_t wait_mutex;
|
MY_ALIGNED(CPU_LEVEL1_DCACHE_LINESIZE) mysql_mutex_t wait_mutex;
|
||||||
private:
|
private:
|
||||||
/** Cumulative number of lock waits; protected by wait_mutex */
|
/** The increment of wait_count for a wait. Anything smaller is a
|
||||||
ulint wait_count;
|
pending wait count. */
|
||||||
/** Pending number of lock waits; protected by wait_mutex */
|
static constexpr uint64_t WAIT_COUNT_STEP= 1U << 19;
|
||||||
uint32_t wait_pending;
|
/** waits and total number of lock waits; protected by wait_mutex */
|
||||||
|
uint64_t wait_count;
|
||||||
/** Cumulative wait time; protected by wait_mutex */
|
/** Cumulative wait time; protected by wait_mutex */
|
||||||
uint32_t wait_time;
|
uint32_t wait_time;
|
||||||
/** Longest wait time; protected by wait_mutex */
|
/** Longest wait time; protected by wait_mutex */
|
||||||
|
|
@ -818,9 +819,13 @@ public:
|
||||||
inline void wait_resume(THD *thd, my_hrtime_t start, my_hrtime_t now);
|
inline void wait_resume(THD *thd, my_hrtime_t start, my_hrtime_t now);
|
||||||
|
|
||||||
/** @return pending number of lock waits */
|
/** @return pending number of lock waits */
|
||||||
ulint get_wait_pending() const { return wait_pending; }
|
ulint get_wait_pending() const
|
||||||
|
{
|
||||||
|
return static_cast<ulint>(wait_count & (WAIT_COUNT_STEP - 1));
|
||||||
|
}
|
||||||
/** @return cumulative number of lock waits */
|
/** @return cumulative number of lock waits */
|
||||||
ulint get_wait_cumulative() const { return wait_count; }
|
ulint get_wait_cumulative() const
|
||||||
|
{ return static_cast<ulint>(wait_count / WAIT_COUNT_STEP); }
|
||||||
/** Cumulative wait time; protected by wait_mutex */
|
/** Cumulative wait time; protected by wait_mutex */
|
||||||
ulint get_wait_time_cumulative() const { return wait_time; }
|
ulint get_wait_time_cumulative() const { return wait_time; }
|
||||||
/** Longest wait time; protected by wait_mutex */
|
/** Longest wait time; protected by wait_mutex */
|
||||||
|
|
|
||||||
|
|
@ -1587,8 +1587,11 @@ lock_rec_has_to_wait_in_queue(const hash_cell_t &cell, const lock_t *wait_lock)
|
||||||
inline void lock_sys_t::wait_start()
|
inline void lock_sys_t::wait_start()
|
||||||
{
|
{
|
||||||
mysql_mutex_assert_owner(&wait_mutex);
|
mysql_mutex_assert_owner(&wait_mutex);
|
||||||
wait_pending++;
|
wait_count+= WAIT_COUNT_STEP + 1;
|
||||||
wait_count++;
|
/* The maximum number of concurrently waiting transactions is one less
|
||||||
|
than the maximum number of concurrent transactions. */
|
||||||
|
static_assert(WAIT_COUNT_STEP == UNIV_PAGE_SIZE_MAX / 16 * TRX_SYS_N_RSEGS,
|
||||||
|
"compatibility");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Note that a record lock wait resumed */
|
/** Note that a record lock wait resumed */
|
||||||
|
|
@ -1596,7 +1599,9 @@ inline
|
||||||
void lock_sys_t::wait_resume(THD *thd, my_hrtime_t start, my_hrtime_t now)
|
void lock_sys_t::wait_resume(THD *thd, my_hrtime_t start, my_hrtime_t now)
|
||||||
{
|
{
|
||||||
mysql_mutex_assert_owner(&wait_mutex);
|
mysql_mutex_assert_owner(&wait_mutex);
|
||||||
wait_pending--;
|
ut_ad(get_wait_pending());
|
||||||
|
ut_ad(get_wait_cumulative());
|
||||||
|
wait_count--;
|
||||||
if (now.val >= start.val)
|
if (now.val >= start.val)
|
||||||
{
|
{
|
||||||
const uint32_t diff_time=
|
const uint32_t diff_time=
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue