MCPcopy Create free account
hub / github.com/MariaDB/server / init_cache

Method init_cache

sql/sql_cache.cc:2591–2767  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2589
2590
2591size_t Query_cache::init_cache()
2592{
2593 size_t mem_bin_count, num, step;
2594 size_t mem_bin_size, prev_size, inc;
2595 size_t max_mem_bin_size, approx_additional_data_size;
2596 int align;
2597
2598 DBUG_ENTER("Query_cache::init_cache");
2599
2600 approx_additional_data_size = (sizeof(Query_cache) +
2601 sizeof(uchar*)*(def_query_hash_size+
2602 def_table_hash_size));
2603 if (query_cache_size < approx_additional_data_size)
2604 goto err;
2605
2606 query_cache_size-= approx_additional_data_size;
2607 align= query_cache_size % ALIGN_SIZE(1);
2608 if (align)
2609 {
2610 query_cache_size-= align;
2611 approx_additional_data_size+= align;
2612 }
2613
2614 /*
2615 Count memory bins number.
2616 Check section 6. in start comment for the used algorithm.
2617 */
2618
2619 max_mem_bin_size = query_cache_size >> QUERY_CACHE_MEM_BIN_FIRST_STEP_PWR2;
2620 mem_bin_count = (uint) ((1 + QUERY_CACHE_MEM_BIN_PARTS_INC) *
2621 QUERY_CACHE_MEM_BIN_PARTS_MUL);
2622 mem_bin_num = 1;
2623 mem_bin_steps = 1;
2624 mem_bin_size = max_mem_bin_size >> QUERY_CACHE_MEM_BIN_STEP_PWR2;
2625 prev_size = 0;
2626 if (mem_bin_size <= min_allocation_unit)
2627 {
2628 DBUG_PRINT("qcache", ("too small query cache => query cache disabled"));
2629 // TODO here (and above) should be warning in 4.1
2630 goto err;
2631 }
2632 while (mem_bin_size > min_allocation_unit)
2633 {
2634 mem_bin_num += mem_bin_count;
2635 prev_size = mem_bin_size;
2636 mem_bin_size >>= QUERY_CACHE_MEM_BIN_STEP_PWR2;
2637 mem_bin_steps++;
2638 mem_bin_count += QUERY_CACHE_MEM_BIN_PARTS_INC;
2639 mem_bin_count = (uint) (mem_bin_count * QUERY_CACHE_MEM_BIN_PARTS_MUL);
2640
2641 // Prevent too small bins spacing
2642 if (mem_bin_count > (mem_bin_size >> QUERY_CACHE_MEM_BIN_SPC_LIM_PWR2))
2643 mem_bin_count= (mem_bin_size >> QUERY_CACHE_MEM_BIN_SPC_LIM_PWR2);
2644 }
2645 inc = (prev_size - mem_bin_size) / mem_bin_count;
2646 mem_bin_num += (mem_bin_count - (min_allocation_unit - mem_bin_size)/inc);
2647 mem_bin_steps++;
2648 additional_data_size = ((mem_bin_num+1) *

Callers

nothing calls this directly

Calls 2

my_malloc_lockFunction · 0.85
initMethod · 0.45

Tested by

no test coverage detected