基于Flexus云服务器X实例的数据库性能测试

93 阅读6分钟

🔴大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂

@TOC

写在前面  

当前,华为云828 B2B企业节正如火如荼地进行中,此次活动中,Flexus X实例的促销力度令人瞩目,建议各位技术爱好者前往了解。尤其是那些对服务器计算能力有着极高要求,并且在搭建MySQL、Redis、Nginx等方面追求卓越性能的朋友们,这次的优惠绝对值得你们关注。不容错过的机会就在眼前,快来抓住这次提升技术实力的良机!

恰好,我手里搞到了一台Flexus云服务器X实例的云服务器。

今天,我们对手里的这台:Flexus云服务器X实例机器进行一个数据库性能评测,这款服务器,之前也做过一些评测,例如大模型的、基础评测,效果都还不错,现在我们看看使用官方的mysql加速,评测一下看看效果表现的怎么样。    

选择配置  

如果需要选择服务器,可以直接从官网进行设定配置即可,不过需要注意的是,我们在正常的选配置的同时,需要勾选一下mysql性能加速这个选项,如下图所示:

安装mysql数据库  

我比较懒,所以一般都是拿到新服务器后,直接先安装个宝塔面板,然后所有的环境都在宝塔面板里面直接搭建,常见的软件:mysql,nginx,redis ,jdk等,都通过宝塔的软件商店直接安装,方便省事还不容易出问题,我这边数据库安装的是mysql8.0,安装的地方如下所示:    

安装完数据库后,我们可以使用sqlyong等工具进行远程连接测试。

root密码从这里查看:

在远程工具中填写地址、端口、用户名以及密码即可。

大家可以看到,会报错,这个错误表示:远程连接失败,下面我们来看看如何解决这个问题。    

解决mysql远程连接问题  

默认,mysql数据库对于root用户是不开放远程连接的权限的,我们需要手动修改root用户的远程连接权限,下面是修改步骤。

控制台中登录数据库  

1.输入如下命令登录mysql数据库:

mysql -u root -p            

接下来会提示让你输入密码,那么我们直接将上面看到的root密码输入回车即可。

1.选择数据库

use mysql;            

3. 查询user表中root用户的权限。

select user,host from user;            

可以看的出来,都是localhost,接下来我们需要将localhost修改 成%。

1.修改root用户的权限:    

update user set Host='%' where User='root';            

然后如图所示,再次查询,发现已经修改 完成。

1.刷新权限:

flush privileges;            

flush hosts;            

最后,我们从工具中在试试看看。

发现可以连接成功啦。

mysql性能测评  

我们通过一个sh脚本进行测评,脚本内容如下所示:

创建脚本  

#!/bin/bash            

数据库配置            

HOST="localhost"            
PORT="3306"            
USER="your_username"            
PASSWORD="your_password"            
DATABASE="your_database"            

创建测试表            

CREATE_TABLE_SQL="CREATE TABLE IF NOT EXISTS test_performance (            
id INT AUTO_INCREMENT PRIMARY KEY,            
value VARCHAR(255)            
);"            

插入数据的SQL语句            

INSERT_SQL="INSERT INTO test_performance (value) VALUES ('test_value');"            

更新数据的SQL语句            

UPDATE_SQL="UPDATE test_performance SET value = 'updated_value' WHERE id = %d;"            

删除数据的SQL语句            

DELETE_SQL="DELETE FROM test_performance WHERE id = %d;"            

查询数据的SQL语句            

SELECT_SQL="SELECT * FROM test_performance;"            

连接数据库            

mysql -h"HOST"P"HOST" -P"PORT" -u"USER"p"USER" -p"PASSWORD" -e "CREATETABLESQL""CREATE_TABLE_SQL" "DATABASE"            

开始测试            

echo "开始测试数据库性能..."            

插入数据测试            

start_time=(date+foriin1..1000      do          mysqlh"(date +%s)             for i in {1..1000}             do                 mysql -h"HOST" -P"PORT"u"PORT" -u"USER" -p"PASSWORD"e"PASSWORD" -e "INSERT_SQL" "DATABASE"      done      endtime=DATABASE"             done             end_time=(date +%s)            
echo "插入1000条数据耗时: $((end_time - start_time))秒"            

更新数据测试            

start_time=(date+foriin1..1000      do          mysqlh"(date +%s)             for i in {1..1000}             do                 mysql -h"HOST" -P"PORT"u"PORT" -u"USER" -p"PASSWORD"e"PASSWORD" -e "(printf "UPDATESQL"UPDATE_SQL" i)" "DATABASE"      done      endtime=DATABASE"             done             end_time=(date +%s)            
echo "更新1000条数据耗时: $((end_time - start_time))秒"            

删除数据测试            

start_time=(date+foriin1..1000      do          mysqlh"(date +%s)             for i in {1..1000}             do                 mysql -h"HOST" -P"PORT"u"PORT" -u"USER" -p"PASSWORD"e"PASSWORD" -e "(printf "DELETESQL"DELETE_SQL" i)" "DATABASE"      done      endtime=DATABASE"             done             end_time=(date +%s)            
echo "删除1000条数据耗时: $((end_time - start_time))秒"            

查询数据测试            

start_time=(date+mysqlh"(date +%s)             mysql -h"HOST" -P"PORT"u"PORT" -u"USER" -p"PASSWORD"e"PASSWORD" -e "SELECT_SQL" "DATABASE"      endtime=DATABASE"             end_time=(date +%s)            
echo "查询所有数据耗时: $((end_time - start_time))秒"            

echo "数据库性能测试结束。"            

从脚本中,我们可以看的出来,针对对数据库的增删改操作,查看数据库的耗时,以上为1000条数据的数据。

将此脚本保存为test_db_performance.sh,并赋予执行权限:

chmod +x test_db_performance.sh            

运行脚本  

./test_db_performance.sh            

可以看到,正在执行操作....我们需要稍做等待,看看耗时。

插入1000条数据的耗时:更新1000条数据的耗时:删除1000条数据的耗时:整体表现还行。

第二次进行1000条数据测试:

有人可能要说了,1000条数据,测得没意义,那么接下来我们测试一下10万条数据试试?

测试10万条数据的插入、更新以及删除的耗时  

修改一下脚本:

#!/bin/bash            

数据库配置            

           
HOST="xxx"            
PORT="3306"            
USER="root"            
PASSWORD="xxx"            
DATABASE="schooldb"            

测试数据量            

DATA_SIZE=100000  # 例如,设置为10万条数据            

创建测试表            

CREATE_TABLE_SQL="CREATE TABLE IF NOT EXISTS test_performance (            
id INT AUTO_INCREMENT PRIMARY KEY,            
value VARCHAR(255)            
);"            

插入数据的SQL语句            

INSERT_SQL="INSERT INTO test_performance (value) VALUES ('test_value_%d');"            

更新数据的SQL语句            

UPDATE_SQL="UPDATE test_performance SET value = 'updated_value_%d' WHERE id = %d;"            

删除数据的SQL语句            

DELETE_SQL="DELETE FROM test_performance WHERE id = %d;"            

连接数据库并创建表            

mysql -h"HOST"P"HOST" -P"PORT" -u"USER"p"USER" -p"PASSWORD" -e "CREATETABLESQL""CREATE_TABLE_SQL" "DATABASE"            

测试插入            

start_time=(date+foriin(date +%s%N)  # 获取纳秒级时间戳             for i in (seq 1DATASIZE);do          mysqlh"DATA_SIZE); do                 mysql -h"HOST" -P"PORT"u"PORT" -u"USER" -p"PASSWORD"e"PASSWORD" -e "(printf "INSERTSQL"INSERT_SQL" i)" "DATABASE"2>/dev/null      done      endtime=DATABASE" 2>/dev/null             done             end_time=(date +%s%N)            
insert_time=((endtimestarttime))      echo"插入((end_time - start_time))             echo "插入 DATA_SIZE 条数据耗时:((inserttime/1000000000))((insert_time/1000000000))秒 ((insert_time%1000000000))纳秒"            

测试更新            

start_time=(date+foriin(date +%s%N)             for i in (seq 1DATASIZE);do          mysqlh"DATA_SIZE); do                 mysql -h"HOST" -P"PORT"u"PORT" -u"USER" -p"PASSWORD"e"PASSWORD" -e "(printf "UPDATESQL"UPDATE_SQL" ii)""i)" "DATABASE" 2>/dev/null            
done            
end_time=(date+updatetime=(date +%s%N)             update_time=((end_time - start_time))            
echo "更新 DATASIZE条数据耗时:DATA_SIZE 条数据耗时:((update_time/1000000000))秒 $((update_time%1000000000))纳秒"            

测试删除            

start_time=(date+foriin(date +%s%N)             for i in (seq 1DATASIZE);do          mysqlh"DATA_SIZE); do                 mysql -h"HOST" -P"PORT"u"PORT" -u"USER" -p"PASSWORD"e"PASSWORD" -e "(printf "DELETESQL"DELETE_SQL" i)" "DATABASE"2>/dev/null      done      endtime=DATABASE" 2>/dev/null             done             end_time=(date +%s%N)            
delete_time=((endtimestarttime))      echo"删除((end_time - start_time))             echo "删除 DATA_SIZE 条数据耗时:((deletetime/1000000000))((delete_time/1000000000))秒 ((delete_time%1000000000))纳秒"            

将脚本传入服务器后,同样给一下权限,然后执行:

./test_db_max.sh            

输出结果如下:

插入耗时:242秒更新耗时:241秒删除耗时:200秒

总结:  

整体来说,性能还是很强悍的,在跑数据的时候,cpu以及内存的占用也不高,我这边只是用shell脚本来进行测评的,实际开发中,我们可能用的是某个开发语言,比如java 或者python 或者go等,一般这么大的操作量都会使用多线程并行执行,耗时比这个好要更低。