V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Afar
V2EX  ›  SQL Server

SQLServer 特定场景优化问题

  •  
  •   Afar · 115 天前 · 1037 次点击
    这是一个创建于 115 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用场景: 车间内 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. 其它问题。

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

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

    另外,可以先装个开发版试试(免费 180 天),如果没有问题,预算有限可以买个 WEB 版(max 64G),话说这么“豪华”的服务器都买了,舍不得买个标准版的数据库。。。。 如果这样,为什么不用 postgresql 呢?
    PopRain
        12
    PopRain  
       115 天前
    补充一下,如果客户端可以配置连接端口的话,是不是可以测试一下多安装几个实例,监听不同端口,这个不知道微软是否限制为共享 1G 内存,还是各自 1G
    Afar
        13
    Afar  
    OP
       115 天前
    @PopRain @mingl0280 @Itoktsnhc 现在是 SQLServer 2019 Express Edition ,升级成标准版或企业版的话,数据库性能上会不会有明显提升?感谢
    Afar
        14
    Afar  
    OP
       115 天前
    PC 客户端是 WIN7/XP ,只能通过 ODBC 到服务器数据库,服务器端是 Windows Server 2016 ,如何实现多实例呢? VMware 么?
    kiracyan
        15
    kiracyan  
       115 天前
    你的社区版确定没阉割吗?
    Afar
        16
    Afar  
    OP
       115 天前
    @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
        17
    adoal  
       115 天前 via iPhone
    “数据插入异常”时的具体表现是什么,服务器返回的错误码?客户端抛出的异常?日志里的记录?如果什么都没有,那不好猜。
    PrinceofInj
        18
    PrinceofInj  
       115 天前
    @Afar 直接新安装一个数据库,选评估版就行了。企业版的功能,180 天评估器,足够排查了吧。继续运行安装程序,选命名实例就是多实例了。
    netnr
        19
    netnr  
       115 天前 via Android
    判决大概率是版本问题,先换一个开发版观察是否依然出现问题,EE 版本限性能和大小
    换个思路分析,142 台每 10 秒写入同一个数据库也顶得住
    kiracyan
        20
    kiracyan  
       115 天前
    @Afar 建议升级企业版 我之前公司上千台写入都没什么问题 服务器的系统版本时 win server 吗 我看你信息是 win10 版本的
    PopRain
        21
    PopRain  
       115 天前
    @Afar SQL SERVER express 最大只能用 1G 内存,你还开了这么多 database , 你可以安装一个开发版测试一下,我觉得肯定有改善,你这个数据量对 SQL server 来说不算什么。
    qile1
        22
    qile1  
       114 天前 via Android
    把服务器虚拟化成多个系统,每个系统安装 sql server
    zzlhr
        23
    zzlhr  
       114 天前
    如果超市 SQL Server Profiler 应该是监测不到的,但是你可以看成功的执行时间是多久,如果排队会出现很多执行时间很长的 sql ,而且目前看来很明确是版本问题了。sqlserver 缓存池跟用户量和数据库大小,运行时间都有直接联系,缓存池都是在内存里,楼上说了限制 1g 我不知道准确不,没仔细看,但是就算不是也不会超过 4g ,就你这个使用情况内存是不够的
    PopRain
        24
    PopRain  
       102 天前
    楼主最后把结果告诉大家一下
    Afar
        25
    Afar  
    OP
       101 天前
    @PopRain
    谢谢各位。
    由于是生产车间,且设备数量较多,稳妥起见,两个方案同步进行。
    1. 将 Express 版本升级到企业版。
    2. 数据插入频率由 10s 改为 60s 。
    更改后,报警数量明显减少,但是很遗憾,没有找到具体原因。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2531 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 15:04 · PVG 23:04 · LAX 08:04 · JFK 11:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.