14.4.4 Configuring the Memory Allocator for InnoDB  InnoDB 配置内存分配器

当InnoDB 被开发, 内分配齐 提供了与操作系统和运行库往往缺乏在性能和可扩展性,

当时, 没有内存分配库调整对于多核CPUs.

因此,InnoDB实现它自己的内存分配器在内存子系统里,

这个分配器是有单个互斥锁保护的, 会成为一个瓶颈。

InnoDB也实现了一个封装的接口在系统分配器(malloc和free) ,同样是有一个单独的互斥锁保护

如今,随着多核系统已经变得越来越广泛,如今的操作系统变的成熟,

已经显著的改善了操作系统提供的内存分配器。

新的内存变的更好,比过去有更多的可扩展性。

高性能内存分配器 包含Hoard, libumem, mtmalloc, ptmalloc, tbbmalloc, and TCMalloc. 

大多数的负载,特别是那些频繁分配和释放(比如多表连接),收益于使用

一个更高度调优的内存分配器 相对于内部 InnoDB指定的内存分配器

你可以控制 InnoDB 是否使用它自己的内存分配器或者操作系统的内存分配器,

通过设置innodb_use_sys_malloc 

mysql> show variables like '%innodb_use_sys_malloc%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_use_sys_malloc | ON |
+-----------------------+-------+
1 row in set (0.00 sec) 如果设置为ON或者1(默认情况下),InnoDB 使用底层系统的malloc 和free 函数 而不是自身管理内存池。这个参数不是动态的, 只有在系统重启时生效, 继续使用InnoDB 内存分配器,设置innodb_use_sys_malloc to 0. 当InnoDB 内存分配器被禁用,InnoDB 忽略innodb_additional_mem_pool_size 参数的值。 InnoDB 内存分配使用一个额外的内存pool 用于满足分配请求不比再到系统内存分配器。 当 InnoDB memory allocator 被禁用, 所有这些分配请求通过系统内存分配满足 在类Unix 系统使用动态链接,更换内存分配器可以和设置环境变量LD_PRELOAD or LD_LIBRARY_PATH 指向动态库实现内存分配器 在其他系统上, 某些链接可能是必要的

14.4.4 Configuring the Memory Allocator for InnoDB InnoDB 配置内存分配器的更多相关文章

  1. 14.6.4 Configuring the Memory Allocator for InnoDB 配置InnoDB 内存分配器

    14.6.4 Configuring the Memory Allocator for InnoDB 配置InnoDB 内存分配器 当InnoDB 被开发时,内存分配提供了操作系统和 run-time ...

  2. 内存分配器 (Memory Allocator)

    对于大多数开发人员而言,系统的内存分配就是一个黑盒子,就是几个API的调用.有你就给我,没有我就想别的办法. 来UC前,我就是这样觉得的.实际深入进去时,才发现这个领域里也是百家争鸣.非常热闹.有操作 ...

  3. 14.6.11 Configuring Optimizer Statistics for InnoDB 配置优化统计信息用于InnoDB

    14.6.11 Configuring Optimizer Statistics for InnoDB 配置优化统计信息用于InnoDB 14.6.11.1 Configuring Persisten ...

  4. 14.6.8 Configuring the InnoDB Master Thread IO Rate 配置InnoDB 主线程IO 速率:

    14.6.8 Configuring the InnoDB Master Thread IO Rate 配置InnoDB 主线程IO 速率: 主线程 在InnoDB 是一个线程 执行各种任务在后台. ...

  5. 14.6.7 Configuring the Number of Background InnoDB IO Threads 配置InnoDB IO Threads的数量

    14.6.7 Configuring the Number of Background InnoDB IO Threads 配置InnoDB IO Threads的数量 InnoDB 使用后台线程来服 ...

  6. 14.6.6 Configuring Thread Concurrency for InnoDB 配置线程并发

    14.6.6 Configuring Thread Concurrency for InnoDB 配置线程并发 InnoDB 使用操作系统线程来处理请求(用户事务) 事务可能执行很多次在它们提交或者回 ...

  7. 14.6.5 Configuring InnoDB Change Buffering 配置InnoDB Change Buffering

    14.6.5 Configuring InnoDB Change Buffering 配置InnoDB Change Buffering 当插入,更新,和删除操作在表上执行, 索引列的值(特别是 se ...

  8. 14.6.2 Configuring InnoDB for Read-Only Operation

    14.6.2 Configuring InnoDB for Read-Only Operation 配置InnoDB只读操作 你可以查询InnoDB 表MySQL 数据目录是一个只读介质,通过启用 - ...

  9. 14.4.9 Configuring Spin Lock Polling 配置Spin lock 轮询:

    14.4.9 Configuring Spin Lock Polling 配置Spin lock 轮询: 很多InnoDB mutexes 和rw-locks 是保留一小段时间,在一个多核系统, 它可 ...

随机推荐

  1. C#反射 入门学习 02

    获取Type类型的构造函数 前言                  有了前面的 C#反射 入门学习 01的知识,学习这篇估计是搓搓有余,它教会了我们获取方法的相关信息的两种形式与 使用反射调用方法,  ...

  2. jquery插件讲解:轮播(SlidesJs)+验证(Validation)

    SlidesJs(轮播支持触屏)——官网(http://slidesjs.com) 1.简介 SlidesJs是基于Jquery(1.7.1+)的响应幻灯片插件.支持键盘,触摸,css3转换. 2.代 ...

  3. JAVA实现AES的加密和解密算法

    原文 JAVA实现AES的加密和解密算法 import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import ja ...

  4. 9天快速入门java

    Java入门教程[9天快速入门JAVA] §1.3.简单的Java程序 下面我们先介绍两个简单的Java程序,并对其进行分析. 例1.1. public class HelloWorldApp{//a ...

  5. 如何在Eclipse配置Tomcat服务器

    链接地址:http://jingyan.baidu.com/article/3065b3b6efa9d7becff8a4c6.html 要想在Eclipse运行jsp文件,首先需要指定对应的服务器,即 ...

  6. atitit.集filt经营分部 filter总结

    atitit.集filt经营分部 filter总结 1. Css sltr 1 2. 基本选择器(依据id,class,元素名) 2 3. 层次选择器 3 4. 过滤选择器 3 5. First,la ...

  7. ASP.NET - 匹配标签中的内容

    string str = @"<td>Csdn</td>\r\n<td>V1.0</td>\r\n<td>2014-10-23&l ...

  8. Spring MVC程序

    Spring MVC程序(IDEA开发环境)   回顾Java平台上Web开发历程来看,从Servlet出现开始,到JSP繁盛一时,然后是Servlet+JSP时代,最后演化为现在Web开发框架盛行的 ...

  9. 找到程序真正的入口(使用IDE追踪)

    一.程序的真正入口 main或WinMain只是“语法规定的程序入口” 并不是“应用程序入口”. 我们使用VC++ 6.0 的栈回溯功能,找到main函数之前的代码.菜单View -> Debu ...

  10. Customize Spring @RequestParam Deserialization for Maps and/or Nested Objects

    @RestController class MyController { @RequestMapping(...) public void test(Container container) { .. ...