Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Тоу Д. -> "Настройка SQL. Для профессионалов" -> 16

Настройка SQL. Для профессионалов - Тоу Д.

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 10 11 12 13 14 15 < 16 > 17 18 19 20 21 22 .. 161 >> Следующая


движется по направлению к верхушке экстента, по достижении которой выделяется новый экстент1. Выше отметки заполнения находится пространство, зарезервированное для записи будущих данных, причем база данных никогда не обращается к этому пространству при считывании данных. Отметка заполнения не перемещается вниз, если только вы не перестраиваете или не усекаете таблицу. Рисунок 2.2 иллюстрирует схемы роста таблицы, описанные в следующих разделах.

Tl

Обозначения:!________________

I I Экстент EEEE

Самые новые строки EEEE

Недавние, EEEE

но не новые строки EEEE

Самые старые строки EEEE

Отметка EEEE

заполнения таблицы Izzlzizzzzz

Последовательное увеличение

данных вне зависимости от возраста

Рис. 2.2. Увеличение и старение физической таблицы

Последовательный рост

Последовательный рост, показанный на экстенте Tl (рис. 2.2), — это наиболее распространенная схема среди таблиц транзакций, когда постоянно добавляются новые строки, но практически никогда не удаляются старые. Ситуация, когда старые строки остаются в таблице, давно уже не принося никакой пользы, очень часто причиняет неудобства в работе. Однако приходится решать, какой вариант безопаснее. Удалять данные — это тяжелая (и небезопасная) работа, даже если не учитывать усилия, потраченные на написание выполняющих это задание процедур. Так или иначе, рассмотрение этого вопроса обычно оказывается в самом конце списка приоритетов для возможностей продукта (да и кому это нужно в первом выпуске продукта?), к большому удовольствию производителей жестких дисков.

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

12

ТЗ

Т4

Удаление самых старых

Удаление

данных

Полное удаление, рост с нуля

1 Это описание наиболее точно подходит для Oracle, однако различия в этой области между продуктами разных поставщиков несущественны для настройки SQL.
Таблицы

35

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

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

Удаление самых старых данных

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

Удаление данных вне зависимости от возраста

Удаление данных независимо от их возраста, показанное для экстента ТЗ на рис. 2.2, отражает схему удаления строк, которая не зависит от их возраста. Добавление новых данных в блоки разрешается сразу же, как только свободное пространство в них превышает определенный порог (обычно 60 % в Oracle); они остаются доступными для записи, пока свободное пространство в них не уменьшится до значения другого порога (обычно 10 % свободного пространства в Oracle). Это происходит с блоками, которые случайно разбросаны по таблице, поэтому новые строки вставляются неравномерно, а кэширование со временем усложняется как из-за того, что в среднем в блоках много свободного места, так и из-за того, что интересующие нас строки могут находиться в любой части таблицы. Однако такая схема удаления предполагает, что заинтересованность приложения в строках не зависит от их возраста, поэтому кэширование такой таблицы затруднено и без того, что удаление бессистемно разбрасывает новые строки.
Предыдущая << 1 .. 10 11 12 13 14 15 < 16 > 17 18 19 20 21 22 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100