Если у меня есть таблица Oracle со столбцом VARCHAR2 длиной 4000, и я вставил в таблицу строку из 4000 символов, а затем обновил строку строкой из 1 символа, нужно ли мне что-либо делать, чтобы остальные 3999 символов пространство, доступное для повторного использования, или оно автоматически доступно для повторного использования?
Нужно ли мне освобождать место в Oracle при обновлении столбца varchar2?
Ответы (1)
После обновления 3999 байт пространства (при условии, что 1 символ = 1 байт в наборе символов вашей базы данных) освобождается в блоке, в котором находится строка. Это пространство будет немедленно доступно, если другие строки в этом блоке должны увеличиться в размере или если другие столбцы в этой строке должны увеличиться в размере. Конечно, поскольку большинство баз данных используют блоки размером 8 КБ, а наибольший размер блока составляет 32 КБ, вполне вероятно, что в этом конкретном блоке относительно мало строк, поскольку исходная строка была очень большой.
Oracle также отслеживает, насколько заполнены блоки, и использует эту информацию, чтобы сделать их доступными для последующих insert
операций. Механизм этого зависит от типа табличного пространства (локально или по словарю), политики управления пространством сегментов (автоматически или вручную) и параметров уровня таблицы, таких как pctused
. Однако на высоком уровне освобождение 4 КБ пространства в одном блоке данных почти наверняка приведет к тому, что блок данных станет доступным для будущих insert
операций (или для update
операций, которые вызывают необходимость переноса строк из других блоков в новый блок или объединены в несколько блоков). Таким образом, пространство почти наверняка будет доступно для повторного использования.