• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 调整InnoDB内存缓存插件性能

    由于InnoDBmemcached结合使用会涉及立即或以后将所有数据写入磁盘,因此预期原始性能会比单独使用memcached慢一些。使用InnoDBmemcached插件时,将memcached操作的调整目标集中在获得比等效SQL操作更好的性能上。

    基准测试表明,使用内存缓存接口的查询和 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_size。对于具有数千兆字节缓冲池的系统,innodb_buffer_pool_instances当大多数操作涉及已缓存在内存中的数据时,请考虑提高最大吞吐量的值。

    减少冗余I / O

    InnoDB有许多设置,可让您在发生崩溃的情况下的高可靠性与高写入工作负载期间的I / O开销之间进行平衡。例如,考虑设置innodb_doublewrite0innodb_flush_log_at_trx_commit2。使用不同的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则从更改为1100将提交操作的I / O开销减少了99%。如果发生中断,最多会丢失100条记录,这可能是可接受的错误范围。相反,如果应用程序进行自动收费为每一辆汽车,您将设置daemon_memcached_w_batch_size1确保每个收费记录被立即保存到磁盘。

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

    memslap命令,这是常规的一部分,分布式缓存分布,但不包含在daemon_memcached插件,可以进行基准测试的不同配置是有用的。它也可以用来生成样本键值对以用于您自己的基准测试。有关详细信息,请参见libmemcached命令行实用程序。