Стоит ли ожидать значительного увеличения производительности Oracle с точки зрения обработки множества запросов, переключающихся с одноядерного на двухъядерное?
У нас есть база данных Oracle размером примерно 100 ГБ, которая работает поверх виртуальной машины Windows Server 2k3R2 в ESX в конфигурации с 1 сокетом и 1 ядром. Всякий раз, когда ему приходится обрабатывать основной запрос, он, кажется, "привязывается" на время этого запроса (50–75% загрузки ЦП), а в некоторых случаях ограничивает функциональность приложений, которые его используют. Наиболее типичный случай - когда мы запускаем массивные отчеты, один запрос значительно замедлит производительность приложения во время выполнения запроса, как будто он ставит задачи в очередь. Мой вопрос таков: значительно ли "модернизация" виртуальной машины до 1 сокета, конфигурации с 2 ядрами решит эту проблему "разметки"?
4 ответа
Это зависит от. Если загрузка процессора от пользователя, то ответ, скорее всего, "да". Если загрузка ЦП исходит от iowait, то вы тратите впустую свои деньги, пока не обновите свою систему хранения. Если это в основном из системы, то у вас, вероятно, есть драйвер или аппаратное устройство, которое использует слишком много ресурсов прерывания (может быть, сетевая карта?)
Я почти уверен, что любое обновление CPU (кол-во) будет иметь преимущества в производительности, если вы добавите их и в виртуальную машину. Убедитесь, что вы не переусердствовали, хотя. То есть, скажем, у вас есть 4 виртуальные машины на сервере 32 ГБ, и вы назначаете каждой виртуальной машине 25 ГБ ОЗУ.
Однако, по моему мнению, вы ограничиваете себя оракулом, работающим в виртуальной среде.
Я бы серьезно подумал о запуске оракула на выделенном сервере без уровня виртуализации. Oracle - настоящий зверь, и ему нужны все ресурсы, которые он может получить. Также используйте аппаратный raid10 с минимум 8 дисками, чем больше дисков, тем лучше. Это также относится к серверу ESXi.
Это во многом зависит от того, насколько параллелизуем работа Oracle, то есть от конкретного выполняемого запроса. Вообще говоря, СУБД является высокопараллельным приложением, поэтому она должна выиграть от увеличения числа процессоров; но некоторые рабочие нагрузки могут вообще не принести пользу.
Наличие более одного ядра для ядра базы данных поможет в производительности. В Oracle есть несколько основных процессов, которые должны конкурировать по времени процессора, если их слишком мало. Кроме того, когда вы вводите ресурсоемкие пользовательские сессии (например, запросы), конкуренция ухудшается. Так что да, это поможет. Oracle создан для использования и использования многопроцессорной платформы. Кроме того, если вы запускаете службы приложений на том же сервере, это не вызывает вопросов.