2016-10-02 4 views
2

Я запускаю приложение на основе рабочего стола, встроенное в C#, подключенное к базе данных Microsoft SQL Server Express. Около 20-30 пользователей обращаются к этому приложению, в то время как еще 20-30 систем одновременно связаны с базой данных и работают 24 часа в сутки. ОС работает под управлением Windows Server 2012 Standard.Ошибка времени ответа базы данных SQL Server

Иногда я сталкиваюсь с серьезными проблемами производительности в приложении, когда я перезапускаю сервер, все становится нормальным.

Я уже сканировал все компьютеры и вирусов не обнаружено. Похоже, проблем нет и в сетевых устройствах.

В чем может быть проблема? Вывоз мусора?

Спасибо

+0

Как вы обрабатываете соединение с базой данных в коде? Если вы не используете соединения, тогда возникнут проблемы с подключением, которое не будет возвращено в пул соединений, то есть потоки в конечном итоге ожидают, когда соединение станет доступным. У вас могут также возникнуть проблемы с блокировкой таблиц, где у вас может быть несколько пользователей, пытающихся обновить/вставить, что приведет к блокировке записей или таблиц для предотвращения конфликтов. Это, в сочетании с непривязанными соединениями, может привести к тому, что вы описали. –

+0

Я открываю соединения только при необходимости и закрывается в конце работы CRUD. Вот пример этого 'попробовать { } поймать (Exception ехр) { MessageBox.Show (exp.Message.ToString(), "Исключение"); } finally { if (sqlConnection.State == ConnectionState.Open) { sqlConnection.Close(); } } ' –

+0

Вы можете проверить серверный процессор sql, использование памяти, пока вы сталкиваетесь с первыми проблемами и вопросом обновления. – TheGameiswar

ответ

2

Есть имитаций для 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 ячеек).

1

Посмотрите на счетчики производительности Windows.

Мой первый взгляд будет SQLServer: Memory-менеджер: Total Memory сервера (КБ) и SQLServer: Memory менеджер: Память целевого сервера (KB). Также посмотрите на Буфер: коэффициент попадания в кэш счетчик.

Если целевая память выше, чем память общей памяти. Если коэффициент попадания в кэш в среднем ниже 99%, также увеличивается память.

Смежные вопросы