Как ускорить работу базы данных - только аппаратное обеспечение
Простой вопрос - как лучше всего повысить производительность базы данных, используя только аппаратное обеспечение?
в этой ситуации несколько очень очень больших таблиц запрашиваются очень регулярно 1-4 процессами одновременно.
мы выполняем тысячи запросов, многие из которых требуют +10 секунд для возврата, и все из которых возвращают только небольшое количество данных. это говорит мне о том, что время поиска HDD является узким местом.
в рамках этого процесса нам также необходимо создать сводные таблицы из наших таблиц необработанных данных. Один из этих запросов может занять несколько часов.
пожалуйста, предположите, что вся оптимизация программного обеспечения / базы данных уже сделана.
Предположим это, потому что мы потратили некоторое время на оптимизацию кода / базы данных и готовы потратить часть бюджета на оборудование. Я понимаю, что возможна дополнительная оптимизация программного обеспечения / БД, но это не актуально.
мы не исчерпали оперативную память в данный момент, но могли бы выделить больше для БД.
текущая платформа Windows, это может измениться в зависимости от аппаратного решения.
база данных postres 8.4.
Благодарю.
5 ответов
Какое узкое место в производительности? Обычные виновники:
- Если система связана с вводом / выводом, добавление дополнительных процессоров не поможет. Добавление большего объема памяти может увеличить часть базы данных, которую можно кэшировать в памяти, но лучший способ повысить производительность - увеличить пропускную способность ввода-вывода.
- Если система связана с процессором, то добавление большего количества ядер поможет, если программное обеспечение СУБД сможет их эффективно использовать. В противном случае, увеличение скорости процессоров поможет.
- Если система связана с памятью - узким местом является передача данных из ОЗУ в ЦП, - то увеличение пропускной способности памяти повысит производительность.
Обратите внимание, что когда вам удается устранить одно узкое место в производительности, одно из других становится новым узким местом в производительности.
На большинстве систем, работающих с базой данных, при сканировании серьезно больших объемов данных, система связана с вводом / выводом. Добавление большего количества дисковых контроллеров и распределение данных по ним увеличивает параллелизм, доступный для дискового ввода-вывода, обычно повышая производительность.
Не забывайте, что наиболее существенные улучшения могут быть алгоритмическими: если вы можете ответить на вопрос двумя способами, одним сканированием 1 ТБ данных и одним сканированием всего 1 КБ, второе превзойдет первое, независимо от того, что вы делаете с аппаратное обеспечение.
Разработка на контроллерах дисков - по запросу.
Данный контроллер диска может передавать только столько данных с диска в память за секунду, обычно используя DMA. Чтобы увеличить пропускную способность, вы можете распределить данные по нескольким дискам, управляемым отдельными контроллерами. Затем, если это позволяет системная архитектура, вы можете получать больше данных в секунду с дисков в основную память, тем самым ускоряя операции. Обратите внимание, что если все данные в базе данных находятся на одном диске, то дополнительные контроллеры не помогают. Если СУБД не может запустить параллельное чтение с отдельных дисков, то дополнительные контроллеры не помогают. Таким образом, помогут ли дополнительные контроллеры, зависит от вашего оборудования и программного обеспечения, а также от организации данных в базе данных.
- баран
- Более быстрый процессор
- Храните базу данных на RAID0 (или RAID10, если требуется избыточность) с максимально возможным количеством дисков.
- Многоядерные процессоры.
- Увеличены размеры кэшей L0 и L1.
Я бы порекомендовал собрать некоторые базовые показатели производительности и найти узкие места в вашей текущей системе в качестве первого шага. Это может дать вам хорошее представление о том, куда лучше всего тратить деньги - ввод-вывод, память или вычислительная мощность.
Тем не менее, по моему опыту, наиболее распространенным узким местом для действительно больших таблиц является дисковый ввод-вывод. Если "вся оптимизация программного обеспечения / базы данных уже выполнена" не включает использование правильных стратегий разбиения, проведите некоторое исследование на эту тему. Если ваша дисковая подсистема старая, рассмотрите возможность ее обновления.
Как предположил Джейдью, чем больше информации хранится в оперативной памяти, тем быстрее она работает. Кроме того, вы можете захотеть взглянуть на использование твердотельных накопителей, что ускорит процесс, однако вам необходимо изучить жизненный цикл таких устройств, как носитель данных на БД. Они умрут после стольких писем.
Больше ОЗУ должно делать это, конечно же, вам придется указать движку БД использовать эту дополнительную ОЗУ:)