KingbaseES使用kbbench计算连接耗时
前言
本文讨论一下KingbaseES数据库中如何计算数据库连接耗时。有这样一个场景,不借助第三方工具,在数据库服务端计算1000个数据库连接的总耗时,并取得每个连接耗时的平均值。怎样实现呢?我们可以借助kbbench工具。这是Kingbase数据库自带的一款客户端工具。
kbbench介绍
kbbench是一种在KingbaseES上运行基准测试的简单程序。
使用方法参考文档:https://help.kingbase.com.cn/v8/admin/reference/ref-client/sysbench.html?highlight=kbbench
测试
在数据库服务器上执行以下命令,注意在运行以下命令前要执行 kbbench -i 初始化此工具。并根据以上官方文档链接内容仔细阅读kbbench有关参数含义。
1.运行16线程测试1000并发连接耗时。
kingbase7@localhost sys_log]$ kbbench -c 1000 -t1 -j16 -S -n -USYSTEM test
transaction type: <builtin: select only>
scaling factor: 1
query mode: simple
number of clients: 1000
number of threads: 16
number of transactions per client: 1
number of transactions actually processed: 1000/1000
latency average = 9429.563 ms
tps = 106.049455 (including connections establishing)
tps = 107.145527 (excluding connections establishing)
另外开启窗口并执行以下sql,以便观察不同连接数对应的耗时,并计算并发1000个连接的耗时。
select now(),count(*) from sys_stat_activity ;\watch 0.01
在观察窗口中获取到以下信息并计算连接耗时。
Mon 31 Jul 2023 04:46:32 PM CST (every 0.01s)
now | count
-------------------------------+-------
2023-07-31 16:46:32.144347+08 | 10
(1 row)
Mon 31 Jul 2023 04:46:37 PM CST (every 0.01s)
now | count
-------------------------------+-------
2023-07-31 16:46:37.525781+08 | 990
(1 row)
TEST=# select '2023-07-31 16:46:37.525781+08'::timestamp - '2023-07-31 16:46:32.144347+08'::timestamp from dual;
?column?
-------------------------------
+000000000 00:00:05.381434000
(1 row)
1000连接总耗时5.49秒。
TEST=# select 5.381434000/980*1000;
?column?
------------------------
5.49125918367346939000
(1 row)
1000连接平均耗时0.00549秒。
TEST=# select 5.49125918367346939000/1000;
?column?
------------------------
0.00549125918367346939
(1 row)
2.运行60线程测试1000连接并发耗时。
1000个连接耗时测试,60线程耗时和16线程耗时接近。
[kingbase7@localhost sys_log]$ kbbench -c 1000 -t1 -j60 -S -n -USYSTEM test
transaction type: <builtin: select only>
scaling factor: 1
query mode: simple
number of clients: 1000
number of threads: 60
number of transactions per client: 1
number of transactions actually processed: 1000/1000
latency average = 9733.942 ms
tps = 102.733297 (including connections establishing)
tps = 107.095744 (excluding connections establishing)
Mon 31 Jul 2023 04:51:32 PM CST (every 0.01s)
now | count
-------------------------------+-------
2023-07-31 16:51:32.258220+08 | 10
(1 row)
Mon 31 Jul 2023 04:51:37 PM CST (every 0.01s)
now | count
-------------------------------+-------
2023-07-31 16:51:37.993811+08 | 975
(1 row)
TEST=# select '2023-07-31 16:51:37.993811+08'::timestamp - '2023-07-31 16:51:32.258220+08'::timestamp from dual;
?column?
-------------------------------
+000000000 00:00:05.735591000
(1 row)
1000连接总耗时5.94秒
TEST=# select 5.735591000/965*1000;
?column?
------------------------
5.94361761658031088000
(1 row)
1000连接平均耗时0.00594秒
TEST=# select 5.94361761658031088000/1000;
?column?
------------------------
0.00594361761658031088
(1 row)
3.运行200线程测试1000连接并发耗时。
[kingbase7@localhost sys_log]$ kbbench -c 1000 -t1 -j200 -S -n -USYSTEM test
transaction type: <builtin: select only>
scaling factor: 1
query mode: simple
number of clients: 1000
number of threads: 200
number of transactions per client: 1
number of transactions actually processed: 1000/1000
latency average = 4571.092 ms
tps = 218.766089 (including connections establishing)
tps = 260.840335 (excluding connections establishing)
并发线程增多时,建立连接速度加快很多。
Mon 31 Jul 2023 04:59:51 PM CST (every 0.01s)
now | count
-------------------------------+-------
2023-07-31 16:59:51.986852+08 | 10
(1 row)
Mon 31 Jul 2023 04:59:54 PM CST (every 0.01s)
now | count
-------------------------------+-------
2023-07-31 16:59:54.322502+08 | 736
(1 row)
TEST=# select '2023-07-31 16:59:54.322502+08'::timestamp - '2023-07-31 16:59:51.986852+08'::timestamp from dual;
?column?
-------------------------------
+000000000 00:00:02.335650000
(1 row)
1000连接总耗时3.21秒
TEST=# select 2.335650000/726*1000;
?column?
------------------------
3.21714876033057851000
(1 row)
1000连接平均耗时0.00321秒
TEST=# select 3.21714876033057851000/1000;
?column?
------------------------
0.00321714876033057851
(1 row)
4.运行200线程测试1000连接并发耗时,当第一次取消-S参数耗时增加。
[kingbase7@localhost ~]$ kbbench -c 1000 -t1 -j200 -n -USYSTEM test
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 1
query mode: simple
number of clients: 1000
number of threads: 200
number of transactions per client: 1
number of transactions actually processed: 1000/1000
latency average = 25094.861 ms
tps = 39.848796 (including connections establishing)
tps = 42.126236 (excluding connections establishing)
Tue 01 Aug 2023 11:20:22 AM CST (every 0.01s)
now | count
-------------------------------+-------
2023-08-01 11:20:22.635371+08 | 986
(1 row)
Tue 01 Aug 2023 11:20:11 AM CST (every 0.01s)
now | count
-------------------------------+-------
2023-08-01 11:20:11.448474+08 | 10
(1 row)
TEST=# select '2023-08-01 11:20:22.635371+08'::timestamp - '2023-08-01 11:20:11.448474+08'::timestamp from dual;
?column?
-------------------------------
+000000000 00:00:11.186897000
(1 row)
1000连接总耗时11.46秒
TEST=# select 11.186897000/976*1000;
?column?
-------------------------
11.46198463114754098000
(1 row)
1000连接平均耗时0.0114秒
TEST=# select 11.46198463114754098000/1000;
?column?
------------------------
0.01146198463114754098
(1 row)
5.运行200线程测试1000连接并发耗时,当第二次并且以后取消-S参数耗时减少。
Tue 01 Aug 2023 11:39:22 AM CST (every 0.01s)
now | count
-------------------------------+-------
2023-08-01 11:39:22.287548+08 | 811
(1 row)
Tue 01 Aug 2023 11:39:19 AM CST (every 0.01s)
now | count
-------------------------------+-------
2023-08-01 11:39:19.595927+08 | 10
(1 row)
TEST=# select '2023-08-01 11:39:22.287548+08'::timestamp - '2023-08-01 11:39:19.595927+08'::timestamp from dual;
?column?
-------------------------------
+000000000 00:00:02.691621000
(1 row)
1000连接总耗时
TEST=# select 2.691621000/801*1000;
?column?
------------------------
3.36032584269662921000
(1 row)
1000连接平均耗时
TEST=# select 3.36032584269662921000/1000;
?column?
------------------------
0.00336032584269662921
(1 row)
总结
以上测试证明,使用kbbench可计算数据库连接的耗时。当不同参数设定可能会影响耗时,例如-j参数等。这需要根据客户现场的要求进行参数的调整和测试。本次测试模拟1000个会话连接数据库,每个客户端运行1个事务。
为什么取消-S参数后第一次耗时增加,第二次并且以后执行明显耗时减少呢?
首先,取消-S参数意味着客户端不仅仅执行select语句,而是对kbbench_branches,kbbench_history表执行dml操作,这点可以通过kbbench -d参数打印出日志查看。
安装sys_buffercache扩展插件后,通过如下sql查看。第一次执行取消-S操作,kbbench_accounts表等被缓存进shared_buffer,这次经过了物理IO读,读进shared_buffer,所以耗时10s左右,而第二次执行时,shared_buffer中的buffers没有明显增多,所以节省了物理IO时间,直接读缓存会省时不少。建议连接耗时测试不要取消-S参数,因为执行dml操作势必会增加耗时。
create extension sys_buffercache;
select c.relname, count(*) as buffers
from sys_buffercache b
inner join pg_class c on b.relfilenode = pg_relation_filenode(c.oid)
and b.reldatabase in (0, (select oid from pg_database where datname = current_database()))
group by c.relname
order by 2 desc;
KingbaseES使用kbbench计算连接耗时的更多相关文章
- PHP - 计算执行程序耗时
效果: 首先在includes文件夹下编写,global.func.php函数库: <?php /* * Version:1.0 * CreateTime:2015年11月11日 * Autho ...
- JAVA中用StopWatch计算代码耗时的方法
StopWatch翻译过来的意思就是秒表,其作用也就像我们平时使用的秒一样.spring中就有提供这个工具类(org.springframework.util.StopWatch). 日常开发中,经常 ...
- 测试连接oracle数据库耗时
maven项目 主程序:ConnOracle.java package org.guangsoft.oracle; import java.sql.Connection; import java.sq ...
- Java与MySQL的连接
下载数据库驱动文件,解压并保存至任意位置 下载地址 新建Java项目,并将驱动文件添加到项目中 项目名右键-->构建路径-->配置构建路径-->添加外部Jar 在项目中新建类,编写代 ...
- 低功耗蓝牙BLE之连接事件、连接参数和更新方法
转自:http://blog.csdn.net/zzfenglin/article/details/51304084 连接事件 在一个连接当中,主设备会在每个连接事件里向从设备发送数据包.一个连接事件 ...
- MySQL的优化点总结---通过计算多种状态的百分比看MySQL的性能情况
1 读写比例: show global status like 'com_select'; 获得服务器启动到目前查询操作执行的次数:show global status like 'com_inse ...
- 百度APP移动端网络深度优化实践分享(二):网络连接优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<二>连接优化>,感谢原作者的无私分享. 一.前言 在<百度APP移动端网 ...
- Vue之computed计算属性
demo.html <!DOCTYPE html> <html lang="en" xmlns:v-bind="http://www.w3.org/19 ...
- Java自定义线程池-记录每个线程执行耗时
ThreadPoolExecutor是可扩展的,其提供了几个可在子类化中改写的方法,如下: protected void beforeExecute(Thread t, Runnable r) { } ...
- JDBC之 连接池
JDBC之 连接池 有这样的一种现象: 用java代码操作数据库,需要数据库连接对象,一个用户至少要用到一个连接.现在假设有成千上百万个用户,就要创建十分巨大数量的连接对象,这会使数据库承受极大的压力 ...
随机推荐
- 解决ufw下pptp客户端连接问题
解决ufw下pptp客户端连接问题 解决ubuntu在启动ufw的情况下pptp客户端无法链接的问题. 修改/etc/ufw/before.rules 在COMMIT之前添加如下内容: -A ufw- ...
- 从零开始写 Docker(一)---实现 mydocker run 命令
本文为从零开始写 Docker 系列第一篇,主要实现 mydocker run 命令,构造了一个具有基本的 Namespace 隔离的简单容器. 如果你对云原生技术充满好奇,想要深入了解更多相关的文章 ...
- 对yuv存储格式中的yuv420p和yuv420sp的理解
一.对yuv的认识 yuv是一种颜色编码系统,它将图像的亮度和色度分离开来.y表示亮度,即黑白信息:uv表示色度,即颜色信息.yuv常用于视频压缩和传输中,因为它可以更有效地表示人眼对亮度和色度的敏感 ...
- 李宏毅2022机器学习HW3 Image Classification
Homework3 数据集下载 在本地环境下进行实验总是令人安心,但是又苦于网上找不到数据集,虽然kaggle上有数据集但是下载存在问题 于是有了一个天才的想法,间接从kaggle上下载(利用outp ...
- win32-使用GDI+缩放图像
滑动鼠标滚轮可以改变图像大小 #include <windows.h> #include <tchar.h> #include <Urlmon.h> // URLD ...
- 负载均衡load balancing和算法分类概要介绍
一.负载均衡介绍 1.1 什么是负载均衡 负载均衡(load balancing) 它是计算机的一种技术,用来在计算机集群.网络连接.CPU.磁盘驱动器或其他资源中分配负载,以达到优化资源使用.最大化 ...
- SSH不对称密钥自动登入服务器
SSH不对称密钥自动登入服务器 1.先在自己的电脑上创建密钥对 ssh-keygen -t rsa Windows下生成SSH密钥 $ ssh-keygen -t rsa -C "youre ...
- 在Vue中使用Canvas绘制背景
好家伙, 在vue中使用canvas绘制与在html中使用canvas绘制大致相同, 但又有所区别 法一(无图片资源): vue中canvas的使用 - 掘金 (juejin.cn) 找到canca ...
- 终端SSH远程连接CentOS报错:-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
终端SSH远程连接CentOS时,报以下错误提示: -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such ...
- 解决celery与django结合后,分别启动celery和django的进程同时调用定时任务的问题
django中引入celery后发现在代码中写如下这样的定时任务,启动celery和django的工程后,他们都会调用这个定时任务导致,任务有的时候会冲突出现奇怪的问题.如何解决请继续看. sched ...