Я пытаюсь помочь нашим сетевым инженерам устранить проблему для одного из наших клиентов. Этот клиент приобрел систему торговых точек у буквально «мамино-популярного» поставщика и сказал, что поставщик рекомендовал SQL Server Express 2005 в качестве внутренней базы данных, чтобы избавить клиента от необходимости взимать дополнительные лицензионные сборы. (Пожалуйста, не заводите меня на это! )
Мы не писали приложение, и поскольку это коммерческое приложение, у нас нет доступного исходного кода. (Не то чтобы это помогло бы нам, если бы мы это сделали; эта штука была встроена в PowerBuilder, поэтому у нас нет для этого инструментария.) Приложение не ведет ни одной своей собственной регистрации, что мы можем выяснить. Все, что нам нужно, - это собственное ведение журнала в SQL Server Express.
В приложении конечный пользователь смахивает членскую карту. Изредка (несколько раз в день) свайп не возвращает данные из базы данных. На экране появится сообщение «Участник 123 не найден». (Номера членов на самом деле состоят из шести цифр, «000123».) Повторное сканирование сразу после этого возвращает данные участника правильно.
Мы устранили сам сканер как источник проблем - он обычно сканирует полное шестизначное число. Сканирование журнала SQL Server Express показывает, что он возвращается из режима ожидания, часто в момент сканирования (но также несколько раз в день). (Режим ожидания объяснен здесь .)
Я понимаю, что выделение / освобождение ОЗУ, как это делает SQL Express, занимает много времени, особенно если мы говорим о сотнях мегабайт за раз - что, похоже, и так.
В чем мы не уверены, так это в том, возвращаем ли мы частичные данные или нет, приложение просто не может подключиться к базе данных и отображает общее сообщение об ошибке. Поскольку все настолько непрозрачно, и клиент (по очевидным причинам) не желает платить нам за то, что мы сидим на своем объекте в течение 8 часов или около того, чтобы физически увидеть, как это происходит (возможно, с помощью инструментов сетевого мониторинга / анализа пакетов), мы вроде как в убыток.
На данный момент мы рекомендуем обновить клиент до SQL Server 2005 Workgroup Edition с 5 клиентскими лицензиями. Но это не совсем подходит мне как решение этой проблемы, потому что я достаточно уверен, что SQL Server никогда не вернет частичные данные - если вы не можете подключиться, вы не можете подключиться. (Тем не менее, я все еще рекомендую его, потому что это решение ряда других проблем!)
У меня мало опыта работы с Express. (Я никогда не использую его ни для чего, кроме местного развития, и только дома; я определенно никогда не рекомендую его своим клиентам.)
Мой вопрос к тем, кто может иметь опыт работы с Express: вы когда-нибудь видели, чтобы экземпляр SQL Express возвращал частичные данные, а само приложение не являлось причиной этого? В частности, вы видели такое поведение при возвращении из режима ожидания?
(Что бы это ни стоило, мы склонны полагать, что приложение не может подключиться и просто отображает общее сообщение об ошибке, обрезая начальные нули на идентификаторе члена, когда это происходит. Это кажется наиболее разумным ответом - третий вопрос: вы, ребята, согласны с такой оценкой?)