24#ifndef PFS_BUFFER_CONTAINER_H
25#define PFS_BUFFER_CONTAINER_H
70class PFS_opaque_container_page;
71class PFS_opaque_container;
81template <
class T,
class U,
class V>
84template <
class T,
int PFS_PAGE_SIZE,
int PFS_PAGE_COUNT,
class U,
class V>
93template <
class T,
class U,
class V>
96template <
class T,
int PFS_PAGE_SIZE,
int PFS_PAGE_COUNT,
class U,
class V>
99template <
class B,
int COUNT>
102template <
class B,
int COUNT>
115 size_t monotonic_max;
128 monotonic_max = monotonic +
max;
130 if (
unlikely(monotonic >= monotonic_max)) {
141 while (monotonic < monotonic_max) {
145 if (
pfs->m_lock.free_to_dirty(dirty_state)) {
159 pfs->m_lock.allocated_to_free();
227 array->
m_ptr =
nullptr;
231 if (array->
m_max > 0) {
234 if (array->
m_ptr ==
nullptr) {
243 assert(array->
m_max > 0);
246 array->
m_ptr =
nullptr;
253template <
class T,
class U = PFS_buffer_default_array<T>,
254 class V = PFS_buffer_default_allocator<T>>
271 m_array.m_monotonic.m_size_t = 0;
303 if (
pfs ==
nullptr) {
323 while (
pfs < pfs_last) {
324 if (
pfs->m_lock.is_populated()) {
335 while (
pfs < pfs_last) {
345 while (
pfs < pfs_last) {
346 if (
pfs->m_lock.is_populated()) {
357 while (
pfs < pfs_last) {
367 if (
pfs->m_lock.is_populated()) {
388 if ((
pfs <= unsafe) && (unsafe < pfs_last)) {
408 while (
pfs < pfs_last) {
409 if (
pfs->m_lock.is_populated()) {
410 const uint found =
pfs - pfs_first;
411 *found_index = found;
427template <
class T,
int PFS_PAGE_SIZE,
int PFS_PAGE_COUNT,
433 "pfs_object_id field is only 16 bits");
435 "pfs_page_id field is only 16 bits");
463 static const size_t MAX_SIZE = PFS_PAGE_SIZE * PFS_PAGE_COUNT;
470 m_max = PFS_PAGE_COUNT * PFS_PAGE_SIZE;
481 m_max = PFS_PAGE_COUNT * PFS_PAGE_SIZE;
488 for (i = 0; i < PFS_PAGE_COUNT; i++) {
495 }
else if (max_size > 0) {
496 if (max_size % PFS_PAGE_SIZE == 0) {
534 for (i = 0; i < PFS_PAGE_COUNT; i++) {
536 if (
page !=
nullptr) {
537 allocator->free_array(
page);
551 size_t result = page_count * PFS_PAGE_SIZE;
571 size_t current_page_count;
580 if (current_page_count != 0) {
582 size_t monotonic_max = monotonic + current_page_count;
584 if (
unlikely(monotonic >= monotonic_max)) {
592 monotonic_max = current_page_count;
595 while (monotonic < monotonic_max) {
600 index = monotonic % current_page_count;
605 if (array !=
nullptr) {
607 if (
pfs !=
nullptr) {
609 pfs->m_page =
reinterpret_cast<PFS_opaque_container_page *
>(array);
641 array =
m_pages[current_page_count].load();
643 if (array ==
nullptr) {
677 array =
m_pages[current_page_count].load();
679 if (array ==
nullptr) {
688 const int rc = allocator->alloc_array(array);
690 allocator->free_array(array);
699 array->m_container =
reinterpret_cast<PFS_opaque_container *
>(
this);
702 m_pages[current_page_count].store(array);
715 assert(array !=
nullptr);
717 array->allocate(dirty_state,
m_container_id, current_page_count,
id);
718 if (
pfs !=
nullptr) {
720 pfs->m_page =
reinterpret_cast<PFS_opaque_container_page *
>(array);
724 current_page_count++;
734 PFS_opaque_container_page *opaque_page = safe_pfs->m_page;
738 safe_pfs->m_lock.dirty_to_free(dirty_state);
741 if (
page->m_full.load()) {
742 page->m_full.store(
false);
753 PFS_opaque_container_page *opaque_page = safe_pfs->m_page;
757 safe_pfs->m_lock.allocated_to_free();
760 if (
page->m_full.load()) {
761 page->m_full.store(
false);
772 PFS_opaque_container_page *opaque_page = safe_pfs->m_page;
776 safe_pfs->m_lock.allocated_to_free();
779 if (
page->m_full.load()) {
780 page->m_full.store(
false);
784 PFS_opaque_container *opaque_container =
page->m_container;
811 for (i = 0; i < PFS_PAGE_COUNT; i++) {
813 if (
page !=
nullptr) {
815 pfs_last =
page->get_last();
817 while (
pfs < pfs_last) {
818 if (
pfs->m_lock.is_populated()) {
833 for (i = 0; i < PFS_PAGE_COUNT; i++) {
835 if (
page !=
nullptr) {
837 pfs_last =
page->get_last();
839 while (
pfs < pfs_last) {
853 for (i = 0; i < PFS_PAGE_COUNT; i++) {
855 if (
page !=
nullptr) {
857 pfs_last =
page->get_last();
859 while (
pfs < pfs_last) {
860 if (
pfs->m_lock.is_populated()) {
875 for (i = 0; i < PFS_PAGE_COUNT; i++) {
877 if (
page !=
nullptr) {
879 pfs_last =
page->get_last();
881 while (
pfs < pfs_last) {
892 uint index_1 =
index / PFS_PAGE_SIZE;
894 if (
page !=
nullptr) {
895 uint index_2 =
index % PFS_PAGE_SIZE;
897 if (index_2 >=
page->m_max) {
903 if (
pfs->m_lock.is_populated()) {
917 uint index_1 =
index / PFS_PAGE_SIZE;
920 if (
page ==
nullptr) {
925 uint index_2 =
index % PFS_PAGE_SIZE;
927 if (index_2 >=
page->m_max) {
935 if (
pfs->m_lock.is_populated()) {
949 for (i = 0; i < PFS_PAGE_COUNT; i++) {
951 if (
page !=
nullptr) {
953 pfs_last =
page->get_last();
955 if ((
pfs <= unsafe) && (unsafe < pfs_last)) {
972 return PFS_PAGE_SIZE;
981 uint index_1 =
index / PFS_PAGE_SIZE;
982 uint index_2 =
index % PFS_PAGE_SIZE;
988 while (index_1 < PFS_PAGE_COUNT) {
991 if (
page ==
nullptr) {
996 pfs_first =
page->get_first();
997 pfs = pfs_first + index_2;
998 pfs_last =
page->get_last();
1000 while (
pfs < pfs_last) {
1001 if (
pfs->m_lock.is_populated()) {
1003 index_1 * PFS_PAGE_SIZE +
static_cast<uint
>(
pfs - pfs_first);
1004 *found_index = found;
1091 std::atomic<array_type *>
m_pages[PFS_PAGE_COUNT];
1106template <
class T,
class U,
class V>
1131template <
class T,
int page_size,
int page_count,
class U,
class V>
1164template <
class B,
int PFS_PARTITION_COUNT>
1179 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1185 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1193 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1200 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1208 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1220 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1230 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1239 assert(partition < PFS_PARTITION_COUNT);
1241 return m_partitions[partition]->allocate(dirty_state,
id);
1253 B::static_deallocate(safe_pfs);
1259 uint partition_index;
1261 unpack_index(user_index, &partition_index, &sub_index);
1266 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1272 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1278 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1284 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1290 uint partition_index;
1292 unpack_index(user_index, &partition_index, &sub_index);
1294 if (partition_index >= PFS_PARTITION_COUNT) {
1302 uint partition_index;
1304 unpack_index(user_index, &partition_index, &sub_index);
1306 if (partition_index >= PFS_PARTITION_COUNT) {
1318 for (
int i = 0; i < PFS_PARTITION_COUNT; i++) {
1320 if (safe !=
nullptr) {
1331 static_assert(PFS_PARTITION_COUNT <= (1 << 8),
"2^8 = 256 partitions max.");
1333 "2^24 = 16777216 max per partitioned buffer.");
1335 *user_index = (partition_index << 24) + sub_index;
1340 *partition_index = user_index >> 24;
1341 *sub_index = user_index & 0x00FFFFFF;
1345 uint *found_partition, uint *found_sub_index) {
1347 assert(partition_index < PFS_PARTITION_COUNT);
1349 while (partition_index < PFS_PARTITION_COUNT) {
1352 record = sub_iterator.scan_next(found_sub_index);
1354 *found_partition = partition_index;
1355 sub_index = *found_sub_index + 1;
1363 *found_partition = PFS_PARTITION_COUNT;
1364 *found_sub_index = 0;
1372template <
class B,
int PFS_PARTITION_COUNT>
1376 PFS_PARTITION_COUNT>;
1383 uint unused_partition;
1384 uint unused_sub_index;
1390 uint found_partition;
1391 uint found_sub_index;
1402 uint partition, uint sub_index)
Definition: pfs_buffer_container.h:1496
void free_array(PFS_account_array *array)
Definition: pfs_buffer_container.cc:255
int alloc_array(PFS_account_array *array)
Definition: pfs_buffer_container.cc:122
Definition: pfs_buffer_container.h:1486
PFS_stage_stat * m_instr_class_stages_array
Definition: pfs_buffer_container.h:1489
PFS_memory_shared_stat * m_instr_class_memory_array
Definition: pfs_buffer_container.h:1493
PFS_error_stat * m_instr_class_errors_array
Definition: pfs_buffer_container.h:1492
PFS_single_stat * m_instr_class_waits_array
Definition: pfs_buffer_container.h:1488
PFS_transaction_stat * m_instr_class_transactions_array
Definition: pfs_buffer_container.h:1491
PFS_statement_stat * m_instr_class_statements_array
Definition: pfs_buffer_container.h:1490
Definition: pfs_buffer_container.h:76
Definition: pfs_buffer_container.h:255
PFS_buffer_processor< T > processor_type
Definition: pfs_buffer_container.h:264
void apply(function_type fct)
Definition: pfs_buffer_container.h:319
void cleanup()
Definition: pfs_buffer_container.h:291
size_t get_memory() const
Definition: pfs_buffer_container.h:297
size_t get_row_count() const
Definition: pfs_buffer_container.h:293
size_t m_max
Definition: pfs_buffer_container.h:422
value_type * get(uint index)
Definition: pfs_buffer_container.h:363
size_t get_row_size() const
Definition: pfs_buffer_container.h:295
U array_type
Definition: pfs_buffer_container.h:260
int init(size_t max_size)
Definition: pfs_buffer_container.h:277
void apply(processor_type &proc)
Definition: pfs_buffer_container.h:341
value_type * get(uint index, bool *has_more)
Definition: pfs_buffer_container.h:374
PFS_buffer_const_iterator< T > const_iterator_type
Definition: pfs_buffer_container.h:262
void apply_all(function_type fct)
Definition: pfs_buffer_container.h:331
void(* function_type)(value_type *)
Definition: pfs_buffer_container.h:265
iterator_type iterate()
Definition: pfs_buffer_container.h:312
ulong m_lost
Definition: pfs_buffer_container.h:398
value_type * allocate(pfs_dirty_state *dirty_state)
Definition: pfs_buffer_container.h:299
void apply_all(processor_type &proc)
Definition: pfs_buffer_container.h:353
value_type * sanitize(value_type *unsafe)
Definition: pfs_buffer_container.h:384
V allocator_type
Definition: pfs_buffer_container.h:261
PFS_buffer_container(allocator_type *allocator)
Definition: pfs_buffer_container.h:267
PFS_buffer_iterator< T, U, V > iterator_type
Definition: pfs_buffer_container.h:263
void deallocate(value_type *pfs)
Definition: pfs_buffer_container.h:310
iterator_type iterate(uint index)
Definition: pfs_buffer_container.h:314
friend class PFS_buffer_iterator< T, U, V >
Definition: pfs_buffer_container.h:257
value_type * scan_next(uint &index, uint *found_index)
Definition: pfs_buffer_container.h:401
allocator_type * m_allocator
Definition: pfs_buffer_container.h:424
array_type m_array
Definition: pfs_buffer_container.h:423
T value_type
Definition: pfs_buffer_container.h:259
Definition: pfs_buffer_container.h:219
PFS_buffer_default_array< T > array_type
Definition: pfs_buffer_container.h:221
PFS_buffer_default_allocator(PFS_builtin_memory_class *klass)
Definition: pfs_buffer_container.h:223
int alloc_array(array_type *array)
Definition: pfs_buffer_container.h:226
void free_array(array_type *array)
Definition: pfs_buffer_container.h:242
PFS_builtin_memory_class * m_builtin_class
Definition: pfs_buffer_container.h:250
Definition: pfs_buffer_container.h:106
value_type * allocate(pfs_dirty_state *dirty_state, pfs_container_id container_id, pfs_page_id page_id, pfs_identity *id)
Definition: pfs_buffer_container.h:110
std::atomic< bool > m_full
Page full flag.
Definition: pfs_buffer_container.h:179
T * get_last()
Definition: pfs_buffer_container.h:168
std::atomic< T * > m_ptr
Array of values.
Definition: pfs_buffer_container.h:197
PFS_cacheline_atomic_size_t m_monotonic
Monotonic counter.
Definition: pfs_buffer_container.h:188
std::atomic< PFS_opaque_container * > m_container
Container.
Definition: pfs_buffer_container.h:215
std::atomic< size_t > m_max
Max number of items in the page.
Definition: pfs_buffer_container.h:206
T value_type
Definition: pfs_buffer_container.h:108
T * get_first()
Definition: pfs_buffer_container.h:166
void deallocate(value_type *pfs)
Definition: pfs_buffer_container.h:158
Definition: pfs_buffer_container.h:1107
T value_type
Definition: pfs_buffer_container.h:1110
PFS_buffer_container< T, U, V > container_type
Definition: pfs_buffer_container.h:1111
container_type * m_container
Definition: pfs_buffer_container.h:1127
value_type * scan_next()
Definition: pfs_buffer_container.h:1114
value_type * scan_next(uint *found_index)
Definition: pfs_buffer_container.h:1119
PFS_buffer_iterator(container_type *container, uint index)
Definition: pfs_buffer_container.h:1124
uint m_index
Definition: pfs_buffer_container.h:1128
Definition: pfs_buffer_container.h:1158
virtual void operator()(T *element)=0
virtual ~PFS_buffer_processor()=default
Definition: pfs_buffer_container.h:430
void(* function_type)(value_type *)
Definition: pfs_buffer_container.h:461
static const size_t MAX_SIZE
Definition: pfs_buffer_container.h:463
int init(long max_size)
Definition: pfs_buffer_container.h:476
size_t get_row_size() const
Definition: pfs_buffer_container.h:560
std::atomic< size_t > m_last_page_size
Size of the last page.
Definition: pfs_buffer_container.h:1082
friend class PFS_buffer_scalable_iterator< T, PFS_PAGE_SIZE, PFS_PAGE_COUNT, U, V >
Definition: pfs_buffer_container.h:433
void apply(processor_type &proc)
Definition: pfs_buffer_container.h:847
void apply_all(function_type fct)
Definition: pfs_buffer_container.h:827
void apply_all(processor_type &proc)
Definition: pfs_buffer_container.h:869
void dirty_to_free(pfs_dirty_state *dirty_state, value_type *safe_pfs)
Definition: pfs_buffer_container.h:732
PFS_buffer_scalable_container< T, PFS_PAGE_SIZE, PFS_PAGE_COUNT, U, V > container_type
This container type.
Definition: pfs_buffer_container.h:456
value_type * sanitize(value_type *unsafe)
Definition: pfs_buffer_container.h:942
PFS_buffer_scalable_iterator< T, PFS_PAGE_SIZE, PFS_PAGE_COUNT, U, V > iterator_type
Definition: pfs_buffer_container.h:459
native_mutex_t m_critical_section
Definition: pfs_buffer_container.h:1102
std::atomic< size_t > m_max
Max number of items in the buffer.
Definition: pfs_buffer_container.h:1046
PFS_cacheline_atomic_size_t m_max_page_index
Current page index.
Definition: pfs_buffer_container.h:1064
size_t get_memory()
Definition: pfs_buffer_container.h:562
iterator_type iterate()
Definition: pfs_buffer_container.h:794
uint get_page_logical_size(uint page_index)
Definition: pfs_buffer_container.h:970
void apply(function_type fct)
Definition: pfs_buffer_container.h:805
iterator_type iterate(uint index)
Definition: pfs_buffer_container.h:799
V allocator_type
Definition: pfs_buffer_container.h:453
U array_type
Type of pages in the buffer.
Definition: pfs_buffer_container.h:452
PFS_buffer_processor< T > processor_type
Definition: pfs_buffer_container.h:460
value_type * get(uint index, bool *has_more)
Definition: pfs_buffer_container.h:911
PFS_cacheline_atomic_size_t m_monotonic
Monotonic page counter.
Definition: pfs_buffer_container.h:1055
std::atomic< size_t > m_max_page_count
Max number of pages.
Definition: pfs_buffer_container.h:1073
void cleanup()
Definition: pfs_buffer_container.h:522
size_t get_row_count()
Definition: pfs_buffer_container.h:549
std::atomic< bool > m_initialized
Initialized full flag.
Definition: pfs_buffer_container.h:1026
pfs_container_id m_container_id
Definition: pfs_buffer_container.h:1103
PFS_buffer_const_iterator< T > const_iterator_type
Definition: pfs_buffer_container.h:457
value_type * get(uint index)
Definition: pfs_buffer_container.h:889
value_type * allocate(pfs_dirty_state *dirty_state, pfs_identity *id)
Definition: pfs_buffer_container.h:564
static void static_deallocate(value_type *safe_pfs)
Definition: pfs_buffer_container.h:770
std::atomic< bool > m_full
Buffer full flag.
Definition: pfs_buffer_container.h:1037
T value_type
Type of elements in the buffer.
Definition: pfs_buffer_container.h:446
PFS_buffer_scalable_container(allocator_type *allocator)
Definition: pfs_buffer_container.h:465
value_type * scan_next(uint &index, uint *found_index)
Definition: pfs_buffer_container.h:978
std::atomic< allocator_type * > m_allocator
Buffer allocator.
Definition: pfs_buffer_container.h:1100
void deallocate(value_type *safe_pfs)
Definition: pfs_buffer_container.h:751
ulong m_lost
Definition: pfs_buffer_container.h:967
std::atomic< array_type * > m_pages[PFS_PAGE_COUNT]
Array of pages.
Definition: pfs_buffer_container.h:1091
Definition: pfs_buffer_container.h:1132
T value_type
Definition: pfs_buffer_container.h:1135
uint m_index
Definition: pfs_buffer_container.h:1154
value_type * scan_next(uint *found_index)
Definition: pfs_buffer_container.h:1145
value_type * scan_next()
Definition: pfs_buffer_container.h:1140
PFS_buffer_scalable_container< T, page_size, page_count, U, V > container_type
Definition: pfs_buffer_container.h:1137
PFS_buffer_scalable_iterator(container_type *container, uint index)
Definition: pfs_buffer_container.h:1150
container_type * m_container
Definition: pfs_buffer_container.h:1153
Definition: pfs_buffer_container.h:1518
int alloc_array(PFS_host_array *array)
Definition: pfs_buffer_container.cc:305
void free_array(PFS_host_array *array)
Definition: pfs_buffer_container.cc:438
Definition: pfs_buffer_container.h:1508
PFS_transaction_stat * m_instr_class_transactions_array
Definition: pfs_buffer_container.h:1513
PFS_memory_shared_stat * m_instr_class_memory_array
Definition: pfs_buffer_container.h:1515
PFS_error_stat * m_instr_class_errors_array
Definition: pfs_buffer_container.h:1514
PFS_single_stat * m_instr_class_waits_array
Definition: pfs_buffer_container.h:1510
PFS_stage_stat * m_instr_class_stages_array
Definition: pfs_buffer_container.h:1511
PFS_statement_stat * m_instr_class_statements_array
Definition: pfs_buffer_container.h:1512
Definition: pfs_buffer_container.h:1165
B::function_type function_type
Definition: pfs_buffer_container.h:1175
value_type * get(uint user_index, bool *has_more)
Definition: pfs_buffer_container.h:1301
B::allocator_type allocator_type
Definition: pfs_buffer_container.h:1170
void apply(processor_type &proc)
Definition: pfs_buffer_container.h:1277
void apply(function_type fct)
Definition: pfs_buffer_container.h:1265
B * m_partitions[PFS_PARTITION_COUNT]
Definition: pfs_buffer_container.h:1369
value_type * scan_next(uint &partition_index, uint &sub_index, uint *found_partition, uint *found_sub_index)
Definition: pfs_buffer_container.h:1344
iterator_type iterate()
Definition: pfs_buffer_container.h:1256
PFS_partitioned_buffer_scalable_iterator< B, PFS_PARTITION_COUNT > iterator_type
Definition: pfs_buffer_container.h:1172
size_t get_row_count() const
Definition: pfs_buffer_container.h:1205
void apply_all(function_type fct)
Definition: pfs_buffer_container.h:1271
value_type * sanitize(value_type *unsafe)
Definition: pfs_buffer_container.h:1315
B::value_type value_type
Definition: pfs_buffer_container.h:1169
static void unpack_index(uint user_index, uint *partition_index, uint *sub_index)
Definition: pfs_buffer_container.h:1338
PFS_partitioned_buffer_scalable_container(allocator_type *allocator)
Definition: pfs_buffer_container.h:1177
void deallocate(value_type *safe_pfs)
Definition: pfs_buffer_container.h:1244
int init(long max_size)
Definition: pfs_buffer_container.h:1190
~PFS_partitioned_buffer_scalable_container()
Definition: pfs_buffer_container.h:1184
B::iterator_type sub_iterator_type
Definition: pfs_buffer_container.h:1173
size_t get_memory() const
Definition: pfs_buffer_container.h:1217
iterator_type iterate(uint user_index)
Definition: pfs_buffer_container.h:1258
size_t get_row_size() const
Definition: pfs_buffer_container.h:1215
value_type * allocate(pfs_dirty_state *dirty_state, uint partition, pfs_identity *id)
Definition: pfs_buffer_container.h:1237
B::processor_type processor_type
Definition: pfs_buffer_container.h:1174
void apply_all(processor_type &proc)
Definition: pfs_buffer_container.h:1283
value_type * get(uint user_index)
Definition: pfs_buffer_container.h:1289
void cleanup()
Definition: pfs_buffer_container.h:1199
long get_lost_counter()
Definition: pfs_buffer_container.h:1227
static void pack_index(uint partition_index, uint sub_index, uint *user_index)
Definition: pfs_buffer_container.h:1329
Definition: pfs_buffer_container.h:1373
uint m_sub_index
Definition: pfs_buffer_container.h:1409
PFS_partitioned_buffer_scalable_container< B, PFS_PARTITION_COUNT > container_type
Definition: pfs_buffer_container.h:1380
container_type * m_container
Definition: pfs_buffer_container.h:1407
B::value_type value_type
Definition: pfs_buffer_container.h:1378
value_type * scan_next(uint *found_user_index)
Definition: pfs_buffer_container.h:1389
value_type * scan_next()
Definition: pfs_buffer_container.h:1382
PFS_partitioned_buffer_scalable_iterator(container_type *container, uint partition, uint sub_index)
Definition: pfs_buffer_container.h:1401
uint m_partition
Definition: pfs_buffer_container.h:1408
Definition: pfs_buffer_container.h:1552
void free_array(PFS_thread_array *array)
Definition: pfs_buffer_container.cc:786
int alloc_array(PFS_thread_array *array)
Definition: pfs_buffer_container.cc:487
Definition: pfs_buffer_container.h:1530
PFS_statement_stat * m_instr_class_statements_array
Definition: pfs_buffer_container.h:1534
PFS_single_stat * m_instr_class_waits_array
Definition: pfs_buffer_container.h:1532
PFS_error_stat * m_instr_class_errors_array
Definition: pfs_buffer_container.h:1536
PFS_events_statements * m_statements_stack_array
Definition: pfs_buffer_container.h:1542
PFS_events_statements * m_statements_history_array
Definition: pfs_buffer_container.h:1541
PFS_stage_stat * m_instr_class_stages_array
Definition: pfs_buffer_container.h:1533
unsigned char * m_current_stmts_digest_token_array
Definition: pfs_buffer_container.h:1548
PFS_events_stages * m_stages_history_array
Definition: pfs_buffer_container.h:1540
char * m_current_stmts_text_array
Definition: pfs_buffer_container.h:1546
PFS_memory_safe_stat * m_instr_class_memory_array
Definition: pfs_buffer_container.h:1537
unsigned char * m_history_stmts_digest_token_array
Definition: pfs_buffer_container.h:1549
PFS_transaction_stat * m_instr_class_transactions_array
Definition: pfs_buffer_container.h:1535
char * m_session_connect_attrs_array
Definition: pfs_buffer_container.h:1544
PFS_events_waits * m_waits_history_array
Definition: pfs_buffer_container.h:1539
PFS_events_transactions * m_transactions_history_array
Definition: pfs_buffer_container.h:1543
char * m_history_stmts_text_array
Definition: pfs_buffer_container.h:1547
Definition: pfs_buffer_container.h:1574
void free_array(PFS_user_array *array)
Definition: pfs_buffer_container.cc:1033
int alloc_array(PFS_user_array *array)
Definition: pfs_buffer_container.cc:900
Definition: pfs_buffer_container.h:1564
PFS_statement_stat * m_instr_class_statements_array
Definition: pfs_buffer_container.h:1568
PFS_transaction_stat * m_instr_class_transactions_array
Definition: pfs_buffer_container.h:1569
PFS_stage_stat * m_instr_class_stages_array
Definition: pfs_buffer_container.h:1567
PFS_single_stat * m_instr_class_waits_array
Definition: pfs_buffer_container.h:1566
PFS_error_stat * m_instr_class_errors_array
Definition: pfs_buffer_container.h:1570
PFS_memory_shared_stat * m_instr_class_memory_array
Definition: pfs_buffer_container.h:1571
int page
Definition: ctype-mb.cc:1226
#define MY_ZEROFILL
Definition: my_sys.h:149
#define T
Definition: jit_executor_value.cc:373
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:195
uint16_t value_type
Definition: vt100.h:184
Definition: atomics_array.h:39
bool index(const std::string &value, const String &search_for, uint32_t *idx)
Definition: contains.h:76
const ulint MAX_SIZE
The maximum size possible for an LOB.
Definition: lob0lob.h:84
ValueType max(X &&first)
Definition: gtid.h:103
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:1413
PFS_host_container global_host_container
PFS_buffer_scalable_container< PFS_socket, 256, 256 > PFS_socket_container
Definition: pfs_buffer_container.h:1435
PFS_thread_container global_thread_container
std::uint16_t pfs_page_id
Definition: pfs_buffer_container.h:50
PFS_table_share_index_container global_table_share_index_container
PFS_cond_container::iterator_type PFS_cond_iterator
Definition: pfs_buffer_container.h:1426
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:1431
PFS_user_container::iterator_type PFS_user_iterator
Definition: pfs_buffer_container.h:1583
PFS_mutex_container::iterator_type PFS_mutex_iterator
Definition: pfs_buffer_container.h:1417
PFS_prepared_stmt_container::iterator_type PFS_prepared_stmt_iterator
Definition: pfs_buffer_container.h:1483
pfs_identity make_identity(pfs_container_id container_id, pfs_page_id page_id, pfs_object_id object_id, pfs_dirty_state *dirty_state)
Build an artificial object identity, for OBJECT_INSTANCE_BEGIN columns.
Definition: pfs_buffer_container.cc:40
PFS_buffer_scalable_container< PFS_table_share, 4 *1024, 4 *1024 > PFS_table_share_container
Definition: pfs_buffer_container.h:1460
PFS_setup_object_container::iterator_type PFS_setup_object_iterator
Definition: pfs_buffer_container.h:1451
PFS_cond_container global_cond_container
PFS_buffer_scalable_container< PFS_prepared_stmt, 1024, 1024 > PFS_prepared_stmt_container
Definition: pfs_buffer_container.h:1482
PFS_buffer_scalable_container< PFS_table_share_lock, 4 *1024, 4 *1024 > PFS_table_share_lock_container
Definition: pfs_buffer_container.h:1471
PFS_socket_container::iterator_type PFS_socket_iterator
Definition: pfs_buffer_container.h:1436
PFS_table_share_container global_table_share_container
PFS_rwlock_container::iterator_type PFS_rwlock_iterator
Definition: pfs_buffer_container.h:1422
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:1560
PFS_host_container::iterator_type PFS_host_iterator
Definition: pfs_buffer_container.h:1527
PFS_socket_container global_socket_container
std::uint16_t pfs_object_id
Definition: pfs_buffer_container.h:51
PFS_partitioned_buffer_scalable_container< PFS_mutex_basic_container, PFS_MUTEX_PARTITIONS > PFS_mutex_container
Definition: pfs_buffer_container.h:1416
PFS_table_share_lock_container::iterator_type PFS_table_share_lock_iterator
Definition: pfs_buffer_container.h:1473
PFS_buffer_scalable_container< PFS_program, 1024, 1024 > PFS_program_container
Definition: pfs_buffer_container.h:1477
PFS_account_container::iterator_type PFS_account_iterator
Definition: pfs_buffer_container.h:1505
PFS_buffer_scalable_container< PFS_file, 4 *1024, 4 *1024 > PFS_file_container
Definition: pfs_buffer_container.h:1430
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:1467
PFS_mdl_container global_mdl_container
PFS_buffer_scalable_container< PFS_setup_actor, 128, 1024 > PFS_setup_actor_container
Definition: pfs_buffer_container.h:1445
PFS_rwlock_container global_rwlock_container
PFS_thread_container::iterator_type PFS_thread_iterator
Definition: pfs_buffer_container.h:1561
PFS_mdl_container::iterator_type PFS_mdl_iterator
Definition: pfs_buffer_container.h:1441
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:1456
PFS_buffer_scalable_container< PFS_host, 128, 128, PFS_host_array, PFS_host_allocator > PFS_host_container
Definition: pfs_buffer_container.h:1526
PFS_account_container global_account_container
std::uint16_t pfs_container_id
Definition: pfs_buffer_container.h:49
PFS_buffer_scalable_container< PFS_cond, 256, 256 > PFS_cond_container
Definition: pfs_buffer_container.h:1425
PFS_setup_actor_container::iterator_type PFS_setup_actor_iterator
Definition: pfs_buffer_container.h:1446
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:1582
PFS_buffer_scalable_container< PFS_table_share_index, 8 *1024, 8 *1024 > PFS_table_share_index_container
Definition: pfs_buffer_container.h:1465
PFS_buffer_scalable_container< PFS_setup_object, 128, 1024 > PFS_setup_object_container
Definition: pfs_buffer_container.h:1450
PFS_table_share_container::iterator_type PFS_table_share_iterator
Definition: pfs_buffer_container.h:1461
PFS_setup_actor_container global_setup_actor_container
std::atomic< pfs_container_id > global_container_id
Definition: pfs_buffer_container.cc:58
PFS_mutex_container global_mutex_container
PFS_buffer_scalable_container< PFS_metadata_lock, 1024, 1024 > PFS_mdl_container
Definition: pfs_buffer_container.h:1440
PFS_buffer_scalable_container< PFS_rwlock, 1024, 1024 > PFS_rwlock_container
Definition: pfs_buffer_container.h:1421
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:1504
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
std::uint64_t pfs_identity
Definition: pfs.h:34
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:70
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:376
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: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:55
#define NULL
Definition: types.h:55