Производительность Oracle схемы изменяется по сравнению с MySQL ALTER TABLE? - PullRequest
3 голосов
/ 05 марта 2009

При использовании таблиц MySQL MyISAM и выполнении оператора ALTER TABLE для добавления столбца MySQL создает временную таблицу и копирует все данные в новую таблицу перед перезаписью исходной таблицы.

Если в этой таблице много данных, этот процесс может быть очень медленным (особенно при перестроении индексов) и требует, чтобы у вас было достаточно свободного места на диске для хранения 2 копий таблицы. Это очень раздражает.

Как работает Oracle при добавлении столбцов? Это быстро на больших столах?

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

Ответы [ 2 ]

6 голосов
/ 05 марта 2009

Добавление столбца без данных в большую таблицу в Oracle, как правило, происходит очень быстро. Нет временной копии данных и нет необходимости перестраивать индексы. Замедление обычно возникает, когда вы хотите добавить столбец в большую таблицу и засыпать данные в этот новый столбец для всех существующих строк, поскольку теперь вы говорите об операторе UPDATE, который влияет на большое количество строк.

Добавление столбцов может привести к миграции строки с течением времени. Если у вас есть блок, заполненный на 80% четырьмя строками, и вы добавляете столбцы, которые со временем увеличивают размер каждой строки на 30%, вы в конечном итоге достигнете точки, когда Oracle должен переместить одну из четырех строк в другую блок. Он делает это, оставляя указатель на новый блок в старом блоке, что заставляет операции чтения в этой перенесенной строке требовать больше операций ввода-вывода. Устранение перенесенных строк может быть несколько дорогостоящим, и, хотя, как правило, можно обойтись без простоев, если вы используете корпоративную версию, обычно проще, если у вас есть небольшое время простоя. Но миграция строк - это то, о чем вам обычно нужно беспокоиться только в будущем. Если вы знаете, что в некоторых таблицах размер строк может значительно увеличиться в будущем, вы можете заранее решить проблему, указав для таблицы больший параметр PCTFREE.

2 голосов
/ 05 марта 2009

Что касается времени простоя, изменение таблицы (и куча других операций DDL) требует эксклюзивной блокировки. Однако Oracle также может выполнять переопределение объектов в режиме онлайн, используя пакет DBMS_REDEFINITION, который действительно может сократить время простоя.

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