阿里云的 Sqlserver 六七百万的数据,插入慢,各位有什么排查或者解决建议

2 天前
 ZZ74

不是宽表。表结构 id 是自增列,一个 varchar 列,类似于订单号,建了索引。剩下就是创建更新时间,以及四五个 varchar 类型的列。
过程是
产生一个单号
每个单号 3 到 4 条数据要插入这个表,用的 batch 插入。每个 batch 都是一个事务。
插入的同时另外有服务拿着单号从这个表里取数据。

现象是插入慢,log 看每次插入要一到两秒不止。

降低表中的数据到 3 百万或者更少,就没问题了

看看各位有啥思路或者经验

1222 次点击
所在节点    数据库
15 条回复
yinmin
2 天前
先确认不是阿里的轻量服务器,轻量不适合数据库,直接改 ecs 的 cpu 密集型服务器。

然后看看是不是表的索引太多了?
billzhuang
2 天前
没有 DBA 么?
ggabc
2 天前
什么硬盘?
wangybsyuct
2 天前
我用的是 ecs ,1CPU ,2G 内存,老配置,windows2003+sql server2008 ,大于二百万条数据后,果断分表,读写速度都在合理范围。
cccvno1
2 天前
不介意脏读的话加个 with(nolock) 可能会有改善
xshell
2 天前
是 RDS SQL Server ?还是自己在服务器上部署安装的 SQLServer ?
sirwu28
2 天前
都六七百万的数据了 早就应该应该上读写分离 或者分表了把。
jimrok
2 天前
大概率是索引引起的,索引是为了查找方便,代价就是写入的时候需要比较多的计算,数据量越大,计算复杂度越高,自然数据多了插入就慢。没啥好办法,要么就是简化索引,分表,方法挺多的。
PopRain
2 天前
@sirwu28 你也太看不起 SQL Server 了吧。。。。 主要还是看内存、硬盘 IO, 这么点数据量对于商业数据库实在是太小 case 了,但是如果内存不足、IO 慢,那没戏
evan1
2 天前
同意楼上。

复制出来一张备份表,在备份表里把订单号索引去掉试试,观察下去掉前和去掉后的差异。
qq1427168550
2 天前
找专业的我试试 alyunflc
ZZ74
1 天前
@yinmin 就主键 外加一个索引
@billzhuang 没有
@ggabc 买的阿里云的数据库服务,不知道啥硬盘
@xshell RDS
@PopRain 我也觉得 正常情况下这么点数据应该完全没问题。鬼知道阿里云的 rds 底下配置和做了啥
yinmin
1 天前
大概率是 rds 的内存太小了。我们部署企业项目的时候,都要求甲方服务器内存是数据库文件的 2 倍以上。例如:mssql 的 data 目录里 mdf 文件有 20GB ,服务器内存要 40GB 以上。

阿里云的 rds 不划算,用 ecs 通用型或者 ecs 计算型自己部署 winserver+mssql 更可控。mssql 维护简单,做好每 5 分钟日志备份/每天全量备份到另外一台服务器的共享目录即可。
yinmin
1 天前
@sirwu28 #7 mssql 做企业应用还是挺强的。16 核 32 线程 128GB 的 mssql 服务器,企业级 ssd raid ,7000-8000 万条长记录,上百个并发连接都不卡,某些客户端汇总统计一条 select 跑十几分钟,其他的并发连接也不卡。

不过么,现在要信创淘汰 mssql ,要改用国产数据库了。
opengps
1 天前
“数据量大了之后插入慢”。大概率是因为维护索引引起的,你要是没这个索引,写入性能就不会在数据量大的情况下下降严重了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1102695

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX