Вы говорите, что ваша система способна вставлять 3000 записей в секунду без индексов, но только около 100 с двумя дополнительными некластеризованными индексами. Если 3 к / с - максимальная пропускная способность, которую разрешает ваш ввод / вывод, то добавление двух индексов теоретически должно снизить пропускную способность примерно на 1000-1500 / с. Вместо этого вы видите ухудшение в 10 раз хуже. Правильное решение и ответ - «Это зависит», и необходимо провести серьезную диагностику и выявить узкие места. Имея это в виду, если бы я рискнул предположить, я бы дал два возможных виновника:
A. Дополнительные некластеризованные индексы распределяют записи грязных страниц в большее количество областей выделения. Решение состоит в том, чтобы поместить кластеризованный индекс и каждый некластеризованный индекс в свою собственную файловую группу и разместить три файловые группы в каждой на отдельных логических модулях RAID.
B. Низкая селективность некластеризованных индексов создает высокую конкуренцию между операциями чтения и записи (конфликты ключей, а также % lockres% конфликтов ), что приводит к длительному времени ожидания блокировки как для вставок, так и для выборок. Возможные решения - использование SNAPSHOT с режимом фиксации моментального снимка для чтения , но я должен предупредить об опасности добавления lot IO в хранилище версий (т.е. в tempdb) в системе, которая уже может находиться под высоким напряжением ввода-вывода. Второе решение - использовать снимки базы данных для создания отчетов, они вызывают более низкую нагрузку ввода-вывода и их можно лучше контролировать (хранилище версий tempdb не используется), но отчеты больше не передаются в режиме реального времени.
Я склонен полагать, что B) является вероятной причиной, но я должен еще раз подчеркнуть необходимость надлежащего расследования и надлежащего анализа случаев заболевания.
«RAID10» не очень точное описание.
- Сколько шпинделей в части RAID 0? Они с короткой полоской?
- Сколько LUNs?
- Где находится журнал базы данных?
- Где находится база данных?
- Сколько разделов?
- Где находится база данных tempdb?
Что касается вопроса, подходят ли реляционные базы данных для чего-то подобного, да, абсолютно. Есть еще много факторов, которые необходимо учитывать: возможность восстановления, доступность, экосистема набора инструментов, ноу-хау, простота разработки, простота развертывания, простота управления и т. Д. И т. Д. Реляционные базы данных могут легко справиться с вашей рабочей нагрузкой, им просто нужно правильно настроить. 30 миллионов вставок в день, 350 в секунду, это небольшое изменение для сервера базы данных. Но 32-битная 4 Гб оперативной памяти вряд ли сервер базы данных, независимо от количества процессоров.