最近大牛 姜承尧  也在测试Row Cache,发现使用sysbench来进行测试效果不是很明显.

分析了一下 sysbench的三个测试场景uniform,gaussian,special都不是很符合Row Cache的使用场景导致效果不明显

先来解释一下 Row Cache要解决的问题主要是在有热门数据且热门数据分布很离散的情况下Page缓存导致的内存利用率低的问题,我们做过测试,在innodb内部对Page访问打点的统计来看,一个row有500字节大小,热门数据大概占千分之一地情况下,Page缓存的利用率(就是16K读进来,真正被上层read的数据大小的比例)在20%以下,就是说 80%的内存是被浪费的.

而现在MySQL的应用由于数据量巨大使用MySQL后都是分库分表,而且为了能每个库没有热点,基本都是按取模的方式进行分表,导致热门数据基本都是很平均的分布在各个不同的Page上.而分库分表之后基本没有了range查询,都是类似select from test where uuid=XX这样的key-value类型的查询,这样的查询就导致了内存利用率低的问题

Row Cache就是为了解决这样的场景(一般互联网应用规模到了一定程度应该都会有这个问题).

接下来我们看看sysbench 3个场景的实现 uniform:

*

?
1
2
3
4
unsigned ``int rnd_func_uniform(``void``)
{
  ``return 1 + sb_rnd() % args.table_size;
}

  • 完全按随机数从整个table_size取id
  • 这个场景下没有热门数据一说* gaussian:

  • ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    unsigned ``int rnd_func_gaussian(``void``)
    {
      ``int          sum;
      ``unsigned ``int i;
      ``for``(i=0, sum=0; i < args.dist_iter; i++)
        ``sum += (1 + sb_rnd() % args.table_size);
      ``return sum / args.dist_iter;
    }

  • 按高斯分布取id,默认取值范围也是整个tabel_size,默认方差是12,当然方差越高,分布是越集中的.但也会导致结算量大增

  • 这个场景下基本也是没有热门数据一说* special:
    既然都不符合,那我们就来改一下sysbench让他符合Row Cache的场景.3个场景来说special最符合,只要改一行代码就可以啦
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    unsigned ``int rnd_func_special(``void``)
    {
      ``int          sum = 0;
      ``unsigned ``int i;
      ``unsigned ``int d;
      ``unsigned ``int res;
      ``unsigned ``int range_size;
      ``if (args.table_size == 0)
        ``return 0;
      ``/* Increase range size for special values. */
      ``range_size = args.table_size * (100 / (100 - args.dist_res));
      ``/* Generate evenly distributed one at this stage  */
      ``res = (1 + sb_rnd() % range_size);
      ``/* For first part use gaussian distribution */
      ``if (res <= args.table_size)
      ``{
        ``for``(i = 0; i < args.dist_iter; i++)
        ``{
          ``sum += (1 + sb_rnd() % args.table_size);
        ``}
        ``return sum / args.dist_iter;
      ``}
      ``/*
       ``* For second part use even distribution mapped to few items
       ``* We shall distribute other values near by the center
       ``*/
      ``d = args.table_size * args.dist_pct / 100;
      ``if (d < 1)
        ``d = 1;
      ``res %= d;
      ``/* Now we have res values in SPECIAL_PCT range of the data */
      ``//res += (args.table_size / 2 - args.table_size * args.dist_pct / (100 * 2));
      ``res *= (100/args.dist_pct); ``//这下够离散了
      ``return res;
    }

可以直接下载我修改好的包哦

http://code.google.com/p/row-cache-for-innodb/downloads/detail?name=sysbench-0.4.8.tar.gz&can=2&q=#makechanges

参考执行命令:

sysbench --test=oltp --oltp-test-mode=simple  --oltp-skip-trx=on
--oltp-table-size=80000000  --oltp-range-size=1
--mysql-host=localhost --mysql-user=xx --mysql-password=xx
--oltp-read-only=on --init-rng=on --num-threads=70
--oltp-dist-type=special --oltp-dist-pct=1 --oltp-dist-res=80
--max-requests=0 --max-time=1800 run
</div>

本文来源于"阿里中间件团队播客",原文发表时间"  2011-09-10 "

使用sysbench来测试Row Cache解惑相关推荐

  1. 【等待事件】序列等待事件总结(enq: SQ - contention、row cache lock、DFS lock handle和enq: SV - contention)...

    [等待事件]序列等待事件总结(enq: SQ - contention.row cache lock.DFS lock handle和enq: SV - contention) [等待事件]序列等待事 ...

  2. 用systemtap对sysbench IO测试结果的分析1

    http://www.actionsky.com/docs/archives/171  2016年5月6日  黄炎 近期在一些简单的sysbench IO测试中, 遇到了一些不合常识的测试结果. 从结 ...

  3. sysbench压力测试工具简介和使用(一)

    sysbench压力测试工具安装和参数介绍 一.sysbench压力测试工具简介: sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据 ...

  4. Oracle Row cache lock图解

    Oracle Row cache lock(dictionary cache)图解   转载于:https://blog.51cto.com/maclean/1278273

  5. oracle中的序列 cache,oracle row cache lock 之sequence

    今天遇到一个生产库产生大量row cache lock,以下是相应步骤: 1 查询当时P1的情况 select INSTANCE_NUMBER,p1,count(*) cnt from dba_his ...

  6. WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!的分析

    今天我的数据库hang住了,查看告警日志提示 WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! pid=31 AIX 5.3 是一个RAC环境,10.2.0. ...

  7. Troubleshooting: WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! (文档 ID 278316.1)

    目录(?)[-] APPLIES TO PURPOSE TROUBLESHOOTING STEPS What is a Row Cache Enqueue Lock What is the meani ...

  8. WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!

            相关文章:<cursor: pin S wait on X等待事件的处理过程>http://space.itpub.net/23135684/viewspace-73169 ...

  9. WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK

    现象: 1.数据库ALERT持续报如下错误,一段时间后数据库实例Hang住无法使用 Wed Oct 26 09:10:52 2011 >>> WAITED TOO LONG FOR ...

最新文章

  1. linux salt命令 -e,linux 下 Salt 命令的疑难杂症
  2. Enterprise Library 5.0发布
  3. 计算机CPU哪家好,2019年电脑cpu排行榜_电脑CPU哪个好 电脑CPU排行榜2019
  4. Qmake创建项目文件
  5. X264码率控制流程分析
  6. 八类网线和七类网线的区别_什么是七类网线?七类网线水晶头如何制作?
  7. Swagger工作笔记001---Swagger2的使用
  8. 移动网络安全_新突破!青海移动在2020年中国移动网络安全运维技能竞赛大赛中荣获三等奖!...
  9. Python自动下载最新的chromedriver
  10. 程序的静态链接,动态链接和装载
  11. 自旋锁spin_lock
  12. SPSSV20.0 下载及安装【SPSS 001期】
  13. 蓝桥杯题库及答案python版_蓝桥杯试题库的历届真题版.doc
  14. 小程序input获得焦点触发_小程序文本框焦点 小程序input自动获取焦点
  15. BOOST升压有源功率因数校正
  16. 计算机访问小米摄像机,小米摄像头连接教程
  17. 双显示器 启动黑屏 黑苹果_黑苹果开机加载黑屏
  18. 【转】PIC单片机的 程序存储器,数据存储器,EEPROM区别
  19. Python也有对象了哈哈哈哈哈哈嗝
  20. Web前端低代码介绍的ppt大纲

热门文章

  1. 机器学习算法(5)——决策树(ID3、C4.5、CART)
  2. LeetCode-1两数之和
  3. 7-104 6翻了 (15 分)
  4. 7-2 字符串逆序 (15 分)
  5. 计算1!+2!+...+n!
  6. java方法嵌套数据源切换_SpringBoot AOP方式实现多数据源切换的方法
  7. java 扫雷游戏_java的扫雷小游戏(超简单)
  8. 训练自己的数据_PyTorch版CenterNet训练自己的数据集
  9. Matlab图像处理相关
  10. 欧几里得与扩展欧几里得总结