GreatSQL社区

搜索

[已解决] 数据库查询速度优化

558 9 2023-12-18 16:25
现象描述:
相同的数据,在本地mysql数据库查询(window环境),查询速度大概0.1-0.2秒左右,但是导入到greatsql(麒麟操作系统)中之后,再使用客户端工具(Navicat)连接数据库,查询速度到6秒左右;


全部回复(9)
yejr 2023-12-18 16:30:25
请补充几个信息
1、这条SQL的查询计划
2、MySQL和GreatSQL分别不同的my.cnf/my.ini 配置文件或配置参数
3、执行该SQL时,新创建其他窗口执行show processlist看到的SQL状态
林木 2023-12-18 16:37:50
yejr 发表于 2023-12-18 16:30
请补充几个信息
1、这条SQL的查询计划
2、MySQL和GreatSQL分别不同的my.cnf/my.ini 配置文件或配置参数

1)

2)详见附件
3)

配置文件.zip

3.66 KB, 下载次数: 1, 下载积分: 金币 -1

yejr 2023-12-18 16:39:50

只有200多条数据,理论上不应该这么慢,请尝试在服务器上用GreatSQL客户端工具在本地直连手动执行试试看,怀疑是本地和服务器间网络通信问题导致。
KAiTO 2023-12-18 16:49:28
按叶老师的方法先测试下,在GreatSQL客户端工具在本地直连手动执行试试看
---
如果要用Navicat的话,可以这样设置下,看看是否还会缓慢:
选中连接的数据库---右键点击编辑连接---选择高级 --勾选保持连接间隔 -- 默认是 240,可以将时间修改为例如10 --- 最后保存即可
然后再尝试下是否还会查询的慢

林木 2023-12-18 16:50:31
yejr 发表于 2023-12-18 16:39
只有200多条数据,理论上不应该这么慢,请尝试在服务器上用GreatSQL客户端工具在本地直连手动执行试试看 ...

好的,两个问题,第一个是我服务端greatsql服务已经启动,但是mysql的工具却连接不了,这是为何?



第二个,您说的网络通信问题,这个需要如何定位,因为真实场景,是有一个客户端程序请求服务端的数据库,这样一来查询会特别慢
KAiTO 2023-12-18 16:58:16
林木 发表于 2023-12-18 16:50
好的,两个问题,第一个是我服务端greatsql服务已经启动,但是mysql的工具却连接不了,这是为何?

回复您第一个问题:如果按照GreatSQL手册安装的话(麒麟安装GreatSQLhttps://gitee.com/GreatSQL/Great ... -6-kylin-install.md),请您执行下操作,添加环境变量:
  1. $ echo 'export PATH=/usr/local/GreatSQL-8.0.32-24-kylin-glibc2.28-aarch64/bin:$PATH' >> ~/.bash_profile
  2. $ source ~/.bash_profile
复制代码

KAiTO 2023-12-18 17:01:49
林木 发表于 2023-12-18 16:50
好的,两个问题,第一个是我服务端greatsql服务已经启动,但是mysql的工具却连接不了,这是为何?

第二点,如果要测试网络通信问题可以使用Ping命令,格式为Ping [对方IP]。如果Ping不通,可能是网络配置错误、远程主机协议失效等
林木 2023-12-19 10:18:59
KAiTO 发表于 2023-12-18 17:01
第二点,如果要测试网络通信问题可以使用Ping命令,格式为Ping [对方IP]。如果Ping不通,可能是网络配置 ...


定位是否是网络问题,按照老师建议,采用 mysql -ruser -p -A -Hhost 的方式连接,然后查询数据库,耗时没有任何异常;
网络通讯方面定位,同在一个网段,且ping数据库服务器延时在0.1ms左右,所以不是网络时延造成;

但是也从另一方面提供了一个排查思路;
查询语句select * from table 的时候耗时6秒左右;select x1,x2,x3 from table的时候耗时0.02ms左右;由此发现并不是数据库方面原因造成,
由此发现表中包含了大字段(存储照片信息),网络传输较为耗时
后面修改sql语句,不查询这个大字段,重新发布程序,客户端请求,耗时严重的问题得到解决
yejr 2023-12-19 10:42:41
林木 发表于 2023-12-19 10:18
定位是否是网络问题,按照老师建议,采用 mysql -ruser -p -A -Hhost 的方式连接,然后查询数据库,耗时 ...

谢谢分享。

最根本的解决办法是:不要在数据库中存储大对象数据(图片、文件、其他二进制长内容),而是只在数据库中存储这些大对象文件的存储路径,避免对数据库性能造成严重影响。

另外,在写SQL时,也要习惯不要直接SELECT *,而是指定具体需要的数据列,避免总是读取(返回)所有列。
林木

2

主题

0

博客

8

贡献

新手上路

Rank: 1

积分
13

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2024-5-7 20:34 , Processed in 0.050421 second(s), 18 queries , Redis On.
快速回复 返回顶部 返回列表