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;
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) {
365 if ((
pfs <= unsafe) && (unsafe < pfs_last)) {
379 assert(index <=
m_max);
385 while (
pfs < pfs_last) {
386 if (
pfs->m_lock.is_populated()) {
388 *found_index = found;
404template <
class T,
int PFS_PAGE_SIZE,
int PFS_PAGE_COUNT,
435 static const size_t MAX_SIZE = PFS_PAGE_SIZE * PFS_PAGE_COUNT;
447 m_max = PFS_PAGE_COUNT * PFS_PAGE_SIZE;
454 for (i = 0; i < PFS_PAGE_COUNT; i++) {
461 }
else if (max_size > 0) {
462 if (max_size % PFS_PAGE_SIZE == 0) {
500 for (i = 0; i < PFS_PAGE_COUNT; i++) {
502 if (
page !=
nullptr) {
503 allocator->free_array(
page);
517 size_t result = page_count * PFS_PAGE_SIZE;
538 size_t monotonic_max;
539 size_t current_page_count;
548 if (current_page_count != 0) {
550 monotonic_max = monotonic + current_page_count;
552 if (
unlikely(monotonic >= monotonic_max)) {
560 monotonic_max = current_page_count;
563 while (monotonic < monotonic_max) {
568 index = monotonic % current_page_count;
573 if (array !=
nullptr) {
574 pfs = array->allocate(dirty_state);
575 if (
pfs !=
nullptr) {
577 pfs->m_page =
reinterpret_cast<PFS_opaque_container_page *
>(array);
609 array =
m_pages[current_page_count].load();
611 if (array ==
nullptr) {
645 array =
m_pages[current_page_count].load();
647 if (array ==
nullptr) {
656 int rc = allocator->alloc_array(array);
658 allocator->free_array(array);
667 array->m_container =
reinterpret_cast<PFS_opaque_container *
>(
this);
670 m_pages[current_page_count].store(array);
683 assert(array !=
nullptr);
684 pfs = array->allocate(dirty_state);
685 if (
pfs !=
nullptr) {
687 pfs->m_page =
reinterpret_cast<PFS_opaque_container_page *
>(array);
691 current_page_count++;
701 PFS_opaque_container_page *opaque_page = safe_pfs->m_page;
705 safe_pfs->m_lock.allocated_to_free();
708 if (
page->m_full.load()) {
709 page->m_full.store(
false);
720 PFS_opaque_container_page *opaque_page = safe_pfs->m_page;
724 safe_pfs->m_lock.allocated_to_free();
727 if (
page->m_full.load()) {
728 page->m_full.store(
false);
732 PFS_opaque_container *opaque_container =
page->m_container;
748 assert(index <=
m_max);
759 for (i = 0; i < PFS_PAGE_COUNT; i++) {
761 if (
page !=
nullptr) {
763 pfs_last =
page->get_last();
765 while (
pfs < pfs_last) {
766 if (
pfs->m_lock.is_populated()) {
781 for (i = 0; i < PFS_PAGE_COUNT; i++) {
783 if (
page !=
nullptr) {
785 pfs_last =
page->get_last();
787 while (
pfs < pfs_last) {
801 for (i = 0; i < PFS_PAGE_COUNT; i++) {
803 if (
page !=
nullptr) {
805 pfs_last =
page->get_last();
807 while (
pfs < pfs_last) {
808 if (
pfs->m_lock.is_populated()) {
823 for (i = 0; i < PFS_PAGE_COUNT; i++) {
827 pfs_last =
page->get_last();
829 while (
pfs < pfs_last) {
838 assert(index <
m_max);
840 uint index_1 = index / PFS_PAGE_SIZE;
842 if (
page !=
nullptr) {
843 uint index_2 = index % PFS_PAGE_SIZE;
845 if (index_2 >=
page->m_max) {
851 if (
pfs->m_lock.is_populated()) {
860 if (index >=
m_max) {
865 uint index_1 = index / PFS_PAGE_SIZE;
868 if (
page ==
nullptr) {
873 uint index_2 = index % PFS_PAGE_SIZE;
875 if (index_2 >=
page->m_max) {
883 if (
pfs->m_lock.is_populated()) {
897 for (i = 0; i < PFS_PAGE_COUNT; i++) {
899 if (
page !=
nullptr) {
901 pfs_last =
page->get_last();
903 if ((
pfs <= unsafe) && (unsafe < pfs_last)) {
920 return PFS_PAGE_SIZE;
927 assert(index <=
m_max);
929 uint index_1 = index / PFS_PAGE_SIZE;
930 uint index_2 = index % PFS_PAGE_SIZE;
936 while (index_1 < PFS_PAGE_COUNT) {
939 if (
page ==
nullptr) {
944 pfs_first =
page->get_first();
945 pfs = pfs_first + index_2;
946 pfs_last =
page->get_last();
948 while (
pfs < pfs_last) {
949 if (
pfs->m_lock.is_populated()) {
951 index_1 * PFS_PAGE_SIZE +
static_cast<uint>(
pfs - pfs_first);
952 *found_index = found;
1039 std::atomic<array_type *>
m_pages[PFS_PAGE_COUNT];
1053template <
class T,
class U,
class V>
1078template <
class T,
int page_size,
int page_count,
class U,
class V>
1111template <
class B,
int PFS_PARTITION_COUNT>
1126 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1132 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1140 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1147 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1155 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1167 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1177 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1185 assert(partition < PFS_PARTITION_COUNT);
1199 B::static_deallocate(safe_pfs);
1205 uint partition_index;
1207 unpack_index(user_index, &partition_index, &sub_index);
1212 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1218 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1224 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1230 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1236 uint partition_index;
1238 unpack_index(user_index, &partition_index, &sub_index);
1240 if (partition_index >= PFS_PARTITION_COUNT) {
1248 uint partition_index;
1250 unpack_index(user_index, &partition_index, &sub_index);
1252 if (partition_index >= PFS_PARTITION_COUNT) {
1264 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1266 if (safe !=
nullptr) {
1277 static_assert(PFS_PARTITION_COUNT <= (1 << 8),
"2^8 = 256 partitions max.");
1279 "2^24 = 16777216 max per partitioned buffer.");
1281 *user_index = (partition_index << 24) + sub_index;
1286 *partition_index = user_index >> 24;
1287 *sub_index = user_index & 0x00FFFFFF;
1291 uint *found_partition,
uint *found_sub_index) {
1293 assert(partition_index < PFS_PARTITION_COUNT);
1295 while (partition_index < PFS_PARTITION_COUNT) {
1298 record = sub_iterator.scan_next(found_sub_index);
1300 *found_partition = partition_index;
1301 sub_index = *found_sub_index + 1;
1309 *found_partition = PFS_PARTITION_COUNT;
1310 *found_sub_index = 0;
1318template <
class B,
int PFS_PARTITION_COUNT>
1322 PFS_PARTITION_COUNT>;
1329 uint unused_partition;
1330 uint unused_sub_index;
1336 uint found_partition;
1337 uint found_sub_index;
Definition: pfs_buffer_container.h:1500
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:1490
PFS_stage_stat * m_instr_class_stages_array
Definition: pfs_buffer_container.h:1493
PFS_memory_shared_stat * m_instr_class_memory_array
Definition: pfs_buffer_container.h:1497
PFS_error_stat * m_instr_class_errors_array
Definition: pfs_buffer_container.h:1496
PFS_single_stat * m_instr_class_waits_array
Definition: pfs_buffer_container.h:1492
PFS_transaction_stat * m_instr_class_transactions_array
Definition: pfs_buffer_container.h:1495
PFS_statement_stat * m_instr_class_statements_array
Definition: pfs_buffer_container.h:1494
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:399
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:375
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:378
allocator_type * m_allocator
Definition: pfs_buffer_container.h:401
array_type m_array
Definition: pfs_buffer_container.h:400
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:1054
T value_type
Definition: pfs_buffer_container.h:1057
PFS_buffer_container< T, U, V > container_type
Definition: pfs_buffer_container.h:1058
container_type * m_container
Definition: pfs_buffer_container.h:1074
value_type * scan_next()
Definition: pfs_buffer_container.h:1061
value_type * scan_next(uint *found_index)
Definition: pfs_buffer_container.h:1066
PFS_buffer_iterator(container_type *container, uint index)
Definition: pfs_buffer_container.h:1071
uint m_index
Definition: pfs_buffer_container.h:1075
Definition: pfs_buffer_container.h:1105
virtual void operator()(T *element)=0
virtual ~PFS_buffer_processor()=default
Definition: pfs_buffer_container.h:407
void(* function_type)(value_type *)
Definition: pfs_buffer_container.h:433
static const size_t MAX_SIZE
Definition: pfs_buffer_container.h:435
int init(long max_size)
Definition: pfs_buffer_container.h:442
size_t get_row_size() const
Definition: pfs_buffer_container.h:526
std::atomic< size_t > m_last_page_size
Size of the last page.
Definition: pfs_buffer_container.h:1030
friend class PFS_buffer_scalable_iterator< T, PFS_PAGE_SIZE, PFS_PAGE_COUNT, U, V >
Definition: pfs_buffer_container.h:410
void apply(processor_type &proc)
Definition: pfs_buffer_container.h:795
void apply_all(function_type fct)
Definition: pfs_buffer_container.h:775
void apply_all(processor_type &proc)
Definition: pfs_buffer_container.h:817
PFS_buffer_scalable_container< T, PFS_PAGE_SIZE, PFS_PAGE_COUNT, U, V > container_type
This container type.
Definition: pfs_buffer_container.h:428
value_type * sanitize(value_type *unsafe)
Definition: pfs_buffer_container.h:890
PFS_buffer_scalable_iterator< T, PFS_PAGE_SIZE, PFS_PAGE_COUNT, U, V > iterator_type
Definition: pfs_buffer_container.h:431
value_type * allocate(pfs_dirty_state *dirty_state)
Definition: pfs_buffer_container.h:530
native_mutex_t m_critical_section
Definition: pfs_buffer_container.h:1050
std::atomic< size_t > m_max
Max number of items in the buffer.
Definition: pfs_buffer_container.h:994
PFS_cacheline_atomic_size_t m_max_page_index
Current page index.
Definition: pfs_buffer_container.h:1012
size_t get_memory()
Definition: pfs_buffer_container.h:528
iterator_type iterate()
Definition: pfs_buffer_container.h:742
uint get_page_logical_size(uint page_index)
Definition: pfs_buffer_container.h:918
void apply(function_type fct)
Definition: pfs_buffer_container.h:753
iterator_type iterate(uint index)
Definition: pfs_buffer_container.h:747
V allocator_type
Definition: pfs_buffer_container.h:425
U array_type
Type of pages in the buffer.
Definition: pfs_buffer_container.h:424
PFS_buffer_processor< T > processor_type
Definition: pfs_buffer_container.h:432
value_type * get(uint index, bool *has_more)
Definition: pfs_buffer_container.h:859
PFS_cacheline_atomic_size_t m_monotonic
Monotonic page counter.
Definition: pfs_buffer_container.h:1003
std::atomic< size_t > m_max_page_count
Max number of pages.
Definition: pfs_buffer_container.h:1021
void cleanup()
Definition: pfs_buffer_container.h:488
size_t get_row_count()
Definition: pfs_buffer_container.h:515
std::atomic< bool > m_initialized
Initialized full flag.
Definition: pfs_buffer_container.h:974
PFS_buffer_const_iterator< T > const_iterator_type
Definition: pfs_buffer_container.h:429
value_type * get(uint index)
Definition: pfs_buffer_container.h:837
static void static_deallocate(value_type *safe_pfs)
Definition: pfs_buffer_container.h:718
std::atomic< bool > m_full
Buffer full flag.
Definition: pfs_buffer_container.h:985
T value_type
Type of elements in the buffer.
Definition: pfs_buffer_container.h:418
PFS_buffer_scalable_container(allocator_type *allocator)
Definition: pfs_buffer_container.h:437
value_type * scan_next(uint &index, uint *found_index)
Definition: pfs_buffer_container.h:926
std::atomic< allocator_type * > m_allocator
Buffer allocator.
Definition: pfs_buffer_container.h:1048
void deallocate(value_type *safe_pfs)
Definition: pfs_buffer_container.h:699
ulong m_lost
Definition: pfs_buffer_container.h:915
std::atomic< array_type * > m_pages[PFS_PAGE_COUNT]
Array of pages.
Definition: pfs_buffer_container.h:1039
Definition: pfs_buffer_container.h:1079
T value_type
Definition: pfs_buffer_container.h:1082
uint m_index
Definition: pfs_buffer_container.h:1101
value_type * scan_next(uint *found_index)
Definition: pfs_buffer_container.h:1092
value_type * scan_next()
Definition: pfs_buffer_container.h:1087
PFS_buffer_scalable_container< T, page_size, page_count, U, V > container_type
Definition: pfs_buffer_container.h:1084
PFS_buffer_scalable_iterator(container_type *container, uint index)
Definition: pfs_buffer_container.h:1097
container_type * m_container
Definition: pfs_buffer_container.h:1100
Definition: pfs_buffer_container.h:1528
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:1518
PFS_transaction_stat * m_instr_class_transactions_array
Definition: pfs_buffer_container.h:1523
PFS_memory_shared_stat * m_instr_class_memory_array
Definition: pfs_buffer_container.h:1525
PFS_error_stat * m_instr_class_errors_array
Definition: pfs_buffer_container.h:1524
PFS_single_stat * m_instr_class_waits_array
Definition: pfs_buffer_container.h:1520
PFS_stage_stat * m_instr_class_stages_array
Definition: pfs_buffer_container.h:1521
PFS_statement_stat * m_instr_class_statements_array
Definition: pfs_buffer_container.h:1522
Definition: pfs_buffer_container.h:1112
B::function_type function_type
Definition: pfs_buffer_container.h:1122
value_type * get(uint user_index, bool *has_more)
Definition: pfs_buffer_container.h:1247
B::allocator_type allocator_type
Definition: pfs_buffer_container.h:1117
void apply(processor_type &proc)
Definition: pfs_buffer_container.h:1223
void apply(function_type fct)
Definition: pfs_buffer_container.h:1211
B * m_partitions[PFS_PARTITION_COUNT]
Definition: pfs_buffer_container.h:1315
value_type * scan_next(uint &partition_index, uint &sub_index, uint *found_partition, uint *found_sub_index)
Definition: pfs_buffer_container.h:1290
iterator_type iterate()
Definition: pfs_buffer_container.h:1202
PFS_partitioned_buffer_scalable_iterator< B, PFS_PARTITION_COUNT > iterator_type
Definition: pfs_buffer_container.h:1119
size_t get_row_count() const
Definition: pfs_buffer_container.h:1152
void apply_all(function_type fct)
Definition: pfs_buffer_container.h:1217
value_type * sanitize(value_type *unsafe)
Definition: pfs_buffer_container.h:1261
B::value_type value_type
Definition: pfs_buffer_container.h:1116
static void unpack_index(uint user_index, uint *partition_index, uint *sub_index)
Definition: pfs_buffer_container.h:1284
PFS_partitioned_buffer_scalable_container(allocator_type *allocator)
Definition: pfs_buffer_container.h:1124
void deallocate(value_type *safe_pfs)
Definition: pfs_buffer_container.h:1190
int init(long max_size)
Definition: pfs_buffer_container.h:1137
~PFS_partitioned_buffer_scalable_container()
Definition: pfs_buffer_container.h:1131
B::iterator_type sub_iterator_type
Definition: pfs_buffer_container.h:1120
size_t get_memory() const
Definition: pfs_buffer_container.h:1164
iterator_type iterate(uint user_index)
Definition: pfs_buffer_container.h:1204
size_t get_row_size() const
Definition: pfs_buffer_container.h:1162
B::processor_type processor_type
Definition: pfs_buffer_container.h:1121
void apply_all(processor_type &proc)
Definition: pfs_buffer_container.h:1229
value_type * get(uint user_index)
Definition: pfs_buffer_container.h:1235
value_type * allocate(pfs_dirty_state *dirty_state, uint partition)
Definition: pfs_buffer_container.h:1184
void cleanup()
Definition: pfs_buffer_container.h:1146
long get_lost_counter()
Definition: pfs_buffer_container.h:1174
static void pack_index(uint partition_index, uint sub_index, uint *user_index)
Definition: pfs_buffer_container.h:1275
Definition: pfs_buffer_container.h:1319
uint m_sub_index
Definition: pfs_buffer_container.h:1355
PFS_partitioned_buffer_scalable_container< B, PFS_PARTITION_COUNT > container_type
Definition: pfs_buffer_container.h:1326
container_type * m_container
Definition: pfs_buffer_container.h:1353
B::value_type value_type
Definition: pfs_buffer_container.h:1324
value_type * scan_next(uint *found_user_index)
Definition: pfs_buffer_container.h:1335
value_type * scan_next()
Definition: pfs_buffer_container.h:1328
PFS_partitioned_buffer_scalable_iterator(container_type *container, uint partition, uint sub_index)
Definition: pfs_buffer_container.h:1347
uint m_partition
Definition: pfs_buffer_container.h:1354
Definition: pfs_buffer_container.h:1567
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:1545
PFS_statement_stat * m_instr_class_statements_array
Definition: pfs_buffer_container.h:1549
PFS_single_stat * m_instr_class_waits_array
Definition: pfs_buffer_container.h:1547
PFS_error_stat * m_instr_class_errors_array
Definition: pfs_buffer_container.h:1551
PFS_events_statements * m_statements_stack_array
Definition: pfs_buffer_container.h:1557
PFS_events_statements * m_statements_history_array
Definition: pfs_buffer_container.h:1556
PFS_stage_stat * m_instr_class_stages_array
Definition: pfs_buffer_container.h:1548
unsigned char * m_current_stmts_digest_token_array
Definition: pfs_buffer_container.h:1563
PFS_events_stages * m_stages_history_array
Definition: pfs_buffer_container.h:1555
char * m_current_stmts_text_array
Definition: pfs_buffer_container.h:1561
PFS_memory_safe_stat * m_instr_class_memory_array
Definition: pfs_buffer_container.h:1552
unsigned char * m_history_stmts_digest_token_array
Definition: pfs_buffer_container.h:1564
PFS_transaction_stat * m_instr_class_transactions_array
Definition: pfs_buffer_container.h:1550
char * m_session_connect_attrs_array
Definition: pfs_buffer_container.h:1559
PFS_events_waits * m_waits_history_array
Definition: pfs_buffer_container.h:1554
PFS_events_transactions * m_transactions_history_array
Definition: pfs_buffer_container.h:1558
char * m_history_stmts_text_array
Definition: pfs_buffer_container.h:1562
Definition: pfs_buffer_container.h:1594
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:1584
PFS_statement_stat * m_instr_class_statements_array
Definition: pfs_buffer_container.h:1588
PFS_transaction_stat * m_instr_class_transactions_array
Definition: pfs_buffer_container.h:1589
PFS_stage_stat * m_instr_class_stages_array
Definition: pfs_buffer_container.h:1587
PFS_single_stat * m_instr_class_waits_array
Definition: pfs_buffer_container.h:1586
PFS_error_stat * m_instr_class_errors_array
Definition: pfs_buffer_container.h:1590
PFS_memory_shared_stat * m_instr_class_memory_array
Definition: pfs_buffer_container.h:1591
int page
Definition: ctype-mb.cc:1236
#define MY_ZEROFILL
Definition: my_sys.h:136
constexpr bool unlikely(bool expr)
Definition: my_compiler.h:56
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:188
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:1360
PFS_host_container global_host_container
PFS_buffer_scalable_container< PFS_socket, 256, 256 > PFS_socket_container
Definition: pfs_buffer_container.h:1398
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:1384
PFS_buffer_scalable_container< PFS_table, 1024, 1024 > PFS_table_container
Definition: pfs_buffer_container.h:1434
PFS_file_container::iterator_type PFS_file_iterator
Definition: pfs_buffer_container.h:1393
PFS_user_container::iterator_type PFS_user_iterator
Definition: pfs_buffer_container.h:1608
PFS_mutex_container::iterator_type PFS_mutex_iterator
Definition: pfs_buffer_container.h:1367
PFS_prepared_stmt_container::iterator_type PFS_prepared_stmt_iterator
Definition: pfs_buffer_container.h:1487
PFS_buffer_scalable_container< PFS_table_share, 4 *1024, 4 *1024 > PFS_table_share_container
Definition: pfs_buffer_container.h:1443
PFS_setup_object_container::iterator_type PFS_setup_object_iterator
Definition: pfs_buffer_container.h:1429
PFS_cond_container global_cond_container
PFS_buffer_scalable_container< PFS_prepared_stmt, 1024, 1024 > PFS_prepared_stmt_container
Definition: pfs_buffer_container.h:1483
PFS_buffer_scalable_container< PFS_table_share_lock, 4 *1024, 4 *1024 > PFS_table_share_lock_container
Definition: pfs_buffer_container.h:1463
PFS_socket_container::iterator_type PFS_socket_iterator
Definition: pfs_buffer_container.h:1402
PFS_table_share_container global_table_share_container
PFS_rwlock_container::iterator_type PFS_rwlock_iterator
Definition: pfs_buffer_container.h:1376
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:1576
PFS_host_container::iterator_type PFS_host_iterator
Definition: pfs_buffer_container.h:1542
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:1363
PFS_table_share_lock_container::iterator_type PFS_table_share_lock_iterator
Definition: pfs_buffer_container.h:1469
PFS_buffer_scalable_container< PFS_program, 1024, 1024 > PFS_program_container
Definition: pfs_buffer_container.h:1474
PFS_account_container::iterator_type PFS_account_iterator
Definition: pfs_buffer_container.h:1515
PFS_buffer_scalable_container< PFS_file, 4 *1024, 4 *1024 > PFS_file_container
Definition: pfs_buffer_container.h:1389
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:1458
PFS_mdl_container global_mdl_container
PFS_buffer_scalable_container< PFS_setup_actor, 128, 1024 > PFS_setup_actor_container
Definition: pfs_buffer_container.h:1416
PFS_rwlock_container global_rwlock_container
PFS_thread_container::iterator_type PFS_thread_iterator
Definition: pfs_buffer_container.h:1581
PFS_mdl_container::iterator_type PFS_mdl_iterator
Definition: pfs_buffer_container.h:1411
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:1438
PFS_buffer_scalable_container< PFS_host, 128, 128, PFS_host_array, PFS_host_allocator > PFS_host_container
Definition: pfs_buffer_container.h:1537
PFS_account_container global_account_container
PFS_buffer_scalable_container< PFS_cond, 256, 256 > PFS_cond_container
Definition: pfs_buffer_container.h:1380
PFS_setup_actor_container::iterator_type PFS_setup_actor_iterator
Definition: pfs_buffer_container.h:1420
PFS_program_container::iterator_type PFS_program_iterator
Definition: pfs_buffer_container.h:1478
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:1603
PFS_buffer_scalable_container< PFS_table_share_index, 8 *1024, 8 *1024 > PFS_table_share_index_container
Definition: pfs_buffer_container.h:1452
PFS_buffer_scalable_container< PFS_setup_object, 128, 1024 > PFS_setup_object_container
Definition: pfs_buffer_container.h:1425
PFS_table_share_container::iterator_type PFS_table_share_iterator
Definition: pfs_buffer_container.h:1447
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:1407
PFS_buffer_scalable_container< PFS_rwlock, 1024, 1024 > PFS_rwlock_container
Definition: pfs_buffer_container.h:1372
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:1509
PFS_builtin_memory_class builtin_memory_scalable_buffer
Definition: pfs_builtin_memory.cc:123
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:85
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:373
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
unsigned int uint
Definition: uca9-dump.cc:75