Есть имитаций для SQL Server Express Edition:
Количество процессоров поддерживаются: только один процессор в то время (макс ядро = 4 для SQL Express 2016 года). Итак, если ваш сервер имеет несколько процессоров, он будет использовать только один процессор за раз.
Максимальная используемая память: не более 1 ГБ памяти для буфера данных. Итак, если на вашем сервере больше GB memeory, SQL Server Express не может воспользоваться им.
предельного размера базы данных: Максимальный размер базы данных ограничен 4 Гб (10GB для SQL Express 2016)
ДИСКА скорость ввода/вывода и память является одним из основных ресурсов для выполнения SQL. Поскольку данные хранятся в кеше в течение длительного времени, сервер считывает из памяти не с диска.
Одним из мер, которые могут помочь найти узкое место для производительности сервера, является измерение ожидаемой продолжительности жизни страницы (PLE). Он должен быть> 300 для сервера с памятью 4 ГБ (но действительно экспресс-использование SQL Express ограничено 1 ГБ).
PLE - это количество секунд, в течение которых средняя страница данных находилась в пуле буферов. Хранение данных в памяти дает SQL Server более быстрый доступ к нему, а не длительную медленную поездку на диск. Эта мера может открыть вам глаза и привести вас к проблемам, которые могут быть решены. вы можете получить, выполнив:
SELECT object_name,
counter_name,
cntr_value AS [value]
FROM sys.dm_os_performance_counters
WHERE LTRIM(RTRIM(object_name)) = 'SQLServer:Buffer Manager'
AND LTRIM(RTRIM(counter_name)) = 'Page life expectancy' ;
В SQL Express вы потеряете ключевые ресурсы (память ограничение 1GB), которые помогают в повышении PLE счетчика.
Ваша система составляет 20-30 пользователей, а еще 20-30 систем одновременно связаны с базой данных и работают 24 часа в сутки.
Лучше обновить до SQL Standard Edition 2016 без ограничений памяти (до 128 ГБ) и процессора/ядер (до 24 ячеек).
Как вы обрабатываете соединение с базой данных в коде? Если вы не используете соединения, тогда возникнут проблемы с подключением, которое не будет возвращено в пул соединений, то есть потоки в конечном итоге ожидают, когда соединение станет доступным. У вас могут также возникнуть проблемы с блокировкой таблиц, где у вас может быть несколько пользователей, пытающихся обновить/вставить, что приведет к блокировке записей или таблиц для предотвращения конфликтов. Это, в сочетании с непривязанными соединениями, может привести к тому, что вы описали. –
Я открываю соединения только при необходимости и закрывается в конце работы CRUD. Вот пример этого 'попробовать { } поймать (Exception ехр) { MessageBox.Show (exp.Message.ToString(), "Исключение"); } finally { if (sqlConnection.State == ConnectionState.Open) { sqlConnection.Close(); } } ' –
Вы можете проверить серверный процессор sql, использование памяти, пока вы сталкиваетесь с первыми проблемами и вопросом обновления. – TheGameiswar