23#ifndef PFS_BUFFER_CONTAINER_H
24#define PFS_BUFFER_CONTAINER_H
50class PFS_opaque_container_page;
51class PFS_opaque_container;
61template <
class T,
class U,
class V>
64template <
class T,
int PFS_PAGE_SIZE,
int PFS_PAGE_COUNT,
class U,
class V>
73template <
class T,
class U,
class V>
76template <
class T,
int PFS_PAGE_SIZE,
int PFS_PAGE_COUNT,
class U,
class V>
79template <
class B,
int COUNT>
82template <
class B,
int COUNT>
101 monotonic_max = monotonic +
m_max;
103 if (
unlikely(monotonic >= monotonic_max)) {
111 monotonic_max =
m_max;
114 while (monotonic < monotonic_max) {
115 index = monotonic %
m_max;
118 if (
pfs->m_lock.free_to_dirty(dirty_state)) {
129 pfs->m_lock.allocated_to_free();
154 array->
m_ptr =
nullptr;
158 if (array->
m_max > 0) {
161 if (array->
m_ptr ==
nullptr) {
170 assert(array->
m_max > 0);
173 array->
m_ptr =
nullptr;
180template <
class T,
class U = PFS_buffer_default_array<T>,
181 class V = PFS_buffer_default_allocator<T>>
198 m_array.m_monotonic.m_size_t = 0;
242 assert(index <=
m_max);
250 while (
pfs < pfs_last) {
251 if (
pfs->m_lock.is_populated()) {
262 while (
pfs < pfs_last) {
272 while (
pfs < pfs_last) {
273 if (
pfs->m_lock.is_populated()) {
284 while (
pfs < pfs_last) {
291 assert(index <
m_max);
294 if (
pfs->m_lock.is_populated()) {
302 if (index >=
m_max) {
316 if ((
pfs <= unsafe) && (unsafe < pfs_last)) {
330 assert(index <=
m_max);
336 while (
pfs < pfs_last) {
337 if (
pfs->m_lock.is_populated()) {
338 uint found =
pfs - pfs_first;
339 *found_index = found;
355template <
class T,
int PFS_PAGE_SIZE,
int PFS_PAGE_COUNT,
386 static const size_t MAX_SIZE = PFS_PAGE_SIZE * PFS_PAGE_COUNT;
398 m_max = PFS_PAGE_COUNT * PFS_PAGE_SIZE;
405 for (i = 0; i < PFS_PAGE_COUNT; i++) {
412 }
else if (max_size > 0) {
413 if (max_size % PFS_PAGE_SIZE == 0) {
449 for (i = 0; i < PFS_PAGE_COUNT; i++) {
451 if (
page !=
nullptr) {
466 size_t result = page_count * PFS_PAGE_SIZE;
487 size_t monotonic_max;
488 size_t current_page_count;
497 if (current_page_count != 0) {
499 monotonic_max = monotonic + current_page_count;
501 if (
unlikely(monotonic >= monotonic_max)) {
509 monotonic_max = current_page_count;
512 while (monotonic < monotonic_max) {
517 index = monotonic % current_page_count;
522 if (array !=
nullptr) {
523 pfs = array->allocate(dirty_state);
524 if (
pfs !=
nullptr) {
526 pfs->m_page =
reinterpret_cast<PFS_opaque_container_page *
>(array);
558 array =
m_pages[current_page_count].load();
560 if (array ==
nullptr) {
594 array =
m_pages[current_page_count].load();
596 if (array ==
nullptr) {
613 array->m_container =
reinterpret_cast<PFS_opaque_container *
>(
this);
616 m_pages[current_page_count].store(array);
629 assert(array !=
nullptr);
630 pfs = array->allocate(dirty_state);
631 if (
pfs !=
nullptr) {
633 pfs->m_page =
reinterpret_cast<PFS_opaque_container_page *
>(array);
637 current_page_count++;
647 PFS_opaque_container_page *opaque_page = safe_pfs->m_page;
651 safe_pfs->m_lock.allocated_to_free();
654 page->m_full =
false;
662 PFS_opaque_container_page *opaque_page = safe_pfs->m_page;
666 safe_pfs->m_lock.allocated_to_free();
669 page->m_full =
false;
672 PFS_opaque_container *opaque_container =
page->m_container;
686 assert(index <=
m_max);
697 for (i = 0; i < PFS_PAGE_COUNT; i++) {
699 if (
page !=
nullptr) {
701 pfs_last =
page->get_last();
703 while (
pfs < pfs_last) {
704 if (
pfs->m_lock.is_populated()) {
719 for (i = 0; i < PFS_PAGE_COUNT; i++) {
721 if (
page !=
nullptr) {
723 pfs_last =
page->get_last();
725 while (
pfs < pfs_last) {
739 for (i = 0; i < PFS_PAGE_COUNT; i++) {
741 if (
page !=
nullptr) {
743 pfs_last =
page->get_last();
745 while (
pfs < pfs_last) {
746 if (
pfs->m_lock.is_populated()) {
761 for (i = 0; i < PFS_PAGE_COUNT; i++) {
765 pfs_last =
page->get_last();
767 while (
pfs < pfs_last) {
776 assert(index <
m_max);
778 uint index_1 = index / PFS_PAGE_SIZE;
780 if (
page !=
nullptr) {
781 uint index_2 = index % PFS_PAGE_SIZE;
783 if (index_2 >=
page->m_max) {
789 if (
pfs->m_lock.is_populated()) {
798 if (index >=
m_max) {
803 uint index_1 = index / PFS_PAGE_SIZE;
806 if (
page ==
nullptr) {
811 uint index_2 = index % PFS_PAGE_SIZE;
813 if (index_2 >=
page->m_max) {
821 if (
pfs->m_lock.is_populated()) {
835 for (i = 0; i < PFS_PAGE_COUNT; i++) {
837 if (
page !=
nullptr) {
839 pfs_last =
page->get_last();
841 if ((
pfs <= unsafe) && (unsafe < pfs_last)) {
858 return PFS_PAGE_SIZE;
865 assert(index <=
m_max);
867 uint index_1 = index / PFS_PAGE_SIZE;
868 uint index_2 = index % PFS_PAGE_SIZE;
874 while (index_1 < PFS_PAGE_COUNT) {
877 if (
page ==
nullptr) {
878 index =
static_cast<uint
>(
m_max);
882 pfs_first =
page->get_first();
883 pfs = pfs_first + index_2;
884 pfs_last =
page->get_last();
886 while (
pfs < pfs_last) {
887 if (
pfs->m_lock.is_populated()) {
889 index_1 * PFS_PAGE_SIZE +
static_cast<uint
>(
pfs - pfs_first);
890 *found_index = found;
901 index =
static_cast<uint
>(
m_max);
912 std::atomic<array_type *>
m_pages[PFS_PAGE_COUNT];
917template <
class T,
class U,
class V>
942template <
class T,
int page_size,
int page_count,
class U,
class V>
975template <
class B,
int PFS_PARTITION_COUNT>
990 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
996 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1004 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1011 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1019 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1031 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1041 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1049 assert(partition < PFS_PARTITION_COUNT);
1063 B::static_deallocate(safe_pfs);
1069 uint partition_index;
1071 unpack_index(user_index, &partition_index, &sub_index);
1076 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1082 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1088 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1094 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1100 uint partition_index;
1102 unpack_index(user_index, &partition_index, &sub_index);
1104 if (partition_index >= PFS_PARTITION_COUNT) {
1112 uint partition_index;
1114 unpack_index(user_index, &partition_index, &sub_index);
1116 if (partition_index >= PFS_PARTITION_COUNT) {
1128 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1130 if (safe !=
nullptr) {
1141 static_assert(PFS_PARTITION_COUNT <= (1 << 8),
"2^8 = 256 partitions max.");
1143 "2^24 = 16777216 max per partitioned buffer.");
1145 *user_index = (partition_index << 24) + sub_index;
1150 *partition_index = user_index >> 24;
1151 *sub_index = user_index & 0x00FFFFFF;
1155 uint *found_partition, uint *found_sub_index) {
1157 assert(partition_index < PFS_PARTITION_COUNT);
1159 while (partition_index < PFS_PARTITION_COUNT) {
1162 record = sub_iterator.scan_next(found_sub_index);
1164 *found_partition = partition_index;
1165 sub_index = *found_sub_index + 1;
1173 *found_partition = PFS_PARTITION_COUNT;
1174 *found_sub_index = 0;
1182template <
class B,
int PFS_PARTITION_COUNT>
1186 PFS_PARTITION_COUNT>;
1193 uint unused_partition;
1194 uint unused_sub_index;
1200 uint found_partition;
1201 uint found_sub_index;
1212 uint partition, uint sub_index)
Definition: pfs_buffer_container.h:1364
void free_array(PFS_account_array *array)
Definition: pfs_buffer_container.cc:234
int alloc_array(PFS_account_array *array)
Definition: pfs_buffer_container.cc:101
Definition: pfs_buffer_container.h:1354
PFS_stage_stat * m_instr_class_stages_array
Definition: pfs_buffer_container.h:1357
PFS_memory_shared_stat * m_instr_class_memory_array
Definition: pfs_buffer_container.h:1361
PFS_error_stat * m_instr_class_errors_array
Definition: pfs_buffer_container.h:1360
PFS_single_stat * m_instr_class_waits_array
Definition: pfs_buffer_container.h:1356
PFS_transaction_stat * m_instr_class_transactions_array
Definition: pfs_buffer_container.h:1359
PFS_statement_stat * m_instr_class_statements_array
Definition: pfs_buffer_container.h:1358
Definition: pfs_buffer_container.h:56
Definition: pfs_buffer_container.h:182
PFS_buffer_processor< T > processor_type
Definition: pfs_buffer_container.h:191
void apply(function_type fct)
Definition: pfs_buffer_container.h:246
void cleanup()
Definition: pfs_buffer_container.h:218
size_t get_memory() const
Definition: pfs_buffer_container.h:224
size_t get_row_count() const
Definition: pfs_buffer_container.h:220
size_t m_max
Definition: pfs_buffer_container.h:350
value_type * get(uint index)
Definition: pfs_buffer_container.h:290
size_t get_row_size() const
Definition: pfs_buffer_container.h:222
U array_type
Definition: pfs_buffer_container.h:187
int init(size_t max_size)
Definition: pfs_buffer_container.h:204
void apply(processor_type &proc)
Definition: pfs_buffer_container.h:268
value_type * get(uint index, bool *has_more)
Definition: pfs_buffer_container.h:301
PFS_buffer_const_iterator< T > const_iterator_type
Definition: pfs_buffer_container.h:189
void apply_all(function_type fct)
Definition: pfs_buffer_container.h:258
void(* function_type)(value_type *)
Definition: pfs_buffer_container.h:192
iterator_type iterate()
Definition: pfs_buffer_container.h:239
ulong m_lost
Definition: pfs_buffer_container.h:326
value_type * allocate(pfs_dirty_state *dirty_state)
Definition: pfs_buffer_container.h:226
void apply_all(processor_type &proc)
Definition: pfs_buffer_container.h:280
value_type * sanitize(value_type *unsafe)
Definition: pfs_buffer_container.h:311
V allocator_type
Definition: pfs_buffer_container.h:188
PFS_buffer_container(allocator_type *allocator)
Definition: pfs_buffer_container.h:194
PFS_buffer_iterator< T, U, V > iterator_type
Definition: pfs_buffer_container.h:190
void deallocate(value_type *pfs)
Definition: pfs_buffer_container.h:237
iterator_type iterate(uint index)
Definition: pfs_buffer_container.h:241
friend class PFS_buffer_iterator< T, U, V >
Definition: pfs_buffer_container.h:184
value_type * scan_next(uint &index, uint *found_index)
Definition: pfs_buffer_container.h:329
allocator_type * m_allocator
Definition: pfs_buffer_container.h:352
array_type m_array
Definition: pfs_buffer_container.h:351
T value_type
Definition: pfs_buffer_container.h:186
Definition: pfs_buffer_container.h:146
PFS_buffer_default_array< T > array_type
Definition: pfs_buffer_container.h:148
PFS_buffer_default_allocator(PFS_builtin_memory_class *klass)
Definition: pfs_buffer_container.h:150
int alloc_array(array_type *array)
Definition: pfs_buffer_container.h:153
void free_array(array_type *array)
Definition: pfs_buffer_container.h:169
PFS_builtin_memory_class * m_builtin_class
Definition: pfs_buffer_container.h:177
Definition: pfs_buffer_container.h:86
bool m_full
Definition: pfs_buffer_container.h:137
T * get_last()
Definition: pfs_buffer_container.h:135
size_t m_max
Definition: pfs_buffer_container.h:140
PFS_cacheline_atomic_size_t m_monotonic
Definition: pfs_buffer_container.h:138
T * m_ptr
Definition: pfs_buffer_container.h:139
value_type * allocate(pfs_dirty_state *dirty_state)
Definition: pfs_buffer_container.h:90
T value_type
Definition: pfs_buffer_container.h:88
T * get_first()
Definition: pfs_buffer_container.h:133
PFS_opaque_container * m_container
Container.
Definition: pfs_buffer_container.h:142
void deallocate(value_type *pfs)
Definition: pfs_buffer_container.h:128
Definition: pfs_buffer_container.h:918
T value_type
Definition: pfs_buffer_container.h:921
PFS_buffer_container< T, U, V > container_type
Definition: pfs_buffer_container.h:922
container_type * m_container
Definition: pfs_buffer_container.h:938
value_type * scan_next()
Definition: pfs_buffer_container.h:925
value_type * scan_next(uint *found_index)
Definition: pfs_buffer_container.h:930
PFS_buffer_iterator(container_type *container, uint index)
Definition: pfs_buffer_container.h:935
uint m_index
Definition: pfs_buffer_container.h:939
Definition: pfs_buffer_container.h:969
virtual void operator()(T *element)=0
Definition: pfs_buffer_container.h:358
void(* function_type)(value_type *)
Definition: pfs_buffer_container.h:384
static const size_t MAX_SIZE
Definition: pfs_buffer_container.h:386
int init(long max_size)
Definition: pfs_buffer_container.h:393
size_t get_row_size() const
Definition: pfs_buffer_container.h:475
friend class PFS_buffer_scalable_iterator< T, PFS_PAGE_SIZE, PFS_PAGE_COUNT, U, V >
Definition: pfs_buffer_container.h:361
void apply(processor_type &proc)
Definition: pfs_buffer_container.h:733
bool m_initialized
Definition: pfs_buffer_container.h:905
void apply_all(function_type fct)
Definition: pfs_buffer_container.h:713
void apply_all(processor_type &proc)
Definition: pfs_buffer_container.h:755
PFS_buffer_scalable_container< T, PFS_PAGE_SIZE, PFS_PAGE_COUNT, U, V > container_type
This container type.
Definition: pfs_buffer_container.h:379
size_t m_max_page_count
Definition: pfs_buffer_container.h:910
value_type * sanitize(value_type *unsafe)
Definition: pfs_buffer_container.h:828
PFS_buffer_scalable_iterator< T, PFS_PAGE_SIZE, PFS_PAGE_COUNT, U, V > iterator_type
Definition: pfs_buffer_container.h:382
value_type * allocate(pfs_dirty_state *dirty_state)
Definition: pfs_buffer_container.h:479
native_mutex_t m_critical_section
Definition: pfs_buffer_container.h:914
PFS_cacheline_atomic_size_t m_max_page_index
Definition: pfs_buffer_container.h:909
size_t get_memory()
Definition: pfs_buffer_container.h:477
iterator_type iterate()
Definition: pfs_buffer_container.h:680
uint get_page_logical_size(uint page_index)
Definition: pfs_buffer_container.h:856
void apply(function_type fct)
Definition: pfs_buffer_container.h:691
iterator_type iterate(uint index)
Definition: pfs_buffer_container.h:685
V allocator_type
Definition: pfs_buffer_container.h:376
size_t m_last_page_size
Definition: pfs_buffer_container.h:911
U array_type
Type of pages in the buffer.
Definition: pfs_buffer_container.h:375
PFS_buffer_processor< T > processor_type
Definition: pfs_buffer_container.h:383
value_type * get(uint index, bool *has_more)
Definition: pfs_buffer_container.h:797
PFS_cacheline_atomic_size_t m_monotonic
Definition: pfs_buffer_container.h:908
void cleanup()
Definition: pfs_buffer_container.h:439
size_t get_row_count()
Definition: pfs_buffer_container.h:464
PFS_buffer_const_iterator< T > const_iterator_type
Definition: pfs_buffer_container.h:380
allocator_type * m_allocator
Definition: pfs_buffer_container.h:913
size_t m_max
Definition: pfs_buffer_container.h:907
value_type * get(uint index)
Definition: pfs_buffer_container.h:775
static void static_deallocate(value_type *safe_pfs)
Definition: pfs_buffer_container.h:660
T value_type
Type of elements in the buffer.
Definition: pfs_buffer_container.h:369
PFS_buffer_scalable_container(allocator_type *allocator)
Definition: pfs_buffer_container.h:388
value_type * scan_next(uint &index, uint *found_index)
Definition: pfs_buffer_container.h:864
void deallocate(value_type *safe_pfs)
Definition: pfs_buffer_container.h:645
bool m_full
Definition: pfs_buffer_container.h:906
ulong m_lost
Definition: pfs_buffer_container.h:853
std::atomic< array_type * > m_pages[PFS_PAGE_COUNT]
Definition: pfs_buffer_container.h:912
Definition: pfs_buffer_container.h:943
T value_type
Definition: pfs_buffer_container.h:946
uint m_index
Definition: pfs_buffer_container.h:965
value_type * scan_next(uint *found_index)
Definition: pfs_buffer_container.h:956
value_type * scan_next()
Definition: pfs_buffer_container.h:951
PFS_buffer_scalable_container< T, page_size, page_count, U, V > container_type
Definition: pfs_buffer_container.h:948
PFS_buffer_scalable_iterator(container_type *container, uint index)
Definition: pfs_buffer_container.h:961
container_type * m_container
Definition: pfs_buffer_container.h:964
Definition: pfs_buffer_container.h:1392
int alloc_array(PFS_host_array *array)
Definition: pfs_buffer_container.cc:284
void free_array(PFS_host_array *array)
Definition: pfs_buffer_container.cc:417
Definition: pfs_buffer_container.h:1382
PFS_transaction_stat * m_instr_class_transactions_array
Definition: pfs_buffer_container.h:1387
PFS_memory_shared_stat * m_instr_class_memory_array
Definition: pfs_buffer_container.h:1389
PFS_error_stat * m_instr_class_errors_array
Definition: pfs_buffer_container.h:1388
PFS_single_stat * m_instr_class_waits_array
Definition: pfs_buffer_container.h:1384
PFS_stage_stat * m_instr_class_stages_array
Definition: pfs_buffer_container.h:1385
PFS_statement_stat * m_instr_class_statements_array
Definition: pfs_buffer_container.h:1386
Definition: pfs_buffer_container.h:976
B::function_type function_type
Definition: pfs_buffer_container.h:986
value_type * get(uint user_index, bool *has_more)
Definition: pfs_buffer_container.h:1111
B::allocator_type allocator_type
Definition: pfs_buffer_container.h:981
void apply(processor_type &proc)
Definition: pfs_buffer_container.h:1087
void apply(function_type fct)
Definition: pfs_buffer_container.h:1075
B * m_partitions[PFS_PARTITION_COUNT]
Definition: pfs_buffer_container.h:1179
value_type * scan_next(uint &partition_index, uint &sub_index, uint *found_partition, uint *found_sub_index)
Definition: pfs_buffer_container.h:1154
iterator_type iterate()
Definition: pfs_buffer_container.h:1066
PFS_partitioned_buffer_scalable_iterator< B, PFS_PARTITION_COUNT > iterator_type
Definition: pfs_buffer_container.h:983
size_t get_row_count() const
Definition: pfs_buffer_container.h:1016
void apply_all(function_type fct)
Definition: pfs_buffer_container.h:1081
value_type * sanitize(value_type *unsafe)
Definition: pfs_buffer_container.h:1125
B::value_type value_type
Definition: pfs_buffer_container.h:980
static void unpack_index(uint user_index, uint *partition_index, uint *sub_index)
Definition: pfs_buffer_container.h:1148
PFS_partitioned_buffer_scalable_container(allocator_type *allocator)
Definition: pfs_buffer_container.h:988
void deallocate(value_type *safe_pfs)
Definition: pfs_buffer_container.h:1054
int init(long max_size)
Definition: pfs_buffer_container.h:1001
~PFS_partitioned_buffer_scalable_container()
Definition: pfs_buffer_container.h:995
B::iterator_type sub_iterator_type
Definition: pfs_buffer_container.h:984
size_t get_memory() const
Definition: pfs_buffer_container.h:1028
iterator_type iterate(uint user_index)
Definition: pfs_buffer_container.h:1068
size_t get_row_size() const
Definition: pfs_buffer_container.h:1026
B::processor_type processor_type
Definition: pfs_buffer_container.h:985
void apply_all(processor_type &proc)
Definition: pfs_buffer_container.h:1093
value_type * get(uint user_index)
Definition: pfs_buffer_container.h:1099
value_type * allocate(pfs_dirty_state *dirty_state, uint partition)
Definition: pfs_buffer_container.h:1048
void cleanup()
Definition: pfs_buffer_container.h:1010
long get_lost_counter()
Definition: pfs_buffer_container.h:1038
static void pack_index(uint partition_index, uint sub_index, uint *user_index)
Definition: pfs_buffer_container.h:1139
Definition: pfs_buffer_container.h:1183
uint m_sub_index
Definition: pfs_buffer_container.h:1219
PFS_partitioned_buffer_scalable_container< B, PFS_PARTITION_COUNT > container_type
Definition: pfs_buffer_container.h:1190
container_type * m_container
Definition: pfs_buffer_container.h:1217
B::value_type value_type
Definition: pfs_buffer_container.h:1188
value_type * scan_next(uint *found_user_index)
Definition: pfs_buffer_container.h:1199
value_type * scan_next()
Definition: pfs_buffer_container.h:1192
PFS_partitioned_buffer_scalable_iterator(container_type *container, uint partition, uint sub_index)
Definition: pfs_buffer_container.h:1211
uint m_partition
Definition: pfs_buffer_container.h:1218
Definition: pfs_buffer_container.h:1431
void free_array(PFS_thread_array *array)
Definition: pfs_buffer_container.cc:765
int alloc_array(PFS_thread_array *array)
Definition: pfs_buffer_container.cc:466
Definition: pfs_buffer_container.h:1409
PFS_statement_stat * m_instr_class_statements_array
Definition: pfs_buffer_container.h:1413
PFS_single_stat * m_instr_class_waits_array
Definition: pfs_buffer_container.h:1411
PFS_error_stat * m_instr_class_errors_array
Definition: pfs_buffer_container.h:1415
PFS_events_statements * m_statements_stack_array
Definition: pfs_buffer_container.h:1421
PFS_events_statements * m_statements_history_array
Definition: pfs_buffer_container.h:1420
PFS_stage_stat * m_instr_class_stages_array
Definition: pfs_buffer_container.h:1412
unsigned char * m_current_stmts_digest_token_array
Definition: pfs_buffer_container.h:1427
PFS_events_stages * m_stages_history_array
Definition: pfs_buffer_container.h:1419
char * m_current_stmts_text_array
Definition: pfs_buffer_container.h:1425
PFS_memory_safe_stat * m_instr_class_memory_array
Definition: pfs_buffer_container.h:1416
unsigned char * m_history_stmts_digest_token_array
Definition: pfs_buffer_container.h:1428
PFS_transaction_stat * m_instr_class_transactions_array
Definition: pfs_buffer_container.h:1414
char * m_session_connect_attrs_array
Definition: pfs_buffer_container.h:1423
PFS_events_waits * m_waits_history_array
Definition: pfs_buffer_container.h:1418
PFS_events_transactions * m_transactions_history_array
Definition: pfs_buffer_container.h:1422
char * m_history_stmts_text_array
Definition: pfs_buffer_container.h:1426
Definition: pfs_buffer_container.h:1458
void free_array(PFS_user_array *array)
Definition: pfs_buffer_container.cc:1012
int alloc_array(PFS_user_array *array)
Definition: pfs_buffer_container.cc:879
Definition: pfs_buffer_container.h:1448
PFS_statement_stat * m_instr_class_statements_array
Definition: pfs_buffer_container.h:1452
PFS_transaction_stat * m_instr_class_transactions_array
Definition: pfs_buffer_container.h:1453
PFS_stage_stat * m_instr_class_stages_array
Definition: pfs_buffer_container.h:1451
PFS_single_stat * m_instr_class_waits_array
Definition: pfs_buffer_container.h:1450
PFS_error_stat * m_instr_class_errors_array
Definition: pfs_buffer_container.h:1454
PFS_memory_shared_stat * m_instr_class_memory_array
Definition: pfs_buffer_container.h:1455
int page
Definition: ctype-mb.cc:1233
#define MY_ZEROFILL
Definition: my_sys.h:138
constexpr bool unlikely(bool expr)
Definition: my_compiler.h:57
Some integer typedefs for easier portability.
intptr_t intptr
Definition: my_inttypes.h:69
#define MYF(v)
Definition: my_inttypes.h:96
static int record
Definition: mysqltest.cc:194
uint16_t value_type
Definition: vt100.h:183
Definition: atomics_array.h:38
const ulint MAX_SIZE
The maximum size possible for an LOB.
Definition: lob0lob.h:83
Performance schema account (declarations).
PFS_file_container global_file_container
PFS_buffer_scalable_container< PFS_mutex, 1024, 1024 > PFS_mutex_basic_container
Definition: pfs_buffer_container.h:1224
PFS_host_container global_host_container
PFS_buffer_scalable_container< PFS_socket, 256, 256 > PFS_socket_container
Definition: pfs_buffer_container.h:1262
PFS_thread_container global_thread_container
PFS_table_share_index_container global_table_share_index_container
PFS_cond_container::iterator_type PFS_cond_iterator
Definition: pfs_buffer_container.h:1248
PFS_buffer_scalable_container< PFS_table, 1024, 1024 > PFS_table_container
Definition: pfs_buffer_container.h:1298
PFS_file_container::iterator_type PFS_file_iterator
Definition: pfs_buffer_container.h:1257
PFS_user_container::iterator_type PFS_user_iterator
Definition: pfs_buffer_container.h:1472
PFS_mutex_container::iterator_type PFS_mutex_iterator
Definition: pfs_buffer_container.h:1231
PFS_prepared_stmt_container::iterator_type PFS_prepared_stmt_iterator
Definition: pfs_buffer_container.h:1351
PFS_buffer_scalable_container< PFS_table_share, 4 *1024, 4 *1024 > PFS_table_share_container
Definition: pfs_buffer_container.h:1307
PFS_setup_object_container::iterator_type PFS_setup_object_iterator
Definition: pfs_buffer_container.h:1293
PFS_cond_container global_cond_container
PFS_buffer_scalable_container< PFS_prepared_stmt, 1024, 1024 > PFS_prepared_stmt_container
Definition: pfs_buffer_container.h:1347
PFS_buffer_scalable_container< PFS_table_share_lock, 4 *1024, 4 *1024 > PFS_table_share_lock_container
Definition: pfs_buffer_container.h:1327
PFS_socket_container::iterator_type PFS_socket_iterator
Definition: pfs_buffer_container.h:1266
PFS_table_share_container global_table_share_container
PFS_rwlock_container::iterator_type PFS_rwlock_iterator
Definition: pfs_buffer_container.h:1240
PFS_program_container global_program_container
PFS_buffer_scalable_container< PFS_thread, 256, 256, PFS_thread_array, PFS_thread_allocator > PFS_thread_container
Definition: pfs_buffer_container.h:1440
PFS_host_container::iterator_type PFS_host_iterator
Definition: pfs_buffer_container.h:1406
PFS_socket_container global_socket_container
PFS_partitioned_buffer_scalable_container< PFS_mutex_basic_container, PFS_MUTEX_PARTITIONS > PFS_mutex_container
Definition: pfs_buffer_container.h:1227
PFS_table_share_lock_container::iterator_type PFS_table_share_lock_iterator
Definition: pfs_buffer_container.h:1333
PFS_buffer_scalable_container< PFS_program, 1024, 1024 > PFS_program_container
Definition: pfs_buffer_container.h:1338
PFS_account_container::iterator_type PFS_account_iterator
Definition: pfs_buffer_container.h:1379
PFS_buffer_scalable_container< PFS_file, 4 *1024, 4 *1024 > PFS_file_container
Definition: pfs_buffer_container.h:1253
PFS_setup_object_container global_setup_object_container
PFS_table_share_index_container::iterator_type PFS_table_share_index_iterator
Definition: pfs_buffer_container.h:1322
PFS_mdl_container global_mdl_container
PFS_buffer_scalable_container< PFS_setup_actor, 128, 1024 > PFS_setup_actor_container
Definition: pfs_buffer_container.h:1280
PFS_rwlock_container global_rwlock_container
PFS_thread_container::iterator_type PFS_thread_iterator
Definition: pfs_buffer_container.h:1445
PFS_mdl_container::iterator_type PFS_mdl_iterator
Definition: pfs_buffer_container.h:1275
PFS_table_share_lock_container global_table_share_lock_container
PFS_table_container global_table_container
PFS_table_container::iterator_type PFS_table_iterator
Definition: pfs_buffer_container.h:1302
PFS_buffer_scalable_container< PFS_host, 128, 128, PFS_host_array, PFS_host_allocator > PFS_host_container
Definition: pfs_buffer_container.h:1401
PFS_account_container global_account_container
PFS_buffer_scalable_container< PFS_cond, 256, 256 > PFS_cond_container
Definition: pfs_buffer_container.h:1244
PFS_setup_actor_container::iterator_type PFS_setup_actor_iterator
Definition: pfs_buffer_container.h:1284
PFS_program_container::iterator_type PFS_program_iterator
Definition: pfs_buffer_container.h:1342
PFS_prepared_stmt_container global_prepared_stmt_container
PFS_buffer_scalable_container< PFS_user, 128, 128, PFS_user_array, PFS_user_allocator > PFS_user_container
Definition: pfs_buffer_container.h:1467
PFS_buffer_scalable_container< PFS_table_share_index, 8 *1024, 8 *1024 > PFS_table_share_index_container
Definition: pfs_buffer_container.h:1316
PFS_buffer_scalable_container< PFS_setup_object, 128, 1024 > PFS_setup_object_container
Definition: pfs_buffer_container.h:1289
PFS_table_share_container::iterator_type PFS_table_share_iterator
Definition: pfs_buffer_container.h:1311
PFS_setup_actor_container global_setup_actor_container
PFS_mutex_container global_mutex_container
PFS_buffer_scalable_container< PFS_metadata_lock, 1024, 1024 > PFS_mdl_container
Definition: pfs_buffer_container.h:1271
PFS_buffer_scalable_container< PFS_rwlock, 1024, 1024 > PFS_rwlock_container
Definition: pfs_buffer_container.h:1236
PFS_user_container global_user_container
PFS_buffer_scalable_container< PFS_account, 128, 128, PFS_account_array, PFS_account_allocator > PFS_account_container
Definition: pfs_buffer_container.h:1373
PFS_builtin_memory_class builtin_memory_scalable_buffer
Definition: pfs_builtin_memory.cc:122
Performance schema instruments metadata (declarations).
#define PFS_MALLOC_ARRAY(k, n, s, T, f)
Helper, to allocate an array of structures.
Definition: pfs_global.h:122
#define PFS_FREE_ARRAY(k, n, s, p)
Helper, to free an array of structures.
Definition: pfs_global.h:139
Performance schema host (declarations).
Performance schema instruments (declarations).
Performance schema internal locks (declarations).
Stored Program data structures (declarations).
Stored Program data structures (declarations).
Performance schema setup actors (declarations).
Performance schema setup object (declarations).
Performance schema user (declarations).
struct result result
Definition: result.h:33
static const LEX_CSTRING pfs
Definition: sql_show_processlist.cc:65
Per account statistics.
Definition: pfs_account.h:66
Definition: pfs_builtin_memory.h:38
void count_alloc(size_t size)
Definition: pfs_builtin_memory.h:42
void count_free(size_t size)
Definition: pfs_builtin_memory.h:44
An atomic size_t variable, guaranteed to be alone in a CPU cache line.
Definition: pfs_global.h:98
std::atomic< size_t > m_size_t
Definition: pfs_global.h:99
Statistics for all server errors.
Definition: pfs_stat.h:556
A stage record.
Definition: pfs_events_stages.h:44
A statement record.
Definition: pfs_events_statements.h:46
A transaction record.
Definition: pfs_events_transactions.h:84
A wait event record.
Definition: pfs_events_waits.h:68
Per host statistics.
Definition: pfs_host.h:63
Memory statistics.
Definition: pfs_stat.h:912
Definition: pfs_stat.h:936
Single statistic.
Definition: pfs_stat.h:51
Statistics for stage usage.
Definition: pfs_stat.h:322
Statistics for statement usage.
Definition: pfs_stat.h:375
Instrumented thread implementation.
Definition: pfs_instr.h:374
Statistics for transaction usage.
Definition: pfs_stat.h:458
Per user statistics.
Definition: pfs_user.h:62
Definition: pfs_lock.h:76
static int native_mutex_unlock(native_mutex_t *mutex)
Definition: thr_mutex.h:114
static int native_mutex_destroy(native_mutex_t *mutex)
Definition: thr_mutex.h:123
static int native_mutex_lock(native_mutex_t *mutex)
Definition: thr_mutex.h:89
static int native_mutex_init(native_mutex_t *mutex, const native_mutexattr_t *attr)
Definition: thr_mutex.h:78
pthread_mutex_t native_mutex_t
Definition: thr_mutex_bits.h:54
#define NULL
Definition: types.h:54