8.Benchmark SQL 数据库测试工具代码——会话类
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50357671
会话类就是jTPCCTerminal,继承与jTPCCConfig,Runnable.
其中jTPCCConfig是配置文件类,Runnable是多线程并发类,具体可以大家自己网上查找之。
先来看看会话类的主要逻辑。关于5个核心事务,蛤蟆已将其抽取到单独的文档中。
1. 准备工作
设置各种变量,主要有会话名字,对应的WAREHOUSE ID,District ID, 父类,总共交易数量,以及是否停止的布尔型变量stopRunningSignal,还包括SQL执行的PreparedStatement类型。
2. 构造函数
用于实例化一个会话。输入的变量有:会话名字,W_ID,D_ID, 连接CONN,交易的数量,各事务的比重,数据仓库数量,每分钟限制的交易数量,以及父类。
将入参数值赋值给类中的变量。
然后输出一些基本信息,最后获取当前事件为会话开始时间。
3. run
调用该类的代码中执行start,就会执行run函数启动。
先根据当前事件获取一个随机种子。
然后调用executeTransactions函数,参数为交易数量。进入到executeTransactions函数。等执行结束后调用signalTerminalEnded函数自行结束。
4. stopRunningWhenPossible
设置变量stopRunningSignal变量为TRUE。
5. executeTransactions
设置变量stopRunning为FALSE(在执行时间到时,设置为TRUE)。
然后根据是执行方式(执行数次或者执行时间,打印各异)。
随机一个1~100的值,根据不同概率执行不同的事务。
通过调用executeTransaction函数实现。
如果是Delivery事务,就调用signalTerminalEndedTransaction 函数,将事务进行累加。
如果设置了每分钟执行次数的限制,计算每次交易是否超过了该速度,如果超过就需要等待。
最后判断变量stopRunningSignal,如果为TRUE,则设置变量stopRunning为TRUE。如果该变量为TRUE,函数就会调出循环就结束。
stopRunningSignal是通过stopRunningWhenPossible函数设置的,该函数在上级中的signalTerminalsRequestEnd函数中设置。signalTerminalsRequestEnd被signalTerminalEndedTransaction函数调用。signalTerminalEndedTransaction函数在每次delivery事务结束时候会进行调用。
6. executeTransaction
该函数主要根据事务类型,调用针对的事务处理函数。
其中调用NEW_ORDER事务前,1%的概率要异地供货。
1%的概率,需要回滚。
PAYMENT 事务: 85%的概率本地,15%异地
60%的概率通过last_name访问,40%的概率通过c_id访问。
等等。
事务处理后,变量transactionCount++。