Documentation Home

14.21.5.3 调整 InnoDB memcached 插件性能

因为与memcachedInnoDB结合使用 涉及将所有数据写入磁盘,无论是立即还是稍后,原始性能预计会比单独使用 memcached慢一些。使用 memcached插件时,将memcached操作的调整目标集中在实现比同等 SQL 操作更好的性能上。 InnoDB

基准表明 使用memcached接口的查询和DML操作(插入、更新和删除) 比传统 SQL 更快。DML 操作通常会看到更大的改进。因此,首先考虑适配写入密集型应用程序以使用 memcached接口。还要考虑优先调整使用缺乏可靠性的快速、轻量级机制的写入密集型应用程序。

调整 SQL 查询

最适合简单 GET请求的查询类型是那些带有单个子句或子句中的一组AND条件的查询 WHERE

SQL:
SELECT col FROM tbl WHERE key = 'key_value';

memcached:
get key_value

SQL:
SELECT col FROM tbl WHERE col1 = val1 and col2 = val2 and col3 = val3;

memcached:
# Since you must always know these 3 values to look up the key,
# combine them into a unique string and use that as the key
# for all ADD, SET, and GET operations.
key_value = val1 + ":" + val2 + ":" + val3
get key_value

SQL:
SELECT 'key exists!' FROM tbl
  WHERE EXISTS (SELECT col1 FROM tbl WHERE KEY = 'key_value') LIMIT 1;

memcached:
# Test for existence of key by asking for its value and checking if the call succeeds,
# ignoring the value itself. For existence checking, you typically only store a very
# short value such as "1".
get key_value
使用系统内存

为了获得最佳性能,请 通过 配置选项将daemon_memcached插件部署在配置为典型数据库服务器的机器上,其中大部分系统 RAM 专用于InnoDB 缓冲池innodb_buffer_pool_sizeinnodb_buffer_pool_instances 对于具有数 GB 缓冲池的系统,当大多数操作涉及已缓存在内存中的数据时 ,请考虑提高最大吞吐量的值 。

减少冗余 I/O

InnoDB有许多设置可让您在发生崩溃时的高可靠性与高写入工作负载期间的 I/O 开销量之间进行平衡。例如,考虑设置 innodb_doublewriteto 0innodb_flush_log_at_trx_commit to 2innodb_flush_method使用不同的设置 测量性能 。

笔记

innodb_support_xa已弃用;希望在未来的版本中将其删除。从 MySQL 5.7.10 开始,InnoDB始终启用 XA 事务中对两阶段提交的支持, innodb_support_xa不再允许禁用。

有关减少或调整表操作的 I/O 的其他方法,请参阅 第 8.5.8 节,“优化 InnoDB 磁盘 I/O”

减少交易开销

daemon_memcached_r_batch_size 和 的默认值 1 daemon_memcached_w_batch_size 旨在实现结果的最大可靠性和存储或更新数据的安全性。

根据应用程序的类型,您可以增加其中一个或两个设置以减少频繁 提交操作的开销。在繁忙的系统上,您可能会增加 daemon_memcached_r_batch_size,因为您知道通过 SQL 对数据所做的更改可能不会立即对memcached可见(也就是说,直到处理N更多get 操作)。在处理必须可靠地存储每个写入操作的数据时,将 daemon_memcached_w_batch_size 设置保留为1。在处理仅用于统计分析的大量更新时增加设置,其中丢失最后一个 N意外退出的更新是可以接受的风险。

例如,假设一个系统监控通过繁忙桥梁的交通,每天记录大约 100,000 辆车的数据。如果应用程序对不同类型的车辆进行计数以分析交通模式,将 提交操作的 I/O 开销daemon_memcached_w_batch_size1更改为 99%。100如果发生中断,最多会丢失 100 条记录,这可能是可接受的误差范围。相反,如果应用程序为每辆车执行自动收费,您将设置 daemon_memcached_w_batch_size1确保每条收费记录立即保存到磁盘。

由于在磁盘上InnoDB组织 memcached键值的方式,如果您要创建大量键,在应用程序中按键值对数据项进行 add排序并按排序顺序可能会更快,而不是按任意顺序创建键.

memslap命令是常规memcached发行的一部分,但不包含在插件中,可用于对不同配置进行基准测试。它还可用于生成示例键值对以在您自己的基准测试中使用。有关详细信息,请参阅 libmemcached命令行实用程序daemon_memcached