mysql innodb缓存_mysql8 参考手册--InnoDB内存缓存架构

InnoDB 分布式缓存插件实现的memcached作为一个MySQL插件守护进程访问该InnoDB存储引擎直接绕过MySQL的SQL层。

下图说明了daemon_memcached与SQL相比,应用程序如何通过插件访问数据。

图15.4带有集成memcached服务器的MySQL 服务器

74996f4b5cee795e00a5e88d0b8f4c71.png

显示使用SQL和memcached协议访问InnoDB存储引擎中的数据的应用程序。 应用程序使用SQL,通过MySQL Server和Handler API访问数据。 应用程序使用memcached协议绕过MySQL服务器,通过memcached插件和InnoDB API访问数据。 memcached插件由innodb_memcache接口和可选的本地缓存组成。

该功能daemon_memcached插件:

memcached作为 mysqld的守护程序插件 。双方的mysqld和 memcached的在同一个进程空间中运行,具有非常低的延迟对数据的访问。

直接访问InnoDB表,绕过SQL解析器,优化器甚至Handler API层。

标准的内存缓存协议,包括基于文本的协议和二进制协议。该 daemon_memcached插件通过了memcapable 命令的所有55个兼容性测试。

多列支持。您可以将多个列映射到键值存储的 “ value ”部分,其中列值由用户指定的分隔符分隔。

默认情况下,memcached协议用于直接读写数据InnoDB,从而使MySQL使用InnoDB 缓冲池管理内存中的缓存 。默认设置代表了高可靠性和数据库应用程序最少的惊喜。例如,默认设置可避免数据库端的未提交数据,或为内存缓存 get请求返回的陈旧数据 。

高级用户可以将系统配置为传统的 Memcached服务器,所有数据仅缓存在Memcached引擎中(内存缓存),也可以结合使用 “ memcached engine ”(内存缓存)和InnoDB memcached引擎(InnoDB 作为后端持久存储)存储)。

控制数据如何往往之间来回传递 InnoDB和memcached的 通过操作 innodb_api_bk_commit_interval, daemon_memcached_r_batch_size以及 daemon_memcached_w_batch_size 配置选项。批次大小选项默认为1,以获得最大的可靠性。

通过 配置参数 指定memcached选项 的能力daemon_memcached_option。例如,您可以更改memcached侦听的端口,减少同时连接的最大数量,更改键值对的最大内存大小,或为错误日志启用调试消息。

的innodb_api_trx_level 配置选项控制事务 隔离级别上通过处理的查询memcached的。尽管 memcached没有事务的概念 ,但是您可以使用此选项来控制memcached多久才能 看到daemon_memcached插件使用的表上发出的SQL语句引起的更改 。默认情况下, innodb_api_trx_level设置为READ UNCOMMITTED。

该innodb_api_enable_mdl 选项可用于将表锁定在MySQL级别,以便DDL无法通过SQL接口删除或更改映射的表 。没有锁,该表可以从MySQL层删除,但可以保留在InnoDB存储器中,直到 内存缓存或其他用户停止使用它为止。“ MDL ”代表“ 元数据锁定 ”。

InnoDB内存缓存和传统内存缓存之间的区别

您可能已经熟悉使用 memcached的使用MySQL,如在 使用MySQL与memcached的。本节描述集成的InnoDB memcached插件的功能与传统的有何不同 memcached。

安装:memcached库随MySQL服务器一起提供,使安装和设置相对容易。安装包括运行 innodb_memcached_config.sql脚本以创建demo_test供memcached使用的表 ,发布一条 INSTALL PLUGIN语句以启用该daemon_memcached插件,以及向MySQL配置文件或启动脚本中添加所需的memcached选项。您可能仍会安装传统的memcached 发行版,以获取其他实用程序,例如 memcp,memcat和 memcapable。

要与传统的memcached进行比较 ,请参阅 安装memcached。

部署:使用传统的memcached时,通常运行大量低容量的 memcached服务器。daemon_memcached但是,该插件的典型部署涉及较少数量的已经在运行MySQL的中型或高性能服务器。这种配置的好处是可以提高单个数据库服务器的效率,而不是利用未使用的内存或在大量服务器之间分布查找。在默认配置中,很少有内存用于 memcached,并且从缓冲池中提供内存中查找InnoDB ,它会自动缓存最近使用过的数据。与传统的MySQL服务器实例一样,请保持innodb_buffer_pool_size 配置选项的值 尽可能高(不引起操作系统级别的分页),以便在内存中执行尽可能多的工作。

要与传统的memcached进行比较 ,请参阅 memcached部署。

到期时间:默认情况下(即使用 innodb_only缓存策略),InnoDB总是返回表中的最新数据,因此到期时间选项没有实际作用。如果将缓存策略更改为caching 或cache_only,则到期选项将照常工作,但是如果请求的数据在从内存缓存中过期之前在基础表中进行了更新,则请求的数据可能会过时。

要与传统的memcached进行比较 ,请参阅 数据过期。

命名空间:memcached就像一个大目录,在其中您可以给文件提供精美的名称(带有前缀和后缀),以防止文件冲突。该 daemon_memcached插件使您可以对密钥使用类似的命名约定,并增加了一个。键名格式 。 使用表中的映射数据将其解码以引用特定的 表。该被查找或写入到指定的表。 @@table_id.keytable_idinnodb_memcache.containerskey

该@@符号仅适用于对get,add和 set函数的单独调用,而不适用于诸如incr或的其他 调用delete。要为会话中的后续memcached操作指定默认表, get请使用@@带有符号的符号 执行请求 table_id,但不包含键部分。例如:

get @@table_id

随后get,set, incr,delete,等操作使用由指定的表 table_id中的innodb_memcache.containers.name 列。

要与传统的memcached进行比较 ,请参阅“ 使用命名空间”。

散列和分发:使用innodb_only缓存策略的默认配置适用于传统部署配置,在该传统部署配置中,所有数据(例如一组复制从属服务器)在所有服务器上都可用。

如果按照分片配置在物理上划分数据,则可以在运行该daemon_memcached插件的多台计算机之间拆分数据,并使用传统的内存缓存哈希机制将请求路由到特定计算机。在MySQL方面,通常应通过add对memcached的请求插入所有数据 , 以便将适当的值存储在适当服务器上的数据库中。

要与传统的memcached进行比较 ,请参阅 memcached散列/分发类型。

内存使用情况:默认情况下(具有 innodb_only缓存策略), memcached协议与InnoDB表来回传递信息,并且InnoDB缓冲池处理内存中查找,而不是随着memcached内存使用量的增加和缩小。相对而言,内存缓存侧使用的内存很少。

如果切换缓存政策 caching或者cache_only,正常规则memcached的内存使用情况适用。用于内存缓存的数据值的内存按“ 平板 ”进行分配。您可以控制平板大小和用于memcached的最大内存 。

无论哪种方式,您都可以daemon_memcached使用熟悉的统计系统(例如,通过telnet会话通过标准协议访问) 对插件进行 监视和故障排除 。该daemon_memcached插件不包含其他实用程序 。您可以使用 memcached-tool 脚本来安装完整的内存缓存 分发。

为了与传统的比较 memcached的,请参阅 内存分配中的memcached。

线程使用:MySQL线程和内存缓存 线程共存于同一服务器上。操作系统对线程施加的限制适用于线程总数。

要与传统的memcached进行比较 ,请参阅 memcached线程支持。

登录使用:由于memcached的守护程序同时运行MySQL服务器和写入 stderr的-v, -vv和-vvv选项写入输出记录到MySQL的 错误日志。

要与传统的memcached进行比较 ,请参阅 memcached日志。

memcached的操作:熟悉 memcached的操作,例如 get,set, add,和delete可用。序列化(即表示复杂数据结构的确切字符串格式)取决于语言接口。

要与传统的memcached进行比较 ,请参阅 基本的memcached操作。

将memcached用作MySQL前端:这是InnoDB memcached插件的主要目的。集成的 memcached守护程序可提高应用程序性能,并具有InnoDB处理内存和磁盘之间的数据传输的功能,从而简化了应用程序逻辑。

要与传统的memcached进行比较 ,请参阅 将memcached用作MySQL缓存层。

实用程序:MySQL服务器包括该libmemcached库,但不包括 其他命令行实用程序。要使用诸如 memcp,memcat和 memcapable命令之类的命令,请安装完整的 memcached发行版。当 memrm和memflush 从缓存中删除项目时,这些项目也会从基础InnoDB表中删除。

要与传统的memcached进行比较 ,请参见 libmemcached命令行实用程序。

编程接口:您可以daemon_memcached使用所有支持的语言通过插件访问MySQL服务器: C和C ++, Java, Perl, Python, PHP和 Ruby。与传统的内存缓存服务器一样,指定服务器主机名和端口 。默认情况下, daemon_memcached插件在port上监听 11211。您可以同时使用 文本协议和二进制协议。您可以自定义 行为 的memcached函数在运行时。序列化(即表示复杂数据结构的确切字符串格式)取决于语言接口。

要与传统的memcached进行比较 ,请参阅 开发memcached应用程序。

常见问题:MySQL对于传统的memcached有广泛的FAQ 。该常见问题解答通常适用,除了将InnoDB 表用作内存缓存 数据的存储介质之外,这意味着您可以将内存缓存用于比以前更多的写密集型应用程序,而不是用作只读缓存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值