47using Alter_stages = std::vector<Alter_stage *, ut::allocator<Alter_stage *>>;
49#ifdef HAVE_PSI_STAGE_INTERFACE
111 void inc(uint64_t inc_val);
122 bool is_last_report =
false);
170 using Counter = std::pair<uint64_t, uint64_t>;
171 using Progress = std::pair<PSI_stage_progress *, Counter>;
172 using Stage = std::pair<const PSI_stage_info *, Progress>;
173 using Stages = std::vector<Stage, ut::allocator<Stage>>;
250 : m_pk(rhs.m_pk), m_recs_req_for_prog(1), m_cur_phase(NOT_STARTED) {}
253 auto progress =
m_stage.second.first;
255 if (progress ==
nullptr) {
289 auto progress =
m_stages.back().second.first;
296 bool is_last_report) {
321 if (stage.second.first !=
nullptr) {
324 auto progress = stage.second.first;
343 static_cast<double>(
m_n_pk_recs.load(std::memory_order_relaxed)) /
350 if (sort_multi_factor <= 1.0) {
402 auto progress =
m_stages.back().second.first;
435 auto progress =
m_stages.back().second.first;
465 auto progress =
m_stages.back().second.first;
472 if (stage.second.first !=
nullptr) {
486 if (alter_stages.empty()) {
490 ut_a(m_cur_phase == NOT_STARTED);
494 for (
auto alter_stage : alter_stages) {
495 alter_stage->begin_phase_end();
497 for (
auto stage : alter_stage->m_stages) {
503 if (progress ==
nullptr) {
513 const auto &
counter = stage.second.second;
522 if ((
int)m_cur_phase < (
int)READ_PK) {
523 m_cur_phase = READ_PK;
524 cur_stage.first = stage.first;
525 cur_stage.second.first = progress;
528 if ((
int)m_cur_phase < (
int)NOT_STARTED) {
530 cur_stage.first = stage.first;
531 cur_stage.second.first = progress;
534 if ((
int)m_cur_phase < (
int)SORT) {
535 m_cur_phase = INSERT;
536 cur_stage.first = stage.first;
537 cur_stage.second.first = progress;
540 if ((
int)m_cur_phase < (
int)LOG_INDEX) {
541 m_cur_phase = LOG_INDEX;
542 cur_stage.first = stage.first;
543 cur_stage.second.first = progress;
552 if (cur_stage.first !=
nullptr) {
553 ut_a(cur_stage.second.first !=
nullptr);
554 m_stages.push_back(cur_stage);
701 void inc(uint64_t inc_val = 1) {}
706 bool is_last_report =
false) {}
uint32_t page_no_t
Page number.
Definition: api0api.h:50
class to monitor the progress of 'ALTER TABLESPACE ENCRYPTION' in terms of number of pages operated u...
Definition: ut0stage.h:560
void set_estimate(uint64_t units)
Set estimate.
Definition: ut0stage.h:594
@ INITIATED
Initialised.
Definition: ut0stage.h:672
@ WORK_ESTIMATED
Work estimated phase.
Definition: ut0stage.h:675
@ WORK_COMPLETED
Work completed phase.
Definition: ut0stage.h:678
@ NOT_STARTED
Not open phase.
Definition: ut0stage.h:669
page_no_t m_work_done
Number of pages already (un)encrypted .
Definition: ut0stage.h:664
enum Alter_stage_ts::@196 m_cur_phase
Current phase.
void change_phase()
Change phase.
Definition: ut0stage.h:626
void update_work(uint64_t units)
Update the progress.
Definition: ut0stage.h:608
Alter_stage_ts()
Constructor.
Definition: ut0stage.h:563
void init(int key)
Initialize.
Definition: ut0stage.h:579
PSI_stage_progress * m_progress
Performance schema accounting object.
Definition: ut0stage.h:658
page_no_t m_work_estimated
Number of pages to be (un)encrypted .
Definition: ut0stage.h:661
~Alter_stage_ts()
Destructor.
Definition: ut0stage.h:570
bool is_completed()
Definition: ut0stage.h:648
Class used to report ALTER TABLE progress via performance_schema.
Definition: ut0stage.h:81
void change_phase(const PSI_stage_info *new_stage)
Change the current phase.
Definition: ut0stage.h:442
@ FLUSH
Flush non-redo logged pages phase.
Definition: ut0stage.h:236
@ END
End/Stop.
Definition: ut0stage.h:245
@ READ_PK
Scan phase.
Definition: ut0stage.h:227
@ LOG_TABLE
Apply entries from the row log to the table after the build.
Definition: ut0stage.h:242
@ SORT
Sort phase.
Definition: ut0stage.h:230
@ INSERT
Bulk load/insert phase.
Definition: ut0stage.h:233
@ LOG_INDEX
Apply entries from the row log to the index after creation.
Definition: ut0stage.h:239
IB_mutex m_mutex
Mutex required to update values for m_n_pk_pages and m_n_flush_pages.
Definition: ut0stage.h:186
page_no_t m_n_flush_pages
Number of pages to flush.
Definition: ut0stage.h:219
void begin_phase_end()
Flag the beginning of the end phase.
Definition: ut0stage.h:383
void n_pk_recs_inc(uint64_t n=1)
Increment the number of records in PK (table) with 1.
Definition: ut0stage.h:266
void begin_phase_sort(double sort_multi_factor)
Flag the beginning of the sort phase.
Definition: ut0stage.h:349
bool should_inc_progress(uint64_t inc_val) const
Check whether we have seen enough records to increment the progress.
Definition: ut0stage.h:387
void begin_phase_read_pk(size_t n_sort_indexes)
Flag an ALTER TABLE start (read primary key phase).
Definition: ut0stage.h:311
std::pair< PSI_stage_progress *, Counter > Progress
Definition: ut0stage.h:171
size_t m_n_sort_indexes
Number of indexes that are being added.
Definition: ut0stage.h:211
double m_n_recs_per_page
Estimated number of records per page in the primary key.
Definition: ut0stage.h:200
void begin_phase_flush(page_no_t n_flush_pages)
Flag the beginning of the flush phase.
Definition: ut0stage.h:365
void aggregate(const Alter_stages &alter_stages) noexcept
Aggregate the results of the build from the sub builds.
Definition: ut0stage.h:485
Stages m_stages
Collection of all [previous + current] stages.
Definition: ut0stage.h:180
void reestimate()
Update the estimate of total work to be done.
Definition: ut0stage.h:393
uint64_t m_sort_multi_factor
During the sort phase, increment the counter once per this many pages processed.
Definition: ut0stage.h:216
const dict_index_t * m_pk
Old table PK.
Definition: ut0stage.h:189
void end_phase_read_pk()
Flag the end of reading of the primary key.
Definition: ut0stage.h:331
void begin_phase_log_table()
Flag the beginning of the log table phase.
Definition: ut0stage.h:379
page_no_t m_n_pk_pages
Number of leaf pages in the primary key.
Definition: ut0stage.h:196
Stage m_stage
Progress counters for the various stages.
Definition: ut0stage.h:176
void begin_phase_insert()
Flag the beginning of the insert phase.
Definition: ut0stage.h:360
void inc_progress_if_needed(uint64_t &unreported_recs, bool is_last_report=false)
Increment the progress if we have crossed the threshold for unreported records, or if it is the last ...
Definition: ut0stage.h:295
std::atomic< uint64_t > m_n_pk_recs
Number of records in the primary key (table), including delete marked records.
Definition: ut0stage.h:193
void begin_phase_log_index()
Flag the beginning of the log index phase.
Definition: ut0stage.h:375
Alter_stage(const dict_index_t *pk) noexcept
Constructor.
Definition: ut0stage.h:85
std::vector< Stage, ut::allocator< Stage > > Stages
Definition: ut0stage.h:173
void inc(uint64_t inc_val)
Flag either one record or one page processed, depending on the current phase.
Definition: ut0stage.h:270
enum Alter_stage::@195 NOT_STARTED
Current phase.
std::pair< const PSI_stage_info *, Progress > Stage
Definition: ut0stage.h:172
uint64_t m_recs_req_for_prog
Number of records for which we increment the progress.
Definition: ut0stage.h:207
~Alter_stage()
Destructor.
Definition: ut0stage.h:252
Definition: ut0mutex.h:252
Data dictionary memory object creation.
Fido Client Authentication nullptr
Definition: fido_client_plugin.cc:222
#define mysql_set_stage(K)
Set the current stage.
Definition: mysql_stage.h:80
#define mysql_stage_inc_work_completed(P1, P2)
Definition: mysql_stage.h:131
#define mysql_end_stage
End the last stage.
Definition: mysql_stage.h:86
#define mysql_stage_get_work_completed(P1)
Definition: mysql_stage.h:118
#define mysql_stage_set_work_completed(P1, P2)
Definition: mysql_stage.h:115
#define mysql_stage_get_work_estimated(P1)
Definition: mysql_stage.h:143
#define mysql_stage_set_work_estimated(P1, P2)
Definition: mysql_stage.h:140
Instrumentation helpers for stages.
uint counter
Definition: mysqlimport.cc:54
Sharded atomic counter.
Definition: ut0counter.h:221
collation_unordered_map< std::string, Unit > units()
A function to obtaint the supported units for the gis module.
Definition: st_units_of_measure.cc:29
required string key
Definition: replication_asynchronous_connection_failover.proto:60
Modification log for online index creation and online table rebuild.
ulint row_log_estimate_work(const dict_index_t *index)
Estimate how much work is to be done by the log apply phase of an ALTER TABLE for this index.
Definition: row0log.cc:2700
PSI_stage_info srv_stage_alter_table_log_table
Performance schema stage event for monitoring ALTER TABLE progress row_log_table_apply().
Definition: srv0srv.cc:826
PSI_stage_info srv_stage_alter_table_flush
Performance schema stage event for monitoring ALTER TABLE progress log_make_latest_checkpoint().
Definition: srv0srv.cc:811
PSI_stage_info srv_stage_alter_table_end
Performance schema stage event for monitoring ALTER TABLE progress everything after flush log_make_la...
Definition: srv0srv.cc:806
PSI_stage_info srv_stage_alter_table_read_pk_internal_sort
Performance schema stage event for monitoring ALTER TABLE progress row_merge_read_clustered_index().
Definition: srv0srv.cc:835
PSI_stage_info srv_stage_alter_table_insert
Performance schema stage event for monitoring ALTER TABLE progress row_merge_insert_index_tuples().
Definition: srv0srv.cc:815
PSI_stage_info srv_stage_alter_table_merge_sort
Performance schema stage event for monitoring ALTER TABLE progress row_merge_sort().
Definition: srv0srv.cc:831
PSI_stage_info srv_stage_alter_table_log_index
Performance schema stage event for monitoring ALTER TABLE progress row_log_apply().
Definition: srv0srv.cc:820
Definition: ut0mutex.h:128
Stage instrument information.
Definition: psi_stage_bits.h:74
PSI_stage_key m_key
The registered stage key.
Definition: psi_stage_bits.h:76
Interface for an instrumented stage progress.
Definition: psi_stage_bits.h:63
Data structure for an index.
Definition: dict0mem.h:1046
ulint stat_n_leaf_pages
approximate number of leaf pages in the index tree
Definition: dict0mem.h:1211
@ LATCH_ID_ALTER_STAGE
Definition: sync0types.h:347
unsigned int uint
Definition: uca9-dump.cc:75
#define UT_LOCATION_HERE
Definition: ut0core.h:47
#define ut_error
Abort execution.
Definition: ut0dbg.h:65
#define ut_ad(EXPR)
Debug assertion.
Definition: ut0dbg.h:69
#define ut_a(EXPR)
Abort execution if EXPR does not evaluate to nonzero.
Definition: ut0dbg.h:57
std::vector< Alter_stage *, ut::allocator< Alter_stage * > > Alter_stages
Definition: ut0stage.h:47
int n
Definition: xcom_base.cc:509