不是宽表。表结构 id 是自增列,一个 varchar 列,类似于订单号,建了索引。剩下就是创建更新时间,以及四五个 varchar 类型的列。
过程是
产生一个单号
每个单号 3 到 4 条数据要插入这个表,用的 batch 插入。每个 batch 都是一个事务。
插入的同时另外有服务拿着单号从这个表里取数据。
现象是插入慢,log 看每次插入要一到两秒不止。
降低表中的数据到 3 百万或者更少,就没问题了
看看各位有啥思路或者经验
1
yinmin 1 天前 via iPhone
先确认不是阿里的轻量服务器,轻量不适合数据库,直接改 ecs 的 cpu 密集型服务器。
然后看看是不是表的索引太多了? |
2
billzhuang 1 天前
没有 DBA 么?
|
3
ggabc 1 天前 via Android
什么硬盘?
|
4
wangybsyuct 1 天前
我用的是 ecs ,1CPU ,2G 内存,老配置,windows2003+sql server2008 ,大于二百万条数据后,果断分表,读写速度都在合理范围。
|
5
cccvno1 1 天前
不介意脏读的话加个 with(nolock) 可能会有改善
|
6
xshell 1 天前
是 RDS SQL Server ?还是自己在服务器上部署安装的 SQLServer ?
|
7
sirwu28 1 天前
都六七百万的数据了 早就应该应该上读写分离 或者分表了把。
|
8
jimrok 1 天前
大概率是索引引起的,索引是为了查找方便,代价就是写入的时候需要比较多的计算,数据量越大,计算复杂度越高,自然数据多了插入就慢。没啥好办法,要么就是简化索引,分表,方法挺多的。
|
9
PopRain 1 天前
@sirwu28 你也太看不起 SQL Server 了吧。。。。 主要还是看内存、硬盘 IO, 这么点数据量对于商业数据库实在是太小 case 了,但是如果内存不足、IO 慢,那没戏
|
10
evan1 22 小时 45 分钟前
同意楼上。
复制出来一张备份表,在备份表里把订单号索引去掉试试,观察下去掉前和去掉后的差异。 |
11
qq1427168550 22 小时 17 分钟前
找专业的我试试 alyunflc
|
12
ZZ74 OP @yinmin 就主键 外加一个索引
@billzhuang 没有 @ggabc 买的阿里云的数据库服务,不知道啥硬盘 @xshell RDS @PopRain 我也觉得 正常情况下这么点数据应该完全没问题。鬼知道阿里云的 rds 底下配置和做了啥 |
13
yinmin 15 小时 33 分钟前 via iPhone
大概率是 rds 的内存太小了。我们部署企业项目的时候,都要求甲方服务器内存是数据库文件的 2 倍以上。例如:mssql 的 data 目录里 mdf 文件有 20GB ,服务器内存要 40GB 以上。
阿里云的 rds 不划算,用 ecs 通用型或者 ecs 计算型自己部署 winserver+mssql 更可控。mssql 维护简单,做好每 5 分钟日志备份/每天全量备份到另外一台服务器的共享目录即可。 |
14
yinmin 15 小时 20 分钟前 via iPhone
@sirwu28 #7 mssql 做企业应用还是挺强的。16 核 32 线程 128GB 的 mssql 服务器,企业级 ssd raid ,7000-8000 万条长记录,上百个并发连接都不卡,某些客户端汇总统计一条 select 跑十几分钟,其他的并发连接也不卡。
不过么,现在要信创淘汰 mssql ,要改用国产数据库了。 |
15
opengps 4 小时 3 分钟前
“数据量大了之后插入慢”。大概率是因为维护索引引起的,你要是没这个索引,写入性能就不会在数据量大的情况下下降严重了
|