KNOW INTUIT, Лекция, Структурата на съвременна СУБД на примера на Microsoft SQL Server 2008
Организация на таблици и индекси
Таблиците и индексите се съхраняват като колекция от страници от 8 KB.
Таблицата и индексните страници се съдържат в един или повече дяла.Разделът е дефинирана от потребителя единица за организация на данните. По подразбиране таблица или индекс има един дял, който съдържа всички страници на таблицата или индекса. Разделът се намира в същата файлова група. Таблица или индекс, който има един дял, е еквивалентен на организационната структура на таблици и индекси в предишни версии на SQL Server.
Ако таблицата или индексът използва множество дялове, данните се разделят хоризонтално, така че групите редове да се съпоставят към отделни дялове въз основа на указаната колона. Дяловете могат да се съхраняват в една или повече файлови групи в базата данни. Таблица или индекс се третират като единична логическа единица, когато се извършват заявки или актуализации на данните. Разделът се състои от фрагменти от един или повече файлове. Данните вътре във файлов фрагмент са представени като купчина (редове от данни се съхраняват без определен ред - последователно разположение) или балансирано дърво. Един файлов фрагмент може да има един от трите типа: данни с малък размер (данни IN_ROW_DATA), данни с голям размер (LOB_DATA), данни с променлива дължина (ред препълване ROW_OVERFLOW_DATA).
Всяка купчина или индексен дял съдържа поне една единица за разпределение IN_ROW_DATA. Освен това, в зависимост от схемата на купчината или индекса, той може да съдържа LOB_DATA или ROW_OVERFLOW_DATA единици за разпределение.
Следващата илюстрация показва организацията на таблицата (Фигура 10.4).

Всеки раздел съдържа редове с данниили в купчината, или в структура на клъстерен индекс. Клъстърираният индекс се реализира като индексна структура на B-дърво, която поддържа бързо търсене на редове по техните ключови стойности. Страниците във всяко ниво на индекса, включително страниците с данни на ниво лист, са свързани в двойно свързан списък. Преминаването от едно ниво към друго обаче се извършва с помощта на ключови стойности.
Хийп е поредица от редове на таблица, които нямат клъстерен индекс. Редовете с данни не се съхраняват в определен ред и няма ред в последователността на страниците с данни. Страниците с данни не са свързани в свързан списък.
Управление на екстенти и свободно пространство
Структурите от данни на SQL Server, които контролират използването на степента и проследяването на свободното пространство, са относително прости по структура. Информацията за свободното пространство е гъсто опакована, така че тези данни съдържат относително малък брой страници. Това води до увеличаване на скоростта поради намаляването на необходимите четения на диска за получаване на информация за местоположението. Това също така увеличава вероятността страниците с оформление да останат в паметта и да не се налага повторно четене. По-голямата част от информацията за разположението не е свързана една с друга. Това улеснява управлението на информацията за разположението. Всяко действие за поставяне или освобождаване на страница може да се извърши бързо. Това намалява конфликтите между едновременното използване на страници и задачите за освобождаване.
SQL Server използва два типа карти за записване на информация за използване на екстент:
- Глобална карта на разпространение (GAM)
Страниците на GAM записват кои екстенти са били използвани. Във всяка GAM картасъдържа информация за използването на 64 000 екстента или около 4 GB данни. GAM картата има един бит за всеки екстент в интервала, който покрива. Ако битът е 1, тогава степента е свободна; ако битът е 0, тогава екстентът е разрешен.
- Обща глобална карта за разпределение (SGAM)
Страниците на SGAM записват кои екстенти се използват в момента като смесени екстенти и имат поне една неизползвана страница. Всяка карта на SGAM съдържа информация за използването на 64 000 екстента или почти 4 GB данни. Картата SGAM има един бит за всеки екстент в интервала, който покрива. Ако битът е 1, тогава екстентът се използва като смесен екстент и има свободна страница. Ако битът е 0, тогава екстентът не се използва като смесен екстент или е смесен екстент, но се използват всичките му страници.
Това предоставя прости алгоритми за управление на екстентите на страницата. За да използва обект с унифициран екстент за съхраняване на обекта, Database Engine търси в GAM бит 1 и го задава на бит 0. За да намери смесен екстент със свободни страници, Database Engine търси в SGAM бит 1. За да разпредели смесен екстент, Database Engine търси в GAM бит 1 и го заменя с бит 0, след което задава съответния бит в SGAM на 1. За да освободи степента, Database e Двигател Database Engine задава GAM бита на 1 и съответния бит SGAM на 0. Вътрешните алгоритми, действително използвани от Database Engine, са по-сложни от описаните в този раздел, тъй като Database Engine разпределя данните равномерно в базата данни.Въпреки това, дори истинските алгоритми са опростени чрез елиминиране на необходимостта от управление на вериги от информация за разпределение на екстент.
Проследяване на свободно пространство
PFS (Page Free Space) страниците записват статуса на разположение на всяка страница, информация за това дали отделна страница е била използвана или не и количеството свободно пространство на всяка страница. В PFS има един байт на страница, който съхранява информация дали страницата е била използвана или не и ако е била, значи е празна или запълването й е в диапазона от 1 до 50 процента, от 51 до 80 процента, от 81 до 95 процента или от 96 до 100 процента.
След като даден обект бъде разпределен към екстент, Database Engine използва PFS страници, за да запише информация за това кои страници в екстента се използват и кои са безплатни. Тази информация се използва от Database Engine при избор на нова страница за хостване на обекти. Количеството свободно пространство на страница може да се управлява само за купчини и страници с типове данни текст и бележки. Това е полезно, когато търсите страница, която има достатъчно свободно място за съхраняване на новодобавения ред в нея. Индексите не изискват свободно място на страницата, за да бъдат проследени, тъй като мястото, където ще бъде вмъкнат новият ред, се определя от стойностите на ключа на индекса.
PFS страницата е първата страница след заглавната страница на файла във файла с данни (страница номер 1). След това идва страницата GAM (страница номер 2) и след това страницата SGAM (страница номер 3). След първата PFS страница следва PFS страница с приблизително 8000 страници. След първата GAM страница на страница 2 има друга GAM страница с 64 000 екстента и друга SGAM страница с 64 000extents се намира след първата страница SGAM на страница номер 3. На фиг. Фигура 10-5 показва последователността от страници, използвани от Database Engine за оформление и управление на екстенти.
Резюме: Лекцията описва архитектурата на една от най-разпространените клиент-сървър СУБД - Microsoft SQL Server. Основните компоненти на съответната СУБД архитектура са описани на различни нива на абстракция. Разглежда се логическото ниво (нивото на модела на данни СУБД като средство за представяне на концептуалния модел), което включва следните понятия: таблици и типове данни, първични и външни ключове, индекси, изгледи, асембли, ограничения, правила, стойности по подразбиране). Разглежда се физическото ниво (вътрешно представяне на данни в компютърната памет - физическата структура на базата данни), включващо следните понятия: файлове и файлови групи, лог файлове, страници и екстенти, физическа организация на таблици и индекси, управление на работата с екстенти и памет).
Повече подробности за материалите на тази лекция можете да намерите в [ [ 10.1 ] , [ 10.2 ] , [ 3.3 ] ]