我正在尝试帮助我们的网络工程师为我们的一位客户解决问题。该客户从名副其实的“夫妻店”供应商处购买了一个销售点系统,并表示供应商推荐 SQL Server Express 2005 作为后端数据库,以使客户免于产生额外的许可费用。(请不要让我开始这样做!)
我们没有编写应用程序,因为它是一个商业应用程序,所以我们没有可用的源代码。(并不是说如果我们这样做了会对我们有所帮助;这个东西是在 PowerBuilder 中构建的,所以我们没有工具。)该应用程序没有自己的日志记录,这是我们可以确定的。我们所要做的就是 SQL Server Express 自己的日志记录。
在应用程序中,最终用户刷会员卡。偶尔(一天几次),滑动不会从数据库返回数据。屏幕上的消息将显示“未找到成员 123”。(会员编号实际上是六位数字,“000123”。) 之后立即重新扫描正确返回会员数据。
我们已经消除了扫描仪本身作为问题的根源——它会定期扫描完整的六位数号码。对 SQL Server Express 日志的扫描表明它正在从空闲状态重新联机,通常是在扫描时(但也可能在每天的其他几次)。(这里解释了空闲模式。)
我知道以 SQL Express 的方式分配/取消分配 RAM 是一个耗时的过程,尤其是当我们一次谈论数百兆字节时——似乎就是这种情况。
我们不确定的是我们是否正在取回部分数据,或者应用程序是否只是无法连接到数据库并显示一般错误消息。由于一切都是如此不透明,并且客户(出于显而易见的原因)不愿意付钱让我们在他们的设施中坐 8 个小时左右来亲眼目睹它的发生(也许使用网络监控/数据包嗅探工具),我们有点不知所措。
此时,我们的建议是客户端升级到具有 5 个 CAL 的 SQL Server 2005 Workgroup Edition。但这并不完全适合我作为这个问题的解决方案,因为我有理由确定没有 SQL Server 会返回部分数据——如果你无法连接,你就无法连接。(也就是说,我仍然推荐它,因为它可以解决他们的许多其他问题!)
我对 Express 没有太多经验。(除了本地开发,我从不使用它,而且只在家里使用;我当然从不向我的客户推荐它。)
对于那些可能有 Express 经验的人,我的问题是,您是否见过 SQL Express 的实例返回部分数据,而应用程序本身不是它的原因?具体来说,您从空闲模式返回时是否看到过这种行为?
(对于它的价值,我们倾向于认为应用程序无法连接并且仅显示一般错误消息,当它连接时会在成员 ID 上删除前导零。这似乎是最合理的答案 - 第三个问题可能是,你们同意这个评价吗?)