栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

tpcc-mysql预热阶段的操作

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

tpcc-mysql预热阶段的操作

工作中遇到疑问:tpcc-mysql预热阶段具体干了什么?
先上答案:预热阶段与正式测试时进行的操作是一样的!
结果很惊人,探索过程如下:
网上找不到解答,研究了下代码,记录如下:

lampup_time

首先,确定了一下记录预热时间的变量:lampup_time,并以此为关键词进行检索,发现以下代码:

  printf("nRAMP-UP TIME.(%d sec.)n",lampup_time);
  fflush(stdout);
  sleep(lampup_time);
  printf("nMEASURING START.nn");
  fflush(stdout);

与使用时的输出吻合。但没有获得有用信息。

线程数组

之后将重点放到研究其线程数组t上,猜测具体预热操作在其中完成:

 for( t_num=0; t_num < num_conn; t_num++ ){
    thd_arg[t_num].port= port;
    thd_arg[t_num].number= t_num;
    pthread_create( &t[t_num], NULL, (void *)thread_main, (void *)&(thd_arg[t_num]) );
  }

点进thread_main函数,其主体内容为mysql资源的初始化和释放,夹在中间有一句:

r = driver(t_num);

猜测具体sql操作在其中,点进去。咱来细品driver这个函数:

int driver (int t_num)
{
    int i, j;
    
    while( activate_transaction ){
      switch(seq_get()){
      case 0:
	do_neword(t_num);
	break;
      case 1:
	do_payment(t_num);
	break;
      case 2:
	do_ordstat(t_num);
	break;
      case 3:
	do_delivery(t_num);
	break;
      case 4:
	do_slev(t_num);
	break;
      default:
	printf("Error - Unknown sequence.n");
      }
    }
    return(0);
}

它用一个switch语句选择五种操作,刚好与tpcc的五种操作相对应:

  • do_neword:New-Order
  • do_payment:Payment
  • do_ordstat:Delivery
  • do_delivery:Order-Status
  • do_slev:Stock-Level
    再去看了下seq_get()函数,它里面主要是用随机函数生成一个数组,根据数组值来决定采用上文的哪种操作方式。随机函数里的一些操作保证了五种操作的占比适当。
    那么问题来了,预热操作呢,遍寻该文件也找不到,再结合这句意味深长的注释“Actually, WaitTimes are needed…”,妈耶作者是偷懒压根没写预热操作诶!结合main中的代码sleep(lampup_time); 搁这预热操作和正式测试阶段操作是一样的!
    !!??
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/684723.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号