Одна из наших систем, наконец, запущена в производство, и в час пик (около 200 одновременно работающих пользователей одновременно) трафик может нарастить до 30 000 пользовательских транзакций в течение часа.
Мы замечаем странное поведение, которое заключается в том, что сразу после перезапуска нашего SQL-сервера производительность очень высокая.Даже при одновременном использовании 200 пользователей транзакция на SQL Server 2008 R2 составляет менее 10 мс.Однако после примерно 15 000 транзакций мы видим, что каждая транзакция может занять до 100 мсек.Когда речь идет о 30 000 транзакций, каждая транзакция может занять 300 мс в худшем случае.Если мы не перезапустим сервер SQL, даже один поток, транзакция все равно будет длиться около 300 мс.
Каждая транзакция будет выполнять следующее:
- 1 Выберите в основной таблице и 2 выберите в таблице счетов, 1 вставьте или обновите в главной таблице, 1 вставьте или обновите в таблице счетови 1 или 2 вставить в таблицу истории
- таблица счетов (2 столбца в качестве первичного ключа, 4 столбца в качестве индекса и еще 6 столбцов в качестве столбца данных)
- основная таблица (3 столбца в качестве первичного ключа), 5 столбцов в качестве индекса и еще 11 столбцов в качестве столбца данных)
- таблица истории (3 столбца в качестве первичного ключа, 4 столбца в качестве индекса и еще 15 столбцов в качестве столбца данных)
Примечание: Некоторые данные столбца выше, индекс выше, потому что мы использовали в предложении, где.
Примечание. Во время выбора мы не объединяем таблицы для повышения производительности.
Примечание. Сервер БД и веб-сервер фактически являются одним и тем же сервером.
Настройка системы:
- ОС: Windows 2008 Enterprise
- Веб-сервер: веб-сервер Tomcat
- Подключение к БД: Пул подключений Spring (мин. 50, макс. 350)
- Использование новейшего драйвера JDBC для SQL
- Сервер БД: Sql Server 2008 R2 SP1
Серверное оборудование:
- ЦП: 4 x четырехъядерных ЦП (каждое ядро имеет 2 потока), что означает общееиз 32 физических потоков
- Память: 16 ГБ
- Жесткий диск: рейд 1 на 4 жестких диска SAS 15K.это означает 2 жестких диска, видимых для ОС.Данные приложений и ОС используют 1 жесткий диск, в то время как база данных SQL использует другой жесткий диск.
Есть идеи, где можно отслеживать и разрешать снижение производительности после 10 000 транзакций?