24#ifndef PFS_BUFFER_CONTAINER_H
25#define PFS_BUFFER_CONTAINER_H
51class PFS_opaque_container_page;
52class PFS_opaque_container;
62template <
class T,
class U,
class V>
65template <
class T,
int PFS_PAGE_SIZE,
int PFS_PAGE_COUNT,
class U,
class V>
74template <
class T,
class U,
class V>
77template <
class T,
int PFS_PAGE_SIZE,
int PFS_PAGE_COUNT,
class U,
class V>
80template <
class B,
int COUNT>
83template <
class B,
int COUNT>
102 size_t max =
m_max.load();
104 T *ptr =
m_ptr.load();
107 monotonic_max = monotonic + max;
109 if (
unlikely(monotonic >= monotonic_max)) {
120 while (monotonic < monotonic_max) {
121 index = monotonic % max;
124 if (
pfs->m_lock.free_to_dirty(dirty_state)) {
135 pfs->m_lock.allocated_to_free();
203 array->
m_ptr =
nullptr;
207 if (array->
m_max > 0) {
210 if (array->
m_ptr ==
nullptr) {
219 assert(array->
m_max > 0);
222 array->
m_ptr =
nullptr;
229template <
class T,
class U = PFS_buffer_default_array<T>,
230 class V = PFS_buffer_default_allocator<T>>
247 m_array.m_monotonic.m_size_t = 0;
279 if (
pfs ==
nullptr) {
291 assert(index <=
m_max);
299 while (
pfs < pfs_last) {
300 if (
pfs->m_lock.is_populated()) {
311 while (
pfs < pfs_last) {
321 while (
pfs < pfs_last) {
322 if (
pfs->m_lock.is_populated()) {
333 while (
pfs < pfs_last) {
340 assert(index <
m_max);
343 if (
pfs->m_lock.is_populated()) {
351 if (index >=
m_max) {
364 if ((
pfs <= unsafe) && (unsafe < pfs_last)) {
378 assert(index <=
m_max);
384 while (
pfs < pfs_last) {
385 if (
pfs->m_lock.is_populated()) {
386 const uint found =
pfs - pfs_first;
387 *found_index = found;
403template <
class T,
int PFS_PAGE_SIZE,
int PFS_PAGE_COUNT,
434 static const size_t MAX_SIZE = PFS_PAGE_SIZE * PFS_PAGE_COUNT;
440 m_max = PFS_PAGE_COUNT * PFS_PAGE_SIZE;
451 m_max = PFS_PAGE_COUNT * PFS_PAGE_SIZE;
458 for (i = 0; i < PFS_PAGE_COUNT; i++) {
465 }
else if (max_size > 0) {
466 if (max_size % PFS_PAGE_SIZE == 0) {
504 for (i = 0; i < PFS_PAGE_COUNT; i++) {
506 if (
page !=
nullptr) {
507 allocator->free_array(
page);
521 size_t result = page_count * PFS_PAGE_SIZE;
541 size_t current_page_count;
550 if (current_page_count != 0) {
552 size_t monotonic_max = monotonic + current_page_count;
554 if (
unlikely(monotonic >= monotonic_max)) {
562 monotonic_max = current_page_count;
565 while (monotonic < monotonic_max) {
570 index = monotonic % current_page_count;
575 if (array !=
nullptr) {
576 pfs = array->allocate(dirty_state);
577 if (
pfs !=
nullptr) {
579 pfs->m_page =
reinterpret_cast<PFS_opaque_container_page *
>(array);
611 array =
m_pages[current_page_count].load();
613 if (array ==
nullptr) {
647 array =
m_pages[current_page_count].load();
649 if (array ==
nullptr) {
658 const int rc = allocator->alloc_array(array);
660 allocator->free_array(array);
669 array->m_container =
reinterpret_cast<PFS_opaque_container *
>(
this);
672 m_pages[current_page_count].store(array);
685 assert(array !=
nullptr);
686 pfs = array->allocate(dirty_state);
687 if (
pfs !=
nullptr) {
689 pfs->m_page =
reinterpret_cast<PFS_opaque_container_page *
>(array);
693 current_page_count++;
703 PFS_opaque_container_page *opaque_page = safe_pfs->m_page;
707 safe_pfs->m_lock.dirty_to_free(dirty_state);
710 if (
page->m_full.load()) {
711 page->m_full.store(
false);
722 PFS_opaque_container_page *opaque_page = safe_pfs->m_page;
726 safe_pfs->m_lock.allocated_to_free();
729 if (
page->m_full.load()) {
730 page->m_full.store(
false);
741 PFS_opaque_container_page *opaque_page = safe_pfs->m_page;
745 safe_pfs->m_lock.allocated_to_free();
748 if (
page->m_full.load()) {
749 page->m_full.store(
false);
753 PFS_opaque_container *opaque_container =
page->m_container;
769 assert(index <=
m_max);
780 for (i = 0; i < PFS_PAGE_COUNT; i++) {
782 if (
page !=
nullptr) {
784 pfs_last =
page->get_last();
786 while (
pfs < pfs_last) {
787 if (
pfs->m_lock.is_populated()) {
802 for (i = 0; i < PFS_PAGE_COUNT; i++) {
804 if (
page !=
nullptr) {
806 pfs_last =
page->get_last();
808 while (
pfs < pfs_last) {
822 for (i = 0; i < PFS_PAGE_COUNT; i++) {
824 if (
page !=
nullptr) {
826 pfs_last =
page->get_last();
828 while (
pfs < pfs_last) {
829 if (
pfs->m_lock.is_populated()) {
844 for (i = 0; i < PFS_PAGE_COUNT; i++) {
846 if (
page !=
nullptr) {
848 pfs_last =
page->get_last();
850 while (
pfs < pfs_last) {
859 assert(index <
m_max);
861 uint index_1 = index / PFS_PAGE_SIZE;
863 if (
page !=
nullptr) {
864 uint index_2 = index % PFS_PAGE_SIZE;
866 if (index_2 >=
page->m_max) {
872 if (
pfs->m_lock.is_populated()) {
881 if (index >=
m_max) {
886 uint index_1 = index / PFS_PAGE_SIZE;
889 if (
page ==
nullptr) {
894 uint index_2 = index % PFS_PAGE_SIZE;
896 if (index_2 >=
page->m_max) {
904 if (
pfs->m_lock.is_populated()) {
918 for (i = 0; i < PFS_PAGE_COUNT; i++) {
920 if (
page !=
nullptr) {
922 pfs_last =
page->get_last();
924 if ((
pfs <= unsafe) && (unsafe < pfs_last)) {
941 return PFS_PAGE_SIZE;
948 assert(index <=
m_max);
950 uint index_1 = index / PFS_PAGE_SIZE;
951 uint index_2 = index % PFS_PAGE_SIZE;
957 while (index_1 < PFS_PAGE_COUNT) {
960 if (
page ==
nullptr) {
961 index =
static_cast<uint
>(
m_max);
965 pfs_first =
page->get_first();
966 pfs = pfs_first + index_2;
967 pfs_last =
page->get_last();
969 while (
pfs < pfs_last) {
970 if (
pfs->m_lock.is_populated()) {
972 index_1 * PFS_PAGE_SIZE +
static_cast<uint
>(
pfs - pfs_first);
973 *found_index = found;
984 index =
static_cast<uint
>(
m_max);
1060 std::atomic<array_type *>
m_pages[PFS_PAGE_COUNT];
1074template <
class T,
class U,
class V>
1099template <
class T,
int page_size,
int page_count,
class U,
class V>
1132template <
class B,
int PFS_PARTITION_COUNT>
1147 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1153 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1161 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1168 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1176 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1188 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1198 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1206 assert(partition < PFS_PARTITION_COUNT);
1220 B::static_deallocate(safe_pfs);
1226 uint partition_index;
1228 unpack_index(user_index, &partition_index, &sub_index);
1233 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1239 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1245 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1251 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1257 uint partition_index;
1259 unpack_index(user_index, &partition_index, &sub_index);
1261 if (partition_index >= PFS_PARTITION_COUNT) {
1269 uint partition_index;
1271 unpack_index(user_index, &partition_index, &sub_index);
1273 if (partition_index >= PFS_PARTITION_COUNT) {
1285 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1287 if (safe !=
nullptr) {
1298 static_assert(PFS_PARTITION_COUNT <= (1 << 8),
"2^8 = 256 partitions max.");
1300 "2^24 = 16777216 max per partitioned buffer.");
1302 *user_index = (partition_index << 24) + sub_index;
1307 *partition_index = user_index >> 24;
1308 *sub_index = user_index & 0x00FFFFFF;
1312 uint *found_partition, uint *found_sub_index) {
1314 assert(partition_index < PFS_PARTITION_COUNT);
1316 while (partition_index < PFS_PARTITION_COUNT) {
1319 record = sub_iterator.scan_next(found_sub_index);
1321 *found_partition = partition_index;
1322 sub_index = *found_sub_index + 1;
1330 *found_partition = PFS_PARTITION_COUNT;
1331 *found_sub_index = 0;
1339template <
class B,
int PFS_PARTITION_COUNT>
1343 PFS_PARTITION_COUNT>;
1350 uint unused_partition;
1351 uint unused_sub_index;
1357 uint found_partition;
1358 uint found_sub_index;
1369 uint partition, uint sub_index)
Definition: pfs_buffer_container.h:1521
void free_array(PFS_account_array *array)
Definition: pfs_buffer_container.cc:235
int alloc_array(PFS_account_array *array)
Definition: pfs_buffer_container.cc:102
Definition: pfs_buffer_container.h:1511
PFS_stage_stat * m_instr_class_stages_array
Definition: pfs_buffer_container.h:1514
PFS_memory_shared_stat * m_instr_class_memory_array
Definition: pfs_buffer_container.h:1518
PFS_error_stat * m_instr_class_errors_array
Definition: pfs_buffer_container.h:1517
PFS_single_stat * m_instr_class_waits_array
Definition: pfs_buffer_container.h:1513
PFS_transaction_stat * m_instr_class_transactions_array
Definition: pfs_buffer_container.h:1516
PFS_statement_stat * m_instr_class_statements_array
Definition: pfs_buffer_container.h:1515
Definition: pfs_buffer_container.h:57
Definition: pfs_buffer_container.h:231
PFS_buffer_processor< T > processor_type
Definition: pfs_buffer_container.h:240
void apply(function_type fct)
Definition: pfs_buffer_container.h:295
void cleanup()
Definition: pfs_buffer_container.h:267
size_t get_memory() const
Definition: pfs_buffer_container.h:273
size_t get_row_count() const
Definition: pfs_buffer_container.h:269
size_t m_max
Definition: pfs_buffer_container.h:398
value_type * get(uint index)
Definition: pfs_buffer_container.h:339
size_t get_row_size() const
Definition: pfs_buffer_container.h:271
U array_type
Definition: pfs_buffer_container.h:236
int init(size_t max_size)
Definition: pfs_buffer_container.h:253
void apply(processor_type &proc)
Definition: pfs_buffer_container.h:317
value_type * get(uint index, bool *has_more)
Definition: pfs_buffer_container.h:350
PFS_buffer_const_iterator< T > const_iterator_type
Definition: pfs_buffer_container.h:238
void apply_all(function_type fct)
Definition: pfs_buffer_container.h:307
void(* function_type)(value_type *)
Definition: pfs_buffer_container.h:241
iterator_type iterate()
Definition: pfs_buffer_container.h:288
ulong m_lost
Definition: pfs_buffer_container.h:374
value_type * allocate(pfs_dirty_state *dirty_state)
Definition: pfs_buffer_container.h:275
void apply_all(processor_type &proc)
Definition: pfs_buffer_container.h:329
value_type * sanitize(value_type *unsafe)
Definition: pfs_buffer_container.h:360
V allocator_type
Definition: pfs_buffer_container.h:237
PFS_buffer_container(allocator_type *allocator)
Definition: pfs_buffer_container.h:243
PFS_buffer_iterator< T, U, V > iterator_type
Definition: pfs_buffer_container.h:239
void deallocate(value_type *pfs)
Definition: pfs_buffer_container.h:286
iterator_type iterate(uint index)
Definition: pfs_buffer_container.h:290
friend class PFS_buffer_iterator< T, U, V >
Definition: pfs_buffer_container.h:233
value_type * scan_next(uint &index, uint *found_index)
Definition: pfs_buffer_container.h:377
allocator_type * m_allocator
Definition: pfs_buffer_container.h:400
array_type m_array
Definition: pfs_buffer_container.h:399
T value_type
Definition: pfs_buffer_container.h:235
Definition: pfs_buffer_container.h:195
PFS_buffer_default_array< T > array_type
Definition: pfs_buffer_container.h:197
PFS_buffer_default_allocator(PFS_builtin_memory_class *klass)
Definition: pfs_buffer_container.h:199
int alloc_array(array_type *array)
Definition: pfs_buffer_container.h:202
void free_array(array_type *array)
Definition: pfs_buffer_container.h:218
PFS_builtin_memory_class * m_builtin_class
Definition: pfs_buffer_container.h:226
Definition: pfs_buffer_container.h:87
std::atomic< bool > m_full
Page full flag.
Definition: pfs_buffer_container.h:155
T * get_last()
Definition: pfs_buffer_container.h:144
std::atomic< T * > m_ptr
Array of values.
Definition: pfs_buffer_container.h:173
PFS_cacheline_atomic_size_t m_monotonic
Monotonic counter.
Definition: pfs_buffer_container.h:164
std::atomic< PFS_opaque_container * > m_container
Container.
Definition: pfs_buffer_container.h:191
std::atomic< size_t > m_max
Max number of items in the page.
Definition: pfs_buffer_container.h:182
value_type * allocate(pfs_dirty_state *dirty_state)
Definition: pfs_buffer_container.h:91
T value_type
Definition: pfs_buffer_container.h:89
T * get_first()
Definition: pfs_buffer_container.h:142
void deallocate(value_type *pfs)
Definition: pfs_buffer_container.h:134
Definition: pfs_buffer_container.h:1075
T value_type
Definition: pfs_buffer_container.h:1078
PFS_buffer_container< T, U, V > container_type
Definition: pfs_buffer_container.h:1079
container_type * m_container
Definition: pfs_buffer_container.h:1095
value_type * scan_next()
Definition: pfs_buffer_container.h:1082
value_type * scan_next(uint *found_index)
Definition: pfs_buffer_container.h:1087
PFS_buffer_iterator(container_type *container, uint index)
Definition: pfs_buffer_container.h:1092
uint m_index
Definition: pfs_buffer_container.h:1096
Definition: pfs_buffer_container.h:1126
virtual void operator()(T *element)=0
virtual ~PFS_buffer_processor()=default
Definition: pfs_buffer_container.h:406
void(* function_type)(value_type *)
Definition: pfs_buffer_container.h:432
static const size_t MAX_SIZE
Definition: pfs_buffer_container.h:434
int init(long max_size)
Definition: pfs_buffer_container.h:446
size_t get_row_size() const
Definition: pfs_buffer_container.h:530
std::atomic< size_t > m_last_page_size
Size of the last page.
Definition: pfs_buffer_container.h:1051
friend class PFS_buffer_scalable_iterator< T, PFS_PAGE_SIZE, PFS_PAGE_COUNT, U, V >
Definition: pfs_buffer_container.h:409
void apply(processor_type &proc)
Definition: pfs_buffer_container.h:816
void apply_all(function_type fct)
Definition: pfs_buffer_container.h:796
void apply_all(processor_type &proc)
Definition: pfs_buffer_container.h:838
void dirty_to_free(pfs_dirty_state *dirty_state, value_type *safe_pfs)
Definition: pfs_buffer_container.h:701
PFS_buffer_scalable_container< T, PFS_PAGE_SIZE, PFS_PAGE_COUNT, U, V > container_type
This container type.
Definition: pfs_buffer_container.h:427
value_type * sanitize(value_type *unsafe)
Definition: pfs_buffer_container.h:911
PFS_buffer_scalable_iterator< T, PFS_PAGE_SIZE, PFS_PAGE_COUNT, U, V > iterator_type
Definition: pfs_buffer_container.h:430
value_type * allocate(pfs_dirty_state *dirty_state)
Definition: pfs_buffer_container.h:534
native_mutex_t m_critical_section
Definition: pfs_buffer_container.h:1071
std::atomic< size_t > m_max
Max number of items in the buffer.
Definition: pfs_buffer_container.h:1015
PFS_cacheline_atomic_size_t m_max_page_index
Current page index.
Definition: pfs_buffer_container.h:1033
size_t get_memory()
Definition: pfs_buffer_container.h:532
iterator_type iterate()
Definition: pfs_buffer_container.h:763
uint get_page_logical_size(uint page_index)
Definition: pfs_buffer_container.h:939
void apply(function_type fct)
Definition: pfs_buffer_container.h:774
iterator_type iterate(uint index)
Definition: pfs_buffer_container.h:768
V allocator_type
Definition: pfs_buffer_container.h:424
U array_type
Type of pages in the buffer.
Definition: pfs_buffer_container.h:423
PFS_buffer_processor< T > processor_type
Definition: pfs_buffer_container.h:431
value_type * get(uint index, bool *has_more)
Definition: pfs_buffer_container.h:880
PFS_cacheline_atomic_size_t m_monotonic
Monotonic page counter.
Definition: pfs_buffer_container.h:1024
std::atomic< size_t > m_max_page_count
Max number of pages.
Definition: pfs_buffer_container.h:1042
void cleanup()
Definition: pfs_buffer_container.h:492
size_t get_row_count()
Definition: pfs_buffer_container.h:519
std::atomic< bool > m_initialized
Initialized full flag.
Definition: pfs_buffer_container.h:995
PFS_buffer_const_iterator< T > const_iterator_type
Definition: pfs_buffer_container.h:428
value_type * get(uint index)
Definition: pfs_buffer_container.h:858
static void static_deallocate(value_type *safe_pfs)
Definition: pfs_buffer_container.h:739
std::atomic< bool > m_full
Buffer full flag.
Definition: pfs_buffer_container.h:1006
T value_type
Type of elements in the buffer.
Definition: pfs_buffer_container.h:417
PFS_buffer_scalable_container(allocator_type *allocator)
Definition: pfs_buffer_container.h:436
value_type * scan_next(uint &index, uint *found_index)
Definition: pfs_buffer_container.h:947
std::atomic< allocator_type * > m_allocator
Buffer allocator.
Definition: pfs_buffer_container.h:1069
void deallocate(value_type *safe_pfs)
Definition: pfs_buffer_container.h:720
ulong m_lost
Definition: pfs_buffer_container.h:936
std::atomic< array_type * > m_pages[PFS_PAGE_COUNT]
Array of pages.
Definition: pfs_buffer_container.h:1060
Definition: pfs_buffer_container.h:1100
T value_type
Definition: pfs_buffer_container.h:1103
uint m_index
Definition: pfs_buffer_container.h:1122
value_type * scan_next(uint *found_index)
Definition: pfs_buffer_container.h:1113
value_type * scan_next()
Definition: pfs_buffer_container.h:1108
PFS_buffer_scalable_container< T, page_size, page_count, U, V > container_type
Definition: pfs_buffer_container.h:1105
PFS_buffer_scalable_iterator(container_type *container, uint index)
Definition: pfs_buffer_container.h:1118
container_type * m_container
Definition: pfs_buffer_container.h:1121
Definition: pfs_buffer_container.h:1549
int alloc_array(PFS_host_array *array)
Definition: pfs_buffer_container.cc:285
void free_array(PFS_host_array *array)
Definition: pfs_buffer_container.cc:418
Definition: pfs_buffer_container.h:1539
PFS_transaction_stat * m_instr_class_transactions_array
Definition: pfs_buffer_container.h:1544
PFS_memory_shared_stat * m_instr_class_memory_array
Definition: pfs_buffer_container.h:1546
PFS_error_stat * m_instr_class_errors_array
Definition: pfs_buffer_container.h:1545
PFS_single_stat * m_instr_class_waits_array
Definition: pfs_buffer_container.h:1541
PFS_stage_stat * m_instr_class_stages_array
Definition: pfs_buffer_container.h:1542
PFS_statement_stat * m_instr_class_statements_array
Definition: pfs_buffer_container.h:1543
Definition: pfs_buffer_container.h:1133
B::function_type function_type
Definition: pfs_buffer_container.h:1143
value_type * get(uint user_index, bool *has_more)
Definition: pfs_buffer_container.h:1268
B::allocator_type allocator_type
Definition: pfs_buffer_container.h:1138
void apply(processor_type &proc)
Definition: pfs_buffer_container.h:1244
void apply(function_type fct)
Definition: pfs_buffer_container.h:1232
B * m_partitions[PFS_PARTITION_COUNT]
Definition: pfs_buffer_container.h:1336
value_type * scan_next(uint &partition_index, uint &sub_index, uint *found_partition, uint *found_sub_index)
Definition: pfs_buffer_container.h:1311
iterator_type iterate()
Definition: pfs_buffer_container.h:1223
PFS_partitioned_buffer_scalable_iterator< B, PFS_PARTITION_COUNT > iterator_type
Definition: pfs_buffer_container.h:1140
size_t get_row_count() const
Definition: pfs_buffer_container.h:1173
void apply_all(function_type fct)
Definition: pfs_buffer_container.h:1238
value_type * sanitize(value_type *unsafe)
Definition: pfs_buffer_container.h:1282
B::value_type value_type
Definition: pfs_buffer_container.h:1137
static void unpack_index(uint user_index, uint *partition_index, uint *sub_index)
Definition: pfs_buffer_container.h:1305
PFS_partitioned_buffer_scalable_container(allocator_type *allocator)
Definition: pfs_buffer_container.h:1145
void deallocate(value_type *safe_pfs)
Definition: pfs_buffer_container.h:1211
int init(long max_size)
Definition: pfs_buffer_container.h:1158
~PFS_partitioned_buffer_scalable_container()
Definition: pfs_buffer_container.h:1152
B::iterator_type sub_iterator_type
Definition: pfs_buffer_container.h:1141
size_t get_memory() const
Definition: pfs_buffer_container.h:1185
iterator_type iterate(uint user_index)
Definition: pfs_buffer_container.h:1225
size_t get_row_size() const
Definition: pfs_buffer_container.h:1183
B::processor_type processor_type
Definition: pfs_buffer_container.h:1142
void apply_all(processor_type &proc)
Definition: pfs_buffer_container.h:1250
value_type * get(uint user_index)
Definition: pfs_buffer_container.h:1256
value_type * allocate(pfs_dirty_state *dirty_state, uint partition)
Definition: pfs_buffer_container.h:1205
void cleanup()
Definition: pfs_buffer_container.h:1167
long get_lost_counter()
Definition: pfs_buffer_container.h:1195
static void pack_index(uint partition_index, uint sub_index, uint *user_index)
Definition: pfs_buffer_container.h:1296
Definition: pfs_buffer_container.h:1340
uint m_sub_index
Definition: pfs_buffer_container.h:1376
PFS_partitioned_buffer_scalable_container< B, PFS_PARTITION_COUNT > container_type
Definition: pfs_buffer_container.h:1347
container_type * m_container
Definition: pfs_buffer_container.h:1374
B::value_type value_type
Definition: pfs_buffer_container.h:1345
value_type * scan_next(uint *found_user_index)
Definition: pfs_buffer_container.h:1356
value_type * scan_next()
Definition: pfs_buffer_container.h:1349
PFS_partitioned_buffer_scalable_iterator(container_type *container, uint partition, uint sub_index)
Definition: pfs_buffer_container.h:1368
uint m_partition
Definition: pfs_buffer_container.h:1375
Definition: pfs_buffer_container.h:1588
void free_array(PFS_thread_array *array)
Definition: pfs_buffer_container.cc:766
int alloc_array(PFS_thread_array *array)
Definition: pfs_buffer_container.cc:467
Definition: pfs_buffer_container.h:1566
PFS_statement_stat * m_instr_class_statements_array
Definition: pfs_buffer_container.h:1570
PFS_single_stat * m_instr_class_waits_array
Definition: pfs_buffer_container.h:1568
PFS_error_stat * m_instr_class_errors_array
Definition: pfs_buffer_container.h:1572
PFS_events_statements * m_statements_stack_array
Definition: pfs_buffer_container.h:1578
PFS_events_statements * m_statements_history_array
Definition: pfs_buffer_container.h:1577
PFS_stage_stat * m_instr_class_stages_array
Definition: pfs_buffer_container.h:1569
unsigned char * m_current_stmts_digest_token_array
Definition: pfs_buffer_container.h:1584
PFS_events_stages * m_stages_history_array
Definition: pfs_buffer_container.h:1576
char * m_current_stmts_text_array
Definition: pfs_buffer_container.h:1582
PFS_memory_safe_stat * m_instr_class_memory_array
Definition: pfs_buffer_container.h:1573
unsigned char * m_history_stmts_digest_token_array
Definition: pfs_buffer_container.h:1585
PFS_transaction_stat * m_instr_class_transactions_array
Definition: pfs_buffer_container.h:1571
char * m_session_connect_attrs_array
Definition: pfs_buffer_container.h:1580
PFS_events_waits * m_waits_history_array
Definition: pfs_buffer_container.h:1575
PFS_events_transactions * m_transactions_history_array
Definition: pfs_buffer_container.h:1579
char * m_history_stmts_text_array
Definition: pfs_buffer_container.h:1583
Definition: pfs_buffer_container.h:1615
void free_array(PFS_user_array *array)
Definition: pfs_buffer_container.cc:1013
int alloc_array(PFS_user_array *array)
Definition: pfs_buffer_container.cc:880
Definition: pfs_buffer_container.h:1605
PFS_statement_stat * m_instr_class_statements_array
Definition: pfs_buffer_container.h:1609
PFS_transaction_stat * m_instr_class_transactions_array
Definition: pfs_buffer_container.h:1610
PFS_stage_stat * m_instr_class_stages_array
Definition: pfs_buffer_container.h:1608
PFS_single_stat * m_instr_class_waits_array
Definition: pfs_buffer_container.h:1607
PFS_error_stat * m_instr_class_errors_array
Definition: pfs_buffer_container.h:1611
PFS_memory_shared_stat * m_instr_class_memory_array
Definition: pfs_buffer_container.h:1612
int page
Definition: ctype-mb.cc:1224
#define MY_ZEROFILL
Definition: my_sys.h:143
constexpr bool unlikely(bool expr)
Definition: my_compiler.h:58
Some integer typedefs for easier portability.
intptr_t intptr
Definition: my_inttypes.h:70
#define MYF(v)
Definition: my_inttypes.h:97
static int record
Definition: mysqltest.cc:193
uint16_t value_type
Definition: vt100.h:184
Definition: atomics_array.h:39
const ulint MAX_SIZE
The maximum size possible for an LOB.
Definition: lob0lob.h:84
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:1381
PFS_host_container global_host_container
PFS_buffer_scalable_container< PFS_socket, 256, 256 > PFS_socket_container
Definition: pfs_buffer_container.h:1419
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:1405
PFS_buffer_scalable_container< PFS_table, 1024, 1024 > PFS_table_container
Definition: pfs_buffer_container.h:1455
PFS_file_container::iterator_type PFS_file_iterator
Definition: pfs_buffer_container.h:1414
PFS_user_container::iterator_type PFS_user_iterator
Definition: pfs_buffer_container.h:1629
PFS_mutex_container::iterator_type PFS_mutex_iterator
Definition: pfs_buffer_container.h:1388
PFS_prepared_stmt_container::iterator_type PFS_prepared_stmt_iterator
Definition: pfs_buffer_container.h:1508
PFS_buffer_scalable_container< PFS_table_share, 4 *1024, 4 *1024 > PFS_table_share_container
Definition: pfs_buffer_container.h:1464
PFS_setup_object_container::iterator_type PFS_setup_object_iterator
Definition: pfs_buffer_container.h:1450
PFS_cond_container global_cond_container
PFS_buffer_scalable_container< PFS_prepared_stmt, 1024, 1024 > PFS_prepared_stmt_container
Definition: pfs_buffer_container.h:1504
PFS_buffer_scalable_container< PFS_table_share_lock, 4 *1024, 4 *1024 > PFS_table_share_lock_container
Definition: pfs_buffer_container.h:1484
PFS_socket_container::iterator_type PFS_socket_iterator
Definition: pfs_buffer_container.h:1423
PFS_table_share_container global_table_share_container
PFS_rwlock_container::iterator_type PFS_rwlock_iterator
Definition: pfs_buffer_container.h:1397
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:1597
PFS_host_container::iterator_type PFS_host_iterator
Definition: pfs_buffer_container.h:1563
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:1384
PFS_table_share_lock_container::iterator_type PFS_table_share_lock_iterator
Definition: pfs_buffer_container.h:1490
PFS_buffer_scalable_container< PFS_program, 1024, 1024 > PFS_program_container
Definition: pfs_buffer_container.h:1495
PFS_account_container::iterator_type PFS_account_iterator
Definition: pfs_buffer_container.h:1536
PFS_buffer_scalable_container< PFS_file, 4 *1024, 4 *1024 > PFS_file_container
Definition: pfs_buffer_container.h:1410
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:1479
PFS_mdl_container global_mdl_container
PFS_buffer_scalable_container< PFS_setup_actor, 128, 1024 > PFS_setup_actor_container
Definition: pfs_buffer_container.h:1437
PFS_rwlock_container global_rwlock_container
PFS_thread_container::iterator_type PFS_thread_iterator
Definition: pfs_buffer_container.h:1602
PFS_mdl_container::iterator_type PFS_mdl_iterator
Definition: pfs_buffer_container.h:1432
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:1459
PFS_buffer_scalable_container< PFS_host, 128, 128, PFS_host_array, PFS_host_allocator > PFS_host_container
Definition: pfs_buffer_container.h:1558
PFS_account_container global_account_container
PFS_buffer_scalable_container< PFS_cond, 256, 256 > PFS_cond_container
Definition: pfs_buffer_container.h:1401
PFS_setup_actor_container::iterator_type PFS_setup_actor_iterator
Definition: pfs_buffer_container.h:1441
PFS_program_container::iterator_type PFS_program_iterator
Definition: pfs_buffer_container.h:1499
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:1624
PFS_buffer_scalable_container< PFS_table_share_index, 8 *1024, 8 *1024 > PFS_table_share_index_container
Definition: pfs_buffer_container.h:1473
PFS_buffer_scalable_container< PFS_setup_object, 128, 1024 > PFS_setup_object_container
Definition: pfs_buffer_container.h:1446
PFS_table_share_container::iterator_type PFS_table_share_iterator
Definition: pfs_buffer_container.h:1468
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:1428
PFS_buffer_scalable_container< PFS_rwlock, 1024, 1024 > PFS_rwlock_container
Definition: pfs_buffer_container.h:1393
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:1530
PFS_builtin_memory_class builtin_memory_scalable_buffer
Definition: pfs_builtin_memory.cc:129
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:135
#define PFS_FREE_ARRAY(k, n, s, p)
Helper, to free an array of structures.
Definition: pfs_global.h:152
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:34
static const LEX_CSTRING pfs
Definition: sql_show_processlist.cc:66
Per account statistics.
Definition: pfs_account.h:67
Definition: pfs_builtin_memory.h:39
void count_alloc(size_t size)
Definition: pfs_builtin_memory.h:43
void count_free(size_t size)
Definition: pfs_builtin_memory.h:45
An atomic size_t variable, guaranteed to be alone in a CPU cache line.
Definition: pfs_global.h:99
std::atomic< size_t > m_size_t
Definition: pfs_global.h:100
Statistics for all server errors.
Definition: pfs_stat.h:557
A stage record.
Definition: pfs_events_stages.h:45
A statement record.
Definition: pfs_events_statements.h:47
A transaction record.
Definition: pfs_events_transactions.h:86
A wait event record.
Definition: pfs_events_waits.h:69
Per host statistics.
Definition: pfs_host.h:64
Memory statistics.
Definition: pfs_stat.h:913
Definition: pfs_stat.h:937
Single statistic.
Definition: pfs_stat.h:52
Statistics for stage usage.
Definition: pfs_stat.h:323
Statistics for statement usage.
Definition: pfs_stat.h:376
Instrumented thread implementation.
Definition: pfs_instr.h:375
Statistics for transaction usage.
Definition: pfs_stat.h:459
Per user statistics.
Definition: pfs_user.h:63
Definition: pfs_lock.h:77
static int native_mutex_unlock(native_mutex_t *mutex)
Definition: thr_mutex.h:115
static int native_mutex_destroy(native_mutex_t *mutex)
Definition: thr_mutex.h:124
static int native_mutex_lock(native_mutex_t *mutex)
Definition: thr_mutex.h:90
static int native_mutex_init(native_mutex_t *mutex, const native_mutexattr_t *attr)
Definition: thr_mutex.h:79
pthread_mutex_t native_mutex_t
Definition: thr_mutex_bits.h:55
#define NULL
Definition: types.h:55