Мы разработали систему с экраном поиска, который выглядит примерно так:
(источник: nsourceservices.com )
Как вы можете видеть , есть довольно серьезный поисковый функционал. Вы можете использовать любую комбинацию статусов, каналов, языков, типов кампании, а затем сузить ее по названию и т. Д.
Затем, когда вы выполните поиск и потенциальные клиенты появятся внизу, вы сможете отсортировать заголовки.
Запрос использует ROWNUM для выполнения схемы разбиения по страницам, поэтому мы возвращаем только около 70 строк за раз.
Проблема
Несмотря на то, что мы возвращаем только 70 строк, происходит очень много операций ввода-вывода и сортировки. Это, конечно, имеет смысл.
Это всегда вызывало небольшие всплески в Disk Queue. Он начал замедляться еще больше, когда мы набрали 3 миллиона лидов, а теперь, когда мы приближаемся к 5, Disk Queue иногда задерживается на секунду или две подряд.
На самом деле это все еще работоспособно, но в этой системе есть еще одна область с чувствительным ко времени процессом, скажем для простоты, что это веб-служба, которая должна очень быстро обслуживать ответы, иначе это вызовет тайм-аут на другом конец. Всплески дисковой очереди приводят к зависанию этой части, что приводит к тайм-аутам в нисходящем направлении. Конечным результатом фактически является потеря телефонных звонков в нашем автоматическом IVR на основе VoiceXML, и это очень плохо для нас.
Что мы пробовали
Мы пробовали:
В заключение ...
Часть меня чувствует, что сервер должен уметь справиться с этим. Пять миллионов записей - это не так много, учитывая мощность этого сервера, представляющего собой приличный четырехъядерный процессор с 16 гигабайтами оперативной памяти. Тем не менее, я могу видеть, как часть сортировки вызывает касание миллионов строк только для того, чтобы вернуть горстку.
Так что ты делал в подобных ситуациях? Я считаю, что нам, возможно, следует сократить некоторые функции, но если они есть ' Это способ сохранить это в неприкосновенности, что спасет меня от войны с бизнес-подразделением.
Заранее спасибо!