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.dirty_to_free(dirty_state);
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;
677 PFS_opaque_container_page *opaque_page = safe_pfs->m_page;
681 safe_pfs->m_lock.allocated_to_free();
684 page->m_full =
false;
687 PFS_opaque_container *opaque_container =
page->m_container;
701 assert(index <=
m_max);
712 for (i = 0; i < PFS_PAGE_COUNT; i++) {
714 if (
page !=
nullptr) {
716 pfs_last =
page->get_last();
718 while (
pfs < pfs_last) {
719 if (
pfs->m_lock.is_populated()) {
734 for (i = 0; i < PFS_PAGE_COUNT; i++) {
736 if (
page !=
nullptr) {
738 pfs_last =
page->get_last();
740 while (
pfs < pfs_last) {
754 for (i = 0; i < PFS_PAGE_COUNT; i++) {
756 if (
page !=
nullptr) {
758 pfs_last =
page->get_last();
760 while (
pfs < pfs_last) {
761 if (
pfs->m_lock.is_populated()) {
776 for (i = 0; i < PFS_PAGE_COUNT; i++) {
780 pfs_last =
page->get_last();
782 while (
pfs < pfs_last) {
791 assert(index <
m_max);
793 uint index_1 = index / PFS_PAGE_SIZE;
795 if (
page !=
nullptr) {
796 uint index_2 = index % PFS_PAGE_SIZE;
798 if (index_2 >=
page->m_max) {
804 if (
pfs->m_lock.is_populated()) {
813 if (index >=
m_max) {
818 uint index_1 = index / PFS_PAGE_SIZE;
821 if (
page ==
nullptr) {
826 uint index_2 = index % PFS_PAGE_SIZE;
828 if (index_2 >=
page->m_max) {
836 if (
pfs->m_lock.is_populated()) {
850 for (i = 0; i < PFS_PAGE_COUNT; i++) {
852 if (
page !=
nullptr) {
854 pfs_last =
page->get_last();
856 if ((
pfs <= unsafe) && (unsafe < pfs_last)) {
873 return PFS_PAGE_SIZE;
880 assert(index <=
m_max);
882 uint index_1 = index / PFS_PAGE_SIZE;
883 uint index_2 = index % PFS_PAGE_SIZE;
889 while (index_1 < PFS_PAGE_COUNT) {
892 if (
page ==
nullptr) {
893 index =
static_cast<uint
>(
m_max);
897 pfs_first =
page->get_first();
898 pfs = pfs_first + index_2;
899 pfs_last =
page->get_last();
901 while (
pfs < pfs_last) {
902 if (
pfs->m_lock.is_populated()) {
904 index_1 * PFS_PAGE_SIZE +
static_cast<uint
>(
pfs - pfs_first);
905 *found_index = found;
916 index =
static_cast<uint
>(
m_max);
927 std::atomic<array_type *>
m_pages[PFS_PAGE_COUNT];
932template <
class T,
class U,
class V>
957template <
class T,
int page_size,
int page_count,
class U,
class V>
990template <
class B,
int PFS_PARTITION_COUNT>
1005 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++) {
1026 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1034 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1046 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1056 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1064 assert(partition < PFS_PARTITION_COUNT);
1078 B::static_deallocate(safe_pfs);
1084 uint partition_index;
1086 unpack_index(user_index, &partition_index, &sub_index);
1091 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1097 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1103 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1109 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1115 uint partition_index;
1117 unpack_index(user_index, &partition_index, &sub_index);
1119 if (partition_index >= PFS_PARTITION_COUNT) {
1127 uint partition_index;
1129 unpack_index(user_index, &partition_index, &sub_index);
1131 if (partition_index >= PFS_PARTITION_COUNT) {
1143 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1145 if (safe !=
nullptr) {
1156 static_assert(PFS_PARTITION_COUNT <= (1 << 8),
"2^8 = 256 partitions max.");
1158 "2^24 = 16777216 max per partitioned buffer.");
1160 *user_index = (partition_index << 24) + sub_index;
1165 *partition_index = user_index >> 24;
1166 *sub_index = user_index & 0x00FFFFFF;
1170 uint *found_partition, uint *found_sub_index) {
1172 assert(partition_index < PFS_PARTITION_COUNT);
1174 while (partition_index < PFS_PARTITION_COUNT) {
1177 record = sub_iterator.scan_next(found_sub_index);
1179 *found_partition = partition_index;
1180 sub_index = *found_sub_index + 1;
1188 *found_partition = PFS_PARTITION_COUNT;
1189 *found_sub_index = 0;
1197template <
class B,
int PFS_PARTITION_COUNT>
1201 PFS_PARTITION_COUNT>;
1208 uint unused_partition;
1209 uint unused_sub_index;
1215 uint found_partition;
1216 uint found_sub_index;
1227 uint partition, uint sub_index)
Definition: pfs_buffer_container.h:1379
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:1369
PFS_stage_stat * m_instr_class_stages_array
Definition: pfs_buffer_container.h:1372
PFS_memory_shared_stat * m_instr_class_memory_array
Definition: pfs_buffer_container.h:1376
PFS_error_stat * m_instr_class_errors_array
Definition: pfs_buffer_container.h:1375
PFS_single_stat * m_instr_class_waits_array
Definition: pfs_buffer_container.h:1371
PFS_transaction_stat * m_instr_class_transactions_array
Definition: pfs_buffer_container.h:1374
PFS_statement_stat * m_instr_class_statements_array
Definition: pfs_buffer_container.h:1373
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:933
T value_type
Definition: pfs_buffer_container.h:936
PFS_buffer_container< T, U, V > container_type
Definition: pfs_buffer_container.h:937
container_type * m_container
Definition: pfs_buffer_container.h:953
value_type * scan_next()
Definition: pfs_buffer_container.h:940
value_type * scan_next(uint *found_index)
Definition: pfs_buffer_container.h:945
PFS_buffer_iterator(container_type *container, uint index)
Definition: pfs_buffer_container.h:950
uint m_index
Definition: pfs_buffer_container.h:954
Definition: pfs_buffer_container.h:984
virtual void operator()(T *element)=0
virtual ~PFS_buffer_processor()=default
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:748
bool m_initialized
Definition: pfs_buffer_container.h:920
void apply_all(function_type fct)
Definition: pfs_buffer_container.h:728
void apply_all(processor_type &proc)
Definition: pfs_buffer_container.h:770
void dirty_to_free(pfs_dirty_state *dirty_state, value_type *safe_pfs)
Definition: pfs_buffer_container.h:645
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:925
value_type * sanitize(value_type *unsafe)
Definition: pfs_buffer_container.h:843
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:929
PFS_cacheline_atomic_size_t m_max_page_index
Definition: pfs_buffer_container.h:924
size_t get_memory()
Definition: pfs_buffer_container.h:477
iterator_type iterate()
Definition: pfs_buffer_container.h:695
uint get_page_logical_size(uint page_index)
Definition: pfs_buffer_container.h:871
void apply(function_type fct)
Definition: pfs_buffer_container.h:706
iterator_type iterate(uint index)
Definition: pfs_buffer_container.h:700
V allocator_type
Definition: pfs_buffer_container.h:376
size_t m_last_page_size
Definition: pfs_buffer_container.h:926
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:812
PFS_cacheline_atomic_size_t m_monotonic
Definition: pfs_buffer_container.h:923
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:928
size_t m_max
Definition: pfs_buffer_container.h:922
value_type * get(uint index)
Definition: pfs_buffer_container.h:790
static void static_deallocate(value_type *safe_pfs)
Definition: pfs_buffer_container.h:675
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:879
void deallocate(value_type *safe_pfs)
Definition: pfs_buffer_container.h:660
bool m_full
Definition: pfs_buffer_container.h:921
ulong m_lost
Definition: pfs_buffer_container.h:868
std::atomic< array_type * > m_pages[PFS_PAGE_COUNT]
Definition: pfs_buffer_container.h:927
Definition: pfs_buffer_container.h:958
T value_type
Definition: pfs_buffer_container.h:961
uint m_index
Definition: pfs_buffer_container.h:980
value_type * scan_next(uint *found_index)
Definition: pfs_buffer_container.h:971
value_type * scan_next()
Definition: pfs_buffer_container.h:966
PFS_buffer_scalable_container< T, page_size, page_count, U, V > container_type
Definition: pfs_buffer_container.h:963
PFS_buffer_scalable_iterator(container_type *container, uint index)
Definition: pfs_buffer_container.h:976
container_type * m_container
Definition: pfs_buffer_container.h:979
Definition: pfs_buffer_container.h:1407
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:1397
PFS_transaction_stat * m_instr_class_transactions_array
Definition: pfs_buffer_container.h:1402
PFS_memory_shared_stat * m_instr_class_memory_array
Definition: pfs_buffer_container.h:1404
PFS_error_stat * m_instr_class_errors_array
Definition: pfs_buffer_container.h:1403
PFS_single_stat * m_instr_class_waits_array
Definition: pfs_buffer_container.h:1399
PFS_stage_stat * m_instr_class_stages_array
Definition: pfs_buffer_container.h:1400
PFS_statement_stat * m_instr_class_statements_array
Definition: pfs_buffer_container.h:1401
Definition: pfs_buffer_container.h:991
B::function_type function_type
Definition: pfs_buffer_container.h:1001
value_type * get(uint user_index, bool *has_more)
Definition: pfs_buffer_container.h:1126
B::allocator_type allocator_type
Definition: pfs_buffer_container.h:996
void apply(processor_type &proc)
Definition: pfs_buffer_container.h:1102
void apply(function_type fct)
Definition: pfs_buffer_container.h:1090
B * m_partitions[PFS_PARTITION_COUNT]
Definition: pfs_buffer_container.h:1194
value_type * scan_next(uint &partition_index, uint &sub_index, uint *found_partition, uint *found_sub_index)
Definition: pfs_buffer_container.h:1169
iterator_type iterate()
Definition: pfs_buffer_container.h:1081
PFS_partitioned_buffer_scalable_iterator< B, PFS_PARTITION_COUNT > iterator_type
Definition: pfs_buffer_container.h:998
size_t get_row_count() const
Definition: pfs_buffer_container.h:1031
void apply_all(function_type fct)
Definition: pfs_buffer_container.h:1096
value_type * sanitize(value_type *unsafe)
Definition: pfs_buffer_container.h:1140
B::value_type value_type
Definition: pfs_buffer_container.h:995
static void unpack_index(uint user_index, uint *partition_index, uint *sub_index)
Definition: pfs_buffer_container.h:1163
PFS_partitioned_buffer_scalable_container(allocator_type *allocator)
Definition: pfs_buffer_container.h:1003
void deallocate(value_type *safe_pfs)
Definition: pfs_buffer_container.h:1069
int init(long max_size)
Definition: pfs_buffer_container.h:1016
~PFS_partitioned_buffer_scalable_container()
Definition: pfs_buffer_container.h:1010
B::iterator_type sub_iterator_type
Definition: pfs_buffer_container.h:999
size_t get_memory() const
Definition: pfs_buffer_container.h:1043
iterator_type iterate(uint user_index)
Definition: pfs_buffer_container.h:1083
size_t get_row_size() const
Definition: pfs_buffer_container.h:1041
B::processor_type processor_type
Definition: pfs_buffer_container.h:1000
void apply_all(processor_type &proc)
Definition: pfs_buffer_container.h:1108
value_type * get(uint user_index)
Definition: pfs_buffer_container.h:1114
value_type * allocate(pfs_dirty_state *dirty_state, uint partition)
Definition: pfs_buffer_container.h:1063
void cleanup()
Definition: pfs_buffer_container.h:1025
long get_lost_counter()
Definition: pfs_buffer_container.h:1053
static void pack_index(uint partition_index, uint sub_index, uint *user_index)
Definition: pfs_buffer_container.h:1154
Definition: pfs_buffer_container.h:1198
uint m_sub_index
Definition: pfs_buffer_container.h:1234
PFS_partitioned_buffer_scalable_container< B, PFS_PARTITION_COUNT > container_type
Definition: pfs_buffer_container.h:1205
container_type * m_container
Definition: pfs_buffer_container.h:1232
B::value_type value_type
Definition: pfs_buffer_container.h:1203
value_type * scan_next(uint *found_user_index)
Definition: pfs_buffer_container.h:1214
value_type * scan_next()
Definition: pfs_buffer_container.h:1207
PFS_partitioned_buffer_scalable_iterator(container_type *container, uint partition, uint sub_index)
Definition: pfs_buffer_container.h:1226
uint m_partition
Definition: pfs_buffer_container.h:1233
Definition: pfs_buffer_container.h:1446
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:1424
PFS_statement_stat * m_instr_class_statements_array
Definition: pfs_buffer_container.h:1428
PFS_single_stat * m_instr_class_waits_array
Definition: pfs_buffer_container.h:1426
PFS_error_stat * m_instr_class_errors_array
Definition: pfs_buffer_container.h:1430
PFS_events_statements * m_statements_stack_array
Definition: pfs_buffer_container.h:1436
PFS_events_statements * m_statements_history_array
Definition: pfs_buffer_container.h:1435
PFS_stage_stat * m_instr_class_stages_array
Definition: pfs_buffer_container.h:1427
unsigned char * m_current_stmts_digest_token_array
Definition: pfs_buffer_container.h:1442
PFS_events_stages * m_stages_history_array
Definition: pfs_buffer_container.h:1434
char * m_current_stmts_text_array
Definition: pfs_buffer_container.h:1440
PFS_memory_safe_stat * m_instr_class_memory_array
Definition: pfs_buffer_container.h:1431
unsigned char * m_history_stmts_digest_token_array
Definition: pfs_buffer_container.h:1443
PFS_transaction_stat * m_instr_class_transactions_array
Definition: pfs_buffer_container.h:1429
char * m_session_connect_attrs_array
Definition: pfs_buffer_container.h:1438
PFS_events_waits * m_waits_history_array
Definition: pfs_buffer_container.h:1433
PFS_events_transactions * m_transactions_history_array
Definition: pfs_buffer_container.h:1437
char * m_history_stmts_text_array
Definition: pfs_buffer_container.h:1441
Definition: pfs_buffer_container.h:1473
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:1463
PFS_statement_stat * m_instr_class_statements_array
Definition: pfs_buffer_container.h:1467
PFS_transaction_stat * m_instr_class_transactions_array
Definition: pfs_buffer_container.h:1468
PFS_stage_stat * m_instr_class_stages_array
Definition: pfs_buffer_container.h:1466
PFS_single_stat * m_instr_class_waits_array
Definition: pfs_buffer_container.h:1465
PFS_error_stat * m_instr_class_errors_array
Definition: pfs_buffer_container.h:1469
PFS_memory_shared_stat * m_instr_class_memory_array
Definition: pfs_buffer_container.h:1470
int page
Definition: ctype-mb.cc:1233
#define MY_ZEROFILL
Definition: my_sys.h:140
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:1239
PFS_host_container global_host_container
PFS_buffer_scalable_container< PFS_socket, 256, 256 > PFS_socket_container
Definition: pfs_buffer_container.h:1277
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:1263
PFS_buffer_scalable_container< PFS_table, 1024, 1024 > PFS_table_container
Definition: pfs_buffer_container.h:1313
PFS_file_container::iterator_type PFS_file_iterator
Definition: pfs_buffer_container.h:1272
PFS_user_container::iterator_type PFS_user_iterator
Definition: pfs_buffer_container.h:1487
PFS_mutex_container::iterator_type PFS_mutex_iterator
Definition: pfs_buffer_container.h:1246
PFS_prepared_stmt_container::iterator_type PFS_prepared_stmt_iterator
Definition: pfs_buffer_container.h:1366
PFS_buffer_scalable_container< PFS_table_share, 4 *1024, 4 *1024 > PFS_table_share_container
Definition: pfs_buffer_container.h:1322
PFS_setup_object_container::iterator_type PFS_setup_object_iterator
Definition: pfs_buffer_container.h:1308
PFS_cond_container global_cond_container
PFS_buffer_scalable_container< PFS_prepared_stmt, 1024, 1024 > PFS_prepared_stmt_container
Definition: pfs_buffer_container.h:1362
PFS_buffer_scalable_container< PFS_table_share_lock, 4 *1024, 4 *1024 > PFS_table_share_lock_container
Definition: pfs_buffer_container.h:1342
PFS_socket_container::iterator_type PFS_socket_iterator
Definition: pfs_buffer_container.h:1281
PFS_table_share_container global_table_share_container
PFS_rwlock_container::iterator_type PFS_rwlock_iterator
Definition: pfs_buffer_container.h:1255
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:1455
PFS_host_container::iterator_type PFS_host_iterator
Definition: pfs_buffer_container.h:1421
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:1242
PFS_table_share_lock_container::iterator_type PFS_table_share_lock_iterator
Definition: pfs_buffer_container.h:1348
PFS_buffer_scalable_container< PFS_program, 1024, 1024 > PFS_program_container
Definition: pfs_buffer_container.h:1353
PFS_account_container::iterator_type PFS_account_iterator
Definition: pfs_buffer_container.h:1394
PFS_buffer_scalable_container< PFS_file, 4 *1024, 4 *1024 > PFS_file_container
Definition: pfs_buffer_container.h:1268
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:1337
PFS_mdl_container global_mdl_container
PFS_buffer_scalable_container< PFS_setup_actor, 128, 1024 > PFS_setup_actor_container
Definition: pfs_buffer_container.h:1295
PFS_rwlock_container global_rwlock_container
PFS_thread_container::iterator_type PFS_thread_iterator
Definition: pfs_buffer_container.h:1460
PFS_mdl_container::iterator_type PFS_mdl_iterator
Definition: pfs_buffer_container.h:1290
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:1317
PFS_buffer_scalable_container< PFS_host, 128, 128, PFS_host_array, PFS_host_allocator > PFS_host_container
Definition: pfs_buffer_container.h:1416
PFS_account_container global_account_container
PFS_buffer_scalable_container< PFS_cond, 256, 256 > PFS_cond_container
Definition: pfs_buffer_container.h:1259
PFS_setup_actor_container::iterator_type PFS_setup_actor_iterator
Definition: pfs_buffer_container.h:1299
PFS_program_container::iterator_type PFS_program_iterator
Definition: pfs_buffer_container.h:1357
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:1482
PFS_buffer_scalable_container< PFS_table_share_index, 8 *1024, 8 *1024 > PFS_table_share_index_container
Definition: pfs_buffer_container.h:1331
PFS_buffer_scalable_container< PFS_setup_object, 128, 1024 > PFS_setup_object_container
Definition: pfs_buffer_container.h:1304
PFS_table_share_container::iterator_type PFS_table_share_iterator
Definition: pfs_buffer_container.h:1326
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:1286
PFS_buffer_scalable_container< PFS_rwlock, 1024, 1024 > PFS_rwlock_container
Definition: pfs_buffer_container.h:1251
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:1388
PFS_builtin_memory_class builtin_memory_scalable_buffer
Definition: pfs_builtin_memory.cc:127
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:134
#define PFS_FREE_ARRAY(k, n, s, p)
Helper, to free an array of structures.
Definition: pfs_global.h:151
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:85
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