<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 參數簡介 innodb_additional_mem_pool_size 是 InnoDB 用來保存數據字典信息和其他內部數據結構的內存池的大小,單位是 byte,參數默認值為8M。數據庫中的表數量越多,參數值應該越大,如果 InnoDB 用完了內存池中的內存,就會從操作系統中分配內存,同時在 error log 中打入報警信息。 innodb_use_sys_malloc 配置為 ON 時,innodb_additional_mem_pool_size 失效(直接從操作系統分配內存)。 innodb_additional_mem_pool_size 和 innodb_use_sys_malloc 在 MySQL 5.7.4 中移除。 ## 參數合理值預估 ~~~ ./storage/innobase/handler/ha_innodb.cc: srv_mem_pool_size = (ulint) innobase_additional_mem_pool_size; ./storage/innobase/srv/srv0srv.cc: mem_init(srv_mem_pool_size); storage/innobase/mem/mem0dbg.cc: mem_comm_pool = mem_pool_create(size); ~~~ 從源碼中可以看出,innodb_additional_mem_pool_size 的參數值用于指定內存池 mem_comm_pool 的大小; ~~~ storage/innobase/mem/mem0mem.cc: block = static_cast<mem_block_t*>( mem_area_alloc(&len, mem_comm_pool)); ~~~ 函數?`mem_area_alloc`?從 mem_comm_pool 內存池中分配內存; ~~~ storage/innobase/mem/mem0pool.cc: /* If we are using os allocator just make a simple call to malloc */ if (UNIV_LIKELY(srv_use_sys_malloc)) { return(malloc(*psize)); } ........ area = UT_LIST_GET_FIRST(pool->free_list[n]); if (area == NULL) { ret = mem_pool_fill_free_list(n, pool); if (ret == FALSE) { /* Out of memory in memory pool: we try to allocate from the operating system with the regular malloc: */ mem_n_threads_inside--; mutex_exit(&(pool->mutex)); return(ut_malloc(size)); } area = UT_LIST_GET_FIRST(pool->free_list[n]); } ~~~ 如果 innodb_use_sys_malloc (上述代碼中的srv_use_sys_malloc) 設置為 ON,或者內存池中沒有足夠的內存可供分配,則直接從操作系統中分配內存。 `mem_area_alloc`?調用棧如下(use database 觸發斷點) ~~~ #0 mem_area_alloc #1 0x000000000118048d in mem_heap_create_block_func #2 0x000000000149a390 in mem_heap_create_func #3 0x00000000014aa6d5 in dict_load_table #4 0x0000000001481082 in dict_table_open_on_name #5 0x000000000109d769 in ha_innobase::open #6 0x00000000006d5245 in handler::ha_open #7 0x0000000000b830ae in open_table_from_share #8 0x000000000091deee in open_table #9 0x0000000000922eea in open_and_process_table #10 0x000000000092492f in open_tables #11 0x0000000000926c21 in open_normal_and_derived_tables #12 0x0000000000a83834 in mysqld_list_fields #13 0x00000000009f28e1 in dispatch_command #14 0x00000000009eeb51 in do_command #15 0x0000000000982cb6 in do_handle_one_connection #16 0x000000000098238b in handle_one_connection #17 0x0000000001877f91 in pfs_spawn_thread #18 0x0000003d8c007851 in start_thread () #19 0x0000003d8bce767d in clone () ~~~ 函數?`dict_load_table`?中會為每張表分配32k的空間 (?`mem_heap_create(32000)`?實際分配32744字節空間 ),數據字典中每張表所占空間的上限是32k,具體占用空間根據列數和索引數量分配,分配完成后回收32k中未使用的空間 ~~~ storage/innobase/dict/dict0load.cc: heap = mem_heap_create(32000); ~~~ show engine innodb status BUFFER POOL AND MEMORY Dictionary cache 實際使用的數據字典緩存,不會超過每張表32k,實測過程中,每張表不包括索引占4K,每個索引占2k,列數對空間占用影響不大。 測試用表如下,未建索引時,1000張表占用空間4M,增加列占用空間增長不明顯,每增加一個索引,占用空間增加2M,可以估測每張表占用空間4k(不含索引),每個索引占用空間2k。 ~~~ Create Table: CREATE TABLE `1000` ( `id` int(11) DEFAULT NULL, `a` varchar(255) DEFAULT NULL, `b` varchar(255) DEFAULT NULL, `c` varchar(255) DEFAULT NULL, `d` varchar(255) DEFAULT NULL, KEY `a` (`a`), KEY `b` (`b`), KEY `id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ~~~ ## 引入和移除該參數的原因 早期操作系統的內存分配器性能和可伸縮性較差,并且當時沒有適合多核心CPU的內存分配器。所以,InnoDB 實現了一套自己的內存分配系統,做為內存系統的參數之一,引入了`innodb_additional_mem_pool_size`。 隨著多核心CPU的廣泛應用和操作系統的成熟,操作系統能夠提供性能更高、可伸縮性更好的內存分配器,包括 Hoard、libumem、mtmalloc、ptmalloc、tbbmalloc 和 TCMalloc 等。InnoDB 實現的內存分配器相比操作系統的內存分配器并沒有明顯優勢,所以在之后的版本,會移除 innodb_additional_mem_pool_size 和 innodb_use_sys_malloc 兩個參數,統一使用操作系統的內存分配器。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看