простой вопрос - как лучше всего повысить производительность базы данных, используя только оборудование?
В этой ситуации несколько очень больших таблиц обрабатываются очень регулярно 1-4 процессами за раз.
мы выполняем тысячи запросов, многие из которых требуют +10 секунд для возврата, и все они возвращают лишь небольшое количество данных. это наводит на мысль, что время поиска жесткого диска является узким местом.
в рамках этого процесса нам также необходимо создать сводные таблицы из наших таблиц необработанных данных. выполнение одного из этих запросов может занять несколько часов.
Предположим, что вся оптимизация программного обеспечения / базы данных уже выполнена.
Предположим, это потому, что мы потратили некоторое время на оптимизацию кода / БД и готовы потратить часть бюджета на оборудование. Я понимаю, что возможна дополнительная оптимизация программного обеспечения / баз данных, но в настоящее время это не является основной задачей.
на данный момент у нас не заканчивается оперативная память, но, возможно, мы могли бы выделить больше для БД.
Текущая платформа - Windows, это может измениться в зависимости от аппаратного решения.
база данных postres 8.4.
Спасибо.
Какое узкое место в производительности? Обычные виновники:
Обратите внимание, что когда вам удается устранить одно узкое место производительности, одно из других становится новым узким местом производительности.
В большинстве систем, в которых работает база данных со сканируемыми очень большими объемами данных, система ограничена вводом-выводом. Добавление дополнительных контроллеров дисков и распределение данных по ним увеличивает параллелизм, доступный для дискового ввода-вывода, обычно улучшая производительность.
Не забывайте, что самые значительные улучшения могут быть алгоритмическими - если вы можете ответить на вопрос двумя способами: один сканирует 1 ТБ данных, а другой - всего 1 КБ, второй будет лучше первого, независимо от того, что вы делаете с оборудование.
Доработка на контроллерах дисков - по запросу.
Данный дисковый контроллер может передавать только определенное количество данных с диска в память за секунду, обычно используя DMA. Чтобы увеличить пропускную способность, вы можете распределить данные по нескольким дискам, управляемым отдельными контроллерами. Затем, если это позволяет архитектура системы, вы можете получать больше данных в секунду с дисков в основную память, тем самым ускоряя операции. Обратите внимание: если все данные в базе данных находятся на одном диске, то дополнительные контроллеры не помогут. Если СУБД не может запустить параллельное чтение с отдельных дисков, то дополнительные контроллеры не помогут. Итак, помогут ли дополнительные контроллеры, зависит от вашего оборудования и программного обеспечения, а также от организации данных в базе данных.
Я бы рекомендовал в качестве первого шага собрать некоторые базовые показатели производительности и найти узкие места в вашей текущей системе. Это может дать вам хорошее представление о том, на что лучше потратить деньги - на ввод-вывод, память или вычислительную мощность.
Тем не менее, по моему опыту, наиболее частым узким местом для действительно больших таблиц является дисковый ввод-вывод. Если «вся оптимизация программного обеспечения / базы данных уже выполнена» не включает использование правильных стратегий разделения, проведите небольшое исследование по этой теме. Если ваша дисковая подсистема устарела, рассмотрите возможность ее обновления.
Как предположил Джейдью, чем больше информации хранится в ОЗУ, тем она быстрее. Кроме того, вы можете захотеть взглянуть на использование твердотельных накопителей, которые ускорили бы работу, однако вам необходимо провести исследование их жизненного цикла в качестве носителя для хранения БД. Они умирают после стольких писаний.
больше RAM должно сделать это, конечно, вам нужно будет сказать движку db использовать эту дополнительную RAM :)