调整InnoDB内存缓存插件性能
由于InnoDB
与memcached结合使用会涉及立即或以后将所有数据写入磁盘,因此预期原始性能会比单独使用memcached慢一些。使用InnoDB
memcached插件时,将memcached操作的调整目标集中在获得比等效SQL操作更好的性能上。
基准测试表明,使用内存缓存接口的查询和 DML操作(插入,更新和删除)比传统SQL快。DML操作通常会看到较大的改进。因此,请考虑让写密集型应用程序首先使用memcached接口。还应考虑优先考虑使用缺乏可靠性的快速,轻量级机制的写密集型应用程序的适配。
调整SQL查询
最适合简单GET
请求的查询类型是那些具有单个子句或该子句中具有一组AND
条件的查询WHERE
:
SQL :SELECT colFROM tblWHERE key = 'key_value'; memcached:get key_valueSQL :SELECT colFROM tblWHERE 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 + ":" + val3get key_valueSQL :SELECT 'key exists!'FROM tblWHERE EXISTS (SELECT col1FROM tblWHERE 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_size
。对于具有数千兆字节缓冲池的系统,innodb_buffer_pool_instances
当大多数操作涉及已缓存在内存中的数据时,请考虑提高最大吞吐量的值。
减少冗余I / O
InnoDB
有许多设置,可让您在发生崩溃的情况下的高可靠性与高写入工作负载期间的I / O开销之间进行平衡。例如,考虑设置innodb_doublewrite
来0
和innodb_flush_log_at_trx_commit
到2
。使用不同的innodb_flush_method
设置来衡量性能。
有关减少或调整表操作的I / O的其他方法,请参见“优化InnoDB磁盘I / O”。
减少交易费用
的1为默认值daemon_memcached_r_batch_size
,并daemon_memcached_w_batch_size
适用于结果的最大的可靠性和存储或更新的数据的安全性。
根据应用程序的类型,您可以增加这两个设置中的一个或两个,以减少频繁提交操作的开销。在繁忙的系统上,您可能会增加daemon_memcached_r_batch_size
,因为知道通过SQL对数据所做的更改可能不会立即对memcached可见(即,直到处理了N
更多get
操作之前)。当处理必须可靠存储每个写操作的数据时,请将daemon_memcached_w_batch_size
设置为1
。在处理仅用于统计分析的大量更新时增加设置,在这种N
情况下,崩溃中丢失最后的更新是可以接受的风险。
例如,假设有一个系统监视穿过繁忙桥梁的交通,每天记录大约100,000辆车的数据。如果应用程序使用不同类型的车辆来分析流量模式,daemon_memcached_w_batch_size
则从更改为1
,100
将提交操作的I / O开销减少了99%。如果发生中断,最多会丢失100条记录,这可能是可接受的错误范围。相反,如果应用程序进行自动收费为每一辆汽车,您将设置daemon_memcached_w_batch_size
以1
确保每个收费记录被立即保存到磁盘。
由于在磁盘上InnoDB
组织内存缓存键值的方式,如果您要创建大量键,则按应用程序中的键值并按add
排序顺序对数据项进行排序可能会更快,而不是按任意顺序创建键。
的memslap命令,这是常规的一部分,分布式缓存分布,但不包含在daemon_memcached
插件,可以进行基准测试的不同配置是有用的。它也可以用来生成样本键值对以用于您自己的基准测试。有关详细信息,请参见libmemcached命令行实用程序。