Row Cache For InnoDB 第二版优化(附带安装和配置说明)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

下载见:http://code.google.com/p/row-cache-for-innodb/downloads/detail?name=row_cache_for_mysql.5.1.48_2011_06_16.diff&can=2&q=#makechanges

下面说一下第二版的一个改进:

1. log的显示优化了.能够显示出打log的时间了,也能正确换行
2. 优化misc内存的占用..
3. 对小内存分配进行了优化(单独的内存池)
4. 可配置对需要的索引进行缓存,而不是无差别的对所有索引缓存(支持通配符哦)

这个功能的目的是为了能使缓存可控,并不是所有的数据都合适被row cache,只有那些数据比较离散的合适,比如辅助索引5. 支持使用操作系统的malloc进行内存分配(如果你用TC_malloc或JE_malloc可以尝试开启此功能)
6. 支持在线清空row cache缓存
7. 修正一些可能会引起crash的地方
8. 修正一个可能会导致内存泄露的地方

这次的patch经过了比较长时间(跑了一个礼拜)的高压力稳定性测试.应该是比较稳定了,建议大家使用这个版本的patch

还存在的一些问题和接下去要做的一些优化

1. misc的内存占用还是个大问题.. 
32位下一个misc结构要使用48个字节的内存.64位下面就需要将近90个字节了,所以需要做指针压缩
也可以考虑一个misc结构缓存多条记录的方式来提高内存利用率2. 内存碎片

有使用row cache的一些弟兄也可以给我一些反馈,不管是好的还是不好的,都有助于我更好的维护row cache哦

可以发邮件到zephyrleaves@gmail.com ,谢谢

 
附安装和配置说明中文版: 
 安装

1. 下载5.1.48版的mysql源码 http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.48.tar.gz
2. 解压mysql源码

tar zvxf mysql-5.1.48.tar.gz3. 打上row cache for innodb的补丁 patch -p0 < ./row_cache_for_mysql.5.1.48_2011_05_11.diff4. Configure

建议参数: CFLAGS=”-O3″ CXX=gcc CXXFLAGS=”-O3 -felide-constructors -fno-exceptions -fno-rtti” ./configure –prefix=/usr/mysql –with-extra-charsets=all –with-plugins=partition,heap,innobase,myisam,myisammrg,csv –enable-assembler5. make & make install 新增的配置(my.cnf)(row cache是作用在innodb_plugin之上的哦,记得开启innodb_plugin) innodb_row_cache_mem_pool_size

分配给Row cache 的内存大小 默认1M innodb_row_cache_on 开启row cache 的开关,如果是OFF,那么一切内存都不会被分配
默认OFF innodb_row_cache_cell_num

row cache所使用的hash table的cell数,越大越容易被一次命中,但是也越占内存(也还好,也就占一个指针的空间) 默认 1000 innodb_row_cache_mutex_num_shift 由于row cache是使用多缓存实例的方式来提高并发性,这个参数就是用来配置实例数的,由于实例数必须是2的幂,所以实例数就是(1<<innodb_row_cache_mutex_num_shift) 即2^innodb_row_cache_mutex_num_shift 这个数字建议比innodb_thread_concurrency 大一点就行了,不需要很大
默认 6 innodb_row_cache_additional_mem_pool_size

额外的内存池,用于分配misc需要用到的内存,当innodb_row_cache_additional_mem_pool_size分配的内存用光时misc会到innodb_row_cache_mem_pool_size分配的内存里面去申请内存 默认 1M innodb_row_cache_index 用于配置需要被缓存的索引
配置样例:innodb_row_cache_index = test/test_large:idx_age  , test是数据库, test_large是表,idx_age 是索引,如果是主索引的话用PRIMARY 配置是支持 和 ? 这样的通配符的 如果不配置就是对所有索引进行缓存
这个配置是可以被在线更新的哦 默认为NULL innodb_row_cache_clean_cache 这个主要是用来做Debug用的
在线把这个值设置为1时 会清空row cache 显示的值 永远是0 innodb_row_cache_use_sys_malloc 新增的状态(使用show status可以看到)

Innodb_row_cache_n_get 总的向row cache请求数,包括可能missing的请求数 Innodb_row_cache_n_geted 从row cache返回成功的数量 Innodb_row_cache_lru_count row cache一共缓存记录数 Innodb_row_cache_lru_n_add 向row cache一共添加的记录数 Innodb_row_cache_lru_n_evict 被row cache逐出的记录数 Innodb_row_cache_lru_n_make_first 被row cache置顶的记录数(就是被访问到的次数 应该和Innodb_row_cache_n_geted是相等的,不过Innodb_row_cache_lru_n_make_first是在锁内的更精确 ) Innodb_row_cache_mem_pool_size row cache分配的内存数Innodb_row_cache_mem_pool_used 在show innodb status 上也加入了关于row cache使用情况:

本文来源于"阿里中间件团队播客",原文发表时间"  2011-09-10"

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
14小时前
|
存储 监控 关系型数据库
如何优化InnoDB的整体性能?
【5月更文挑战第14天】如何优化InnoDB的整体性能?
9 2
|
15小时前
|
监控 关系型数据库 MySQL
innodb_buffer_pool_instances 如何根据cpu和内存进行配置
`innodb_buffer_pool_instances` 是用于配置 InnoDB 缓冲池实例数的参数。每个实例都管理缓冲池的一部分,这有助于提高并发性能。通常,你可以根据系统的 CPU 和内存来调整这个参数,以获得更好的性能。 以下是一些建议和步骤,帮助你根据 CPU 和内存进行 `innodb_buffer_pool_instances` 的配置: 1. **了解系统资源:** 首先,了解系统的硬件资源,特别是内存和CPU。检查系统上可用的物理内存和 CPU 核心数量。 2. **考虑每个实例的大小:** 在配置 `innodb_buffer_pool_instances` 时,
|
SQL 关系型数据库 MySQL
[MySQL优化案例]系列 — 索引、提交频率对InnoDB表写入速度的影响
[MySQL优化案例]系列 — 索引、提交频率对InnoDB表写入速度的影响
104 0
[MySQL优化案例]系列 — 索引、提交频率对InnoDB表写入速度的影响
|
存储 Oracle 关系型数据库
[MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率
[MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率
125 0
[MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率
|
SQL 关系型数据库 MySQL
MySQL 5.7下InnoDB对COUNT(*)的优化
MySQL 5.7下InnoDB对COUNT(*)的优化
169 0
MySQL 5.7下InnoDB对COUNT(*)的优化
|
SQL 关系型数据库 MySQL
MySQL 5.7下InnoDB对COUNT(*)的优化
MySQL 5.7下InnoDB对COUNT(*)的优化
MySQL 5.7下InnoDB对COUNT(*)的优化
|
SQL 关系型数据库 MySQL
[MySQL优化案例]系列 — 索引、提交频率对InnoDB表写入速度的影响
[MySQL优化案例]系列 — 索引、提交频率对InnoDB表写入速度的影响
[MySQL优化案例]系列 — 索引、提交频率对InnoDB表写入速度的影响
|
存储 Oracle 关系型数据库
[MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率
[MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率
[MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率
|
关系型数据库 数据库 索引
InnoDB btree latch 优化历程
(一般在数据库里面latch 指的是物理Lock, Lock 指的是事务的逻辑lock, 这里混用) 在InnoDB 的实现中, btree 主要有两种lock: index lock 和 page lock index lock 就是整个Index 的lock, 具体在代码里面就是 dict_index->lock page lock 就是我们在btree 里面每一
639 0
|
存储 关系型数据库 MySQL
MySQL优化系列(五)--数据库存储引擎(主要分析对比InnoDB和MyISAM以及讲述Mrg_Myisam分表)
MySQL优化系列(五)--数据库存储引擎(主要分析对比InnoDB和MyISAM以及讲述Mrg_Myisam分表) 之前一直是使用默认MySQL的InnoDB存储引擎,没有思考过为什么使用,也没思考过其优缺和其他数据库存储引擎。
2276 0