Как включить хранение в строках (LOB) в Sybase и когда стоит рассмотреть возможность его включения? - PullRequest
0 голосов
/ 06 ноября 2018

У меня было несколько блоков в таблице, содержащей столбцы IMAGE и TEXT (аналогично этому SO вопрос ), после некоторых исследований функция in-row и off-row в sybase ase 15.7 может улучшить производительность (если Если размер логического хранилища меньше 4 КБ, данные больших объектов будут размещены на той же странице табличных значений, которая называется в строке , дополнительная информация здесь ).

Может кто-нибудь объяснить:

-Как включить эту функцию в базе данных? это включено с командой создания таблицы? или изменить таблицу?

-Как проверить, включен ли он?

-Почему это может уменьшить или удалить блоки?

-Почему тип данных Text / image может вызывать блокировки / блоки, а включение в строках удалит его?

1 Ответ

0 голосов
/ 06 ноября 2018

Вы должны включить опцию для каждого столбца через таблицу изменения для столбца для существующей таблицы, или вы можете установить опцию, если это новая таблица для столбца:

alter table tablename modify mycol in row (500)

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

Если включено, он будет отображаться в столбце в выводе sp_help. Чтобы проверить, является ли это преимуществом, вы должны рассмотреть:

  1. Размер страницы вашего сервера данных Sybase (большие размеры тратят больше места на каждой странице текстовой цепочки)
  2. Средний размер данных в столбце текста / изображения: чем меньше размер данных, тем больше вы выиграете от использования строковых больших объектов. Если все ваши данные больше, чем размер страницы вашего сервера данных, это не принесет пользы, поскольку данные будут по-прежнему храниться вне строки, как это было до изменения.

Вам необходимо повторно загрузить данные в таблицу, чтобы изменения вступили в силу, чтобы вы могли сделать это с помощью выбора в (для создания новой копии таблицы и данных) или через BCP out / in.

Более подробная информация в документации по Sybase здесь:

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc32300.1570/html/sqlug/CHECDADI.htm

С точки зрения блокировки, когда данные соответствуют критериям и хранятся в строке, они будут считываться из самой таблицы, а не из текстовой цепочки, которая фактически представляет собой большую кучу в конце таблицы. Вы также получаете выгоду (в зависимости от размера данных) от значительной экономии места на размерах таблицы, что снижает количество операций ввода-вывода и, следовательно, может повысить производительность.

...