По прошествии некоторого времени (несколько дней), сервер начинает очень медленно отдавать данные.
Софтина написана на VC++ 2005, работатет через OLE DB, СУБД SQL Server 2005.
Структура интересующей таблицы (Log):
Id, bigint, ключь с автоинкрементом
LogTime, datetime
Channel, int
LogValue, float
ChanType, int
Каждую минуту в эту таблицу добавляются записи количеством от 24 до 64. Понятно, что база очень быстро набирает вес и уже через неделю счет идет на гигабайты (а время цикла — 400 дней!).
В какой-то момент (предположителшьно раз в два дня), необходимо получить ряд отчетов, основываясь именноно на этой таблице. Самый простой и наиболее часто используемый запрос:
SELECT * FROM Log WHERE Channel=%d AND LogTime >= '%.2d/%.2d/%d %.2d:%.2d'\
AND LogTime <= '%.2d/%.2d/%d %.2d:%.2d'
строка создается sprintfом, по этому понятно, что означают %*d, сюда подставляются нужные значения.
Этот запрос может повторяться неоднократно, для небольшого количества данных (за два часа, соответственно 12 повторов для суточных данных).
При выполнении запроса в первые часы работы, время приемлемое, но стоит подойти уже через два дня, как на те же запросы начинают уходить минуты.
В литературе, к сожалению, ни чего рядом с этим вопросом не нашел (может не там искал).
Единственная идея — плюнуть на SQL Server и сделать все по старинке файлы данных, но сами понимаете, что этот вариант для меня последний.