与传统的memcached,daemon_memcached
插件允许你控制通过调用产生的数据值的持久性添加
,集
,增加
,等等。默认情况下,通过memcached接口存储到磁盘,并调用得到
从磁盘返回最近的值。虽然默认行为没有提供最好的原始性能,但与SQL接口相比,它仍然很快InnoDB
表。
当你获得使用的经验时daemon_memcached
插件中,你可以考虑放松非关键类数据的持久性设置,冒着在宕机事件中丢失一些更新值的风险,或者返回略过时的数据。
提交的频率
持久性和原始性能之间的一个权衡是新数据和更改数据的频率承诺.如果数据是关键的,应该立即提交,以便在意外退出或中断的情况下保持安全。如果数据不那么关键,比如在意外退出后重置的计数器或可以损失的日志数据,那么您可能更喜欢提交频率较低的高原始吞吐量。
当一个memcached操作在底层中插入、更新或删除数据InnoDB
表中,更改可能提交到InnoDB
立即表(如果daemon_memcached_w_batch_size = 1
)或一段时间后(如果daemon_memcached_w_batch_size
值大于1)。在这两种情况下,更改都不能回滚。的值daemon_memcached_w_batch_size
为了避免繁忙期间的高I/O开销,在工作负载减少时提交可能会变得不频繁。作为一种安全措施,后台线程自动提交通过memcachedAPI。控件控制间隔innodb_api_bk_commit_interval
配置选项,该选项的默认设置为5
秒。
当一个memcached操作在底层中插入或更新数据InnoDB
表中,更改的数据立即对其他人可见memcached请求,因为新值仍然在内存缓存中,即使它还没有在MySQL端提交。
事务隔离
当一个memcached操作如得到
或增加
在底层上引起查询或DML操作InnoDB
表中,您可以控制操作是看到写入表的最新数据,还是只看到已提交的数据,还是看到事务的其他变体隔离级别.使用innodb_api_trx_level
控制此功能的配置选项。为此选项指定的数值对应于隔离级别,例如可重复读取
.的描述innodb_api_trx_level
有关其他设置的信息的选项。
严格的隔离级别可确保检索的数据不会回滚或突然更改,从而导致后续查询返回不同的值。然而,严格的隔离级别要求更高锁定开销,这会导致等待。对于不使用长时间运行事务的nosql风格应用程序,通常可以使用默认隔离级别或切换到不太严格的隔离级别。
禁用memcached DML操作的行锁
的innodb_api_disable_rowlock
选项可用于在以下情况禁用行锁memcached请求通过daemon_memcached
插件导致DML操作。默认情况下,innodb_api_disable_rowlock
被设置为从
这意味着memcached请求行锁得到
而且集
操作。当innodb_api_disable_rowlock
被设置为在
,memcached请求一个表锁而不是行锁。
的innodb_api_disable_rowlock
选项不是动态的。的启动时必须指定mysqld或者在MySQL配置文件中输入。
允许或禁止DDL
缺省情况下,可以执行DDL操作,比如ALTER TABLE
在桌子上使用daemon_memcached
插件。当这些表用于高吞吐量应用程序时,为了避免潜在的减速,可以通过启用禁用这些表上的DDL操作innodb_api_enable_mdl
在启动。当通过两者访问相同的表时,此选项不太合适memcached和SQL,因为它阻塞创建索引
表上的语句,这对于运行报告查询可能很重要。
将数据存储在磁盘、内存或两者中
的innodb_memcache.cache_policies
表指定是否存储通过memcached磁盘接口(innodb_only
,默认的);只在内存中,和传统的一样memcached(cache_only
);或两个(缓存
).
与缓存
设置,如果memcached在内存中找不到键,它将在InnoDB
表格返回值从得到
下电话缓存
控件中的磁盘上更新的值可能已过时InnoDB
表中未过期的数据。
缓存策略可以独立设置得到
,集
(包括增加
而且12月
),删除
,冲洗
操作。
例如,你可能会允许得到
而且集
操作来查询或更新表和memcached内存缓存的同时(使用缓存
设置),而制作删除
,冲洗
,或者两者都只操作内存中的副本(使用cache_only
设置)。这样,删除或刷新项只会使该项从缓存中过期,而最新的值将从InnoDB
在下一次请求该项时将其列在表中。
SELECT * FROM innodb_memcache.cache_policies;+--------------+-------------+-------------+---------------+--------------+ | policy_name | get_policy | set_policy | delete_policy | flush_policy | +--------------+-------------+-------------+---------------+--------------+ | cache_policy | innodb_only | innodb_only | innodb_only | innodb_only | +--------------+-------------+-------------+---------------+--------------+ mysql >更新innodb_memcache。SET set_policy = 'cache ' WHERE policy_name = 'cache_policy';
innodb_memcache.cache_policies
值只在启动时读取。更改该表中的值后,卸载并重新安装daemon_memcached
插件,以确保更改生效。
mysql>卸载插件mysql>安装插件daemon_memcached soname“libmemcached.so”;