Нужно ли еще беспокоиться о фрагментации строк при использовании флэш-накопителя?

При выборе типов данных char/varchar2 для столбцов таблицы всегда нужно было задумываться о фрагментации строк, когда пакет выпускает / удаляет / вставляет / обновляет таблицы, потому что Oracle пытается разместить новые данные в открытых свободных пространствах, и поэтому фрагментация может начать замедляться. вниз производительность в какое-то время. Теперь все изменилось с дисками флэш-памяти, потому что данные записываются настолько фрагментированно, насколько это возможно благодаря самой технологии флэш-памяти. Если нам не нужно заботиться о фрагментации, то это нарушает общее представление о проблемах хранения табличных данных и фрагментации данных. У кого-нибудь есть опыт хранения файлов базы данных на флеш-накопителях? Проблема фрагментации ушла с дисками ssd?

1 ответ

Решение

Нет такой вещи, как "фрагментация строк", как вы ее описываете, и, по правде говоря, это никогда не должно определять ваш выбор. char или же varchar2 типы данных. Выбор типа данных должен зависеть от характера данных и от того, действительно ли это фиксированная ширина или переменная ширина. 99,9% времени, вы должны предпочесть varchar2,

Наименьшая единица ввода / вывода Oracle, возможно, может читать или записывать, это блок. Блок обычно составляет 8 КБ (хотя он может быть как 2 КБ, так и 32 КБ). Блок обычно хранит данные для нескольких строк. Поскольку Oracle должен записывать весь блок каждый раз, не имеет значения, нужно ли ему перемещать данные внутри блока.

Внутри блока Oracle резервирует определенное количество места для будущего роста. Это контролируется PCTFREE сервировка стола. Если вы ожидаете, что ваши строки будут значительно расти со временем, вы бы использовали большой PCTFREE, Если вы ожидаете, что со временем ваши строки будут статическими по размеру, вы должны использовать небольшой PCTFREE, Вы не хотите корректировать типы данных, чтобы предотвратить изменение размера строк, вам нужно настроить таблицу PCTFREE быть подходящим для любых изменений, которые вы ожидаете.

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

Независимо от системы хранения, вы хотите установить PCTFREE вашей таблицы соответствующим образом, чтобы вы минимизировали объем миграции строк, происходящий с течением времени (в некоторых угловых случаях есть другие способы минимизировать миграцию строк, но в 99% случаев вы действительно просто хотите установить PCTFREE правильно). Используйте подходящие типы данных для данных, которые вы пытаетесь сохранить, не позволяйте заботе о переносе строк влиять на ваш выбор типов данных.

Другие вопросы по тегам