SQLServer 特定场景优化问题

2022-03-09 13:09:04 +08:00
 Afar

使用场景: 车间内 142 台 PC ,通过配置 ODBC ,执行插入数据到局域网内服务器上的 SQLServer 数据库,频率为每 10 秒一次。 每台 PC 对应服务器中的一个数据库,共 142 个数据库,每个库有 18 张表,单表最大字段 780 个。

车间 PC 操作系统为 Win7/XP,内存为 4G 。 服务器配置为 Xeon Gold 5218 ,内存 128G ,SQLServer 版本为 2019 社区版,默认安装默认配置。

异常现象: 偶尔会出现数据插入异常,PC 端报数据库写表失败。

可能问题:

  1. 网络问题。
  2. 插入数据量过大,插入频率过大。
  3. SQLServer 数据库优化不足,升级为专业版或优化数据库参数配置。
  4. 其它问题。

麻烦各位大佬,给些建议或者指导,非常感谢。

2606 次点击
所在节点   SQL Server
25 条回复
Afar
2022-03-09 13:20:08 +08:00
liprais
2022-03-09 13:24:36 +08:00
典型的生产者消费者场景
整个 kafka 或者 mq 完事
DollarKiller
2022-03-09 13:35:40 +08:00
这种场景典型上时序数据库呀
zzlhr
2022-03-09 13:40:20 +08:00
1.网络问题可能性不大,排查方法就是找一台失败的电脑连续 ping ,到出现失败查看是否丢包
2. 这个有可能,但是概率不大,原因可能是插入是锁表,看下是不是业务上使用触发器之类的,频繁写操作的表尽量避免使用触发器
3. 免费版 cpu 限制 4 核,还有内存限制的都很小,你这服务器配置性能完全没有发货。
4. 上述排除完毕之后还有问题就 使用 sqlserver 自带的分析工具 Sql Server Profiler 挺好用,也很简单
paradoxs
2022-03-09 14:06:59 +08:00
发到 MQ 上,慢慢拉
c6h6benzene
2022-03-09 14:09:52 +08:00
Service Broker 丢队列里慢慢消费?
Afar
2022-03-09 14:23:41 +08:00
@liprais @DollarKiller PC 端软件是日本人写的,已经不可能更改了。
@zzlhr 非常感谢。SQL Server Profiler 能监测到远程客户端插入失败的情况么?我打开看了看,好像都是成功的日志。
Afar
2022-03-09 14:46:53 +08:00
@paradoxs @c6h6benzene 如果能本地数据库转 MQ ,推送到服务器端的 Broker 上最好了。但是这样又需要去每台机器上配置部署,同时增加了 PC 端负担。
Itoktsnhc
2022-03-09 15:02:33 +08:00
架构不调整的话首先该做的是对 SQL Server 以及所在机器的状态做一个监控,结合客户端报错的时间看指标,比如 CPU 情况,内存情况,网络流量情况,数据库连接数,是否存在死锁这些
mingl0280
2022-03-09 15:50:02 +08:00
2 和 3 完全不可能,高度怀疑是 ODBC 插入代码有问题。
PopRain
2022-03-09 16:20:19 +08:00
社区版你就算有 128G 内存,它也只会用 1G 内存(数据库文件 MAX 10G)。。。。你建这么多数据库,本身就耗费缓存内存,缓存要不停交换到硬盘肯定影响插入效率,如果可以改,最好不要超过 10 个数据库

另外,可以先装个开发版试试(免费 180 天),如果没有问题,预算有限可以买个 WEB 版(max 64G),话说这么“豪华”的服务器都买了,舍不得买个标准版的数据库。。。。 如果这样,为什么不用 postgresql 呢?
PopRain
2022-03-09 16:31:08 +08:00
补充一下,如果客户端可以配置连接端口的话,是不是可以测试一下多安装几个实例,监听不同端口,这个不知道微软是否限制为共享 1G 内存,还是各自 1G
Afar
2022-03-09 16:37:43 +08:00
@PopRain @mingl0280 @Itoktsnhc 现在是 SQLServer 2019 Express Edition ,升级成标准版或企业版的话,数据库性能上会不会有明显提升?感谢
Afar
2022-03-09 16:39:29 +08:00
PC 客户端是 WIN7/XP ,只能通过 ODBC 到服务器数据库,服务器端是 Windows Server 2016 ,如何实现多实例呢? VMware 么?
kiracyan
2022-03-09 16:49:36 +08:00
你的社区版确定没阉割吗?
Afar
2022-03-09 17:09:31 +08:00
@kiracyan 我也看不来有没有阉割,这是 select @@version 查询出来的

Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64) Sep 24 2019 13:48:23 Copyright (C) 2019 Microsoft Corporation Express Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 16299: )
adoal
2022-03-09 17:36:08 +08:00
“数据插入异常”时的具体表现是什么,服务器返回的错误码?客户端抛出的异常?日志里的记录?如果什么都没有,那不好猜。
PrinceofInj
2022-03-09 18:26:09 +08:00
@Afar 直接新安装一个数据库,选评估版就行了。企业版的功能,180 天评估器,足够排查了吧。继续运行安装程序,选命名实例就是多实例了。
netnr
2022-03-09 18:53:51 +08:00
判决大概率是版本问题,先换一个开发版观察是否依然出现问题,EE 版本限性能和大小
换个思路分析,142 台每 10 秒写入同一个数据库也顶得住
kiracyan
2022-03-09 19:41:41 +08:00
@Afar 建议升级企业版 我之前公司上千台写入都没什么问题 服务器的系统版本时 win server 吗 我看你信息是 win10 版本的

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

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

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

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

© 2021 V2EX