Как oracle db writer решает, следует ли выполнять многоблочные / последовательные записи - PullRequest
1 голос
/ 09 марта 2010

У нас есть тестовая система, которая соответствует нашей производственной системе для лайков. 6 месяцев назад мы провели некоторое тестирование на новом оборудовании и обнаружили ограничение производительности нашей системы.

Однако сейчас мы проводим повторное тестирование с целью добавления дополнительного оборудования, и мы обнаружили, что система не работает так, как раньше.

Причина этого в том, что на одном конкретном томе мы сейчас делаем случайный ввод-вывод, который раньше был последовательным. В дополнение к этому оказалось, что активность на этом томе с помощью оракула, которая составляет 100% записей, на самом деле в блоках по 8 КБ, где раньше она была до 128 КБ.

Итак, что-то заставило писателя oracle db перестать собирать записи.

Мы тщательно проверили нашу конфигурацию и не видим никакой разницы между нашей тестовой и производственной системами. Мы также открыли соединение с Oracle, но на данном этапе информация медленно поступает.

так; В конечном итоге это 2 связанных вопроса:

  1. Можете ли вы положиться на многоблочные записи Oracle? Это безопасная вещь для разработки / настройки вашей системы?
  2. Почему оракул изменит свое поведение?

Мы не обязательно на этом этапе обвиняем оракула - он вполне может реагировать на что-то в окружающей среде - но что?

ОС / арка солярис / спарк.

О; Я забыл упомянуть, что таблица вставки не имеет индексов, а содержит только пару внешних ключей - она ​​спроектирована как корзина для максимально быстрой вставки. Он также разделен на поле ключа.

Спасибо за любые советы!

1 Ответ

1 голос
/ 10 марта 2010

Более подробное описание рабочей нагрузки позволит некоторые гипотезы.

Если вы обновляете случайные блоки, у процесса (ов) DBWR не будет иного выбора, кроме как выполнять одноблочные записи. Индексы особенно вероятно будут иметь повсюду записи. Если у вас есть индекс значений символов и вам нужно вставить новую запись «M» там, где нет места, он получит новый блок для индекса и разделит текущий блок. У вас будут некоторые из этих записей «М» в исходном блоке, а некоторые в новом блоке (хотя он будет последним [использованным] блоком в последнем экстенте).

Я подозреваю, что вы, скорее всего, получите многоблочные записи при массовой вставке в таблицы, так как новые блоки будут выделяться и записываться. Потенциально изначально у вас было, скажем, 1 ГБ экстентов, и вы писали в это пространство. Теперь вы, возможно, достигли предела этого и создаете новые экстенты (скажем, 50 Мб), которые он может получать из разрозненных расположений файлов (например, из других удаленных таблиц).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...