Разделяне на таблици в Oracle практика
Рейтинг: 5/5
Един от най-ефективните начини за подобряване на ефективността на базата данни е работна маса и индекса на разделяне. Помислете за различните методи за разделяне и техните характеристики
Създаване на разделени таблици в Oracle
В тази част на статията се разглежда характеристиките на създаването на разделени таблици, последвалата дискусия се фокусира върху превода на съществуващите характеристики на големи маси в nesektsionirovanchyh разделени таблици и индекси и разделителни функции работят с раздели.
Проблеми решен чрез разделяне
Преди да се пристъпи към разделяне, ние трябва ясно да се определят задачите, които трябва да бъдат решавани
Първата и най-често срещаният проблем да бъде решен с увеличаване на производителността е разделяне на SQL-заявки и за модифициране на работа редове от таблицата DML-операции. Това се постига чрез факта, че търсенето и изменение на реда в таблицата не мине през цялата таблица, а само част от него (в една или повече секции). В допълнение, таблицата на дяловете в участъка от таблицата позволява да се увеличи скоростта на обработка чрез използването на паралелизъм.
Второто предизвикателство. който е бил широко използван в нашата организация - това е бързото отстраняване на значителен брой редове в големи таблици чрез извършване на операции съкращават секции. Друга широко използване е да се освободи пространство на таблицата на дяловете заета от масата след изтриването редове от таблицата изтриете команда. Използване на команди Shrink (таблица компресия) и преместване (преместване в пространството на маса), за да се освободи пространство на маса в голяма не-разделена таблица може да отнеме дълго време. В разделени таблици, изпълнението на тези инструкции в рамките на една секция ще бъде изпълнена много по-бързо.
Третият обект на разделяне е да се раздели с голяма маса за оперативни и архивни парчета. Това е в сила особено ако оперативната част на секция попълва интензивно и промени, и архивиран част (участък) е по-малко обект на промяна, и значително по-малко информация се екстрахира от него. Редовете на таблицата в секцията операционна в крайна сметка може да се прехвърлят в секцията архив, секциите могат да бъдат архивирани периодично почистват.
Четвъртата цел е значително намаляване на конкуренцията на редовете и индексите на масата, включително и намаляване на вероятността от блокиране. По този начин, в резултат на разделяне на една от масите по метода HASH-задача на множество блокажи, възникващи в таблицата е напълно решен.
разделящ ключ
Следващата важна стъпка в създаването на разделена таблица е да се определи разделящ ключ. Както ключът може да действа разделяне колона или няколко колони, по отношение на стойностите, които ще бъдат направени в части на отстояние маса. Потенциалът за създаване на колони включва колони ключов дял дата тип (например, създаден колона - дата на създаване на линии или обновяват - промени дата линия) за разделяне на Range Списък и методи. Колони номер тип, с висока степен на уникалност ценности са много подходящи за разделяне обхват и Hash методи. Колони със списък на фиксирани стойности, подходящи за разделяне списък.
В Oracle 11g възможност като ключов колона разделяне да се използва виртуална (виртуална колона), построен върху функциите на реалната колона от таблицата. Виртуална колона всъщност не се съхранява в таблицата, и всеки път, когато се изчислява в зависимост от това по време на въвеждане на данни в таблицата. използване винаги генерира като фраза за създаване на виртуална колона. след което има функция, осъществявана в условията на реален колона на таблицата, и по-нататък има задължителна присъда виртуално. Например, PARTID винаги генерира AS (to_char (актуализирано, "ММ")) виртуална. Вариантът на виртуален колона по-кратък израз PARTID AS (to_char (актуализирано, "ММ")).
Вижте коя колона в таблицата позволява виртуална поискване:
Забележка. При въвеждане на данни в таблица с една виртуална колона трябва да бъде включена в списъка на ценности и вмъквате колони, в противен случай това би било грешка ORA-00947: не е достатъчно стойност.
методи Таблица разделителни
Разделяне повишава ефективността на таблиците и индексите
избраният ключ на разпределение, обикновено се определят методите за разделяне. В момента има следните методи за разделяне на таблици:
- Обхват -sektsionirovanie през обхвата на ключ
- Списък - разделяне на ключови списък.
- Hash - хеш разделяне,
- композитен разделяне.
- интервал разделяне.
- референтна разделяне,
- система за разделяне
Последните три са на Oracle 11 грама. Въпреки това, като последните две не сме намерили кой знае каква полза.
метод Range разделяне за ключ гама
В практиката на метод за разделяне Range използват два вида разделяне: от период и в диапазона на стойностите.
Range разделяне по период от време
Разделянето на този метод, ние използваме подялбата на ден, месец и година. Разделянето на този метод показва пример в таблица HISTLG ФАИ схема. разделящ ключ служи актуална колона (ред дата корекция), със секции са секции в стъпки от един месец. Команда за създаване на разделена таблица създадете, е:
Обърнете специално внимание на последното изречение даде възможност РЕД ЗА ДВИЖЕНИЕ, което ви позволява да се движите в редовете на таблицата от раздел раздел. При липсата на тази фраза Oracle ще върне грешка. Линиите на преход от секции може да се случи автоматично, когато стойността на ключов (например, актуализиран колона от актуализацията на сделката се променя стойността на този факт. На което той трябва вече принадлежи на друг раздел) или може да бъде конкретно, например, да се прехвърлят линии от главния раздел в секцията архив чрез промяна на стойностите на ключ колона. Ако не посочите тази фраза при създаването на една маса, за да се избегнат грешки, извършване на TABLE команда таблицата с имената на ALTER ENABLE РЕД ЗА ДВИЖЕНИЕ.
Вижте частта от таблицата е на разположение при поискване:
Секция съдържание за:
метод за разделяне Rang обсег стойности на
Разделяне на диапазона от стойности, подобни на разделяне от период от време, само че вместо по дата ключ, използван от клавиша колона, числови стойности (за предпочитане с равномерно разпределение в диапазон от стойности). Работи добре за тази колона с уникална стойност. Да разгледаме например същото AIF.HISTLG таблицата по-горе разпределя от период от време. Като използва ISN дял ключ колона с уникални стойности. Командата за създаване на таблицата е:
където ПРЕГРАДИ ОТ ГАМА (ISN) показва не ГАМА разделяне с ISN преградната ключ, интервал секцията създаване през 1000 стойности.
Създаване на нов раздел в разделена таблица с помощта на метод Range
Всеки път, когато се създаде разделена таблица, там е труден въпрос: как да се създаде нов раздел. Преди Oracle 11грама имаше три възможности за създаване на нов дял.
UPDATE GLOBAL ПОКАЗАТЕЛИ фраза осигурява обслужваемост индекси след Сплит команда.
Вторият вариант - да се създаде процедура, която автоматично създава нов раздел. Такава универсална процедура за секциониране на дните, месеците, е разработен от нас. Тази процедура започва работа Sheduler дневно за секциониране на ден или месец по месец за секциониране.
Тези процедури работят успешно в продължение на няколко години, създаването на нов раздел в своевременно. В основата на процедурата е да предостави ALL_TAB_PARTITIONS маса и Сплит команда за търсене на последната част на този раздел чрез разделяне ALTER команда по-горе.
Третият вариант (разработен от нашите специалисти и се използва успешно в продължение на няколко години) - е да се създаде разделена таблица с раздели, които се използват в един цикъл. Чрез разделяне на таблици на един цикъл се отнася до разделяне, направено в съответствие с две правила. Първото правило - таблица трябва да съдържа определен брой секции, равни на максимален брой дни в месеца (раздел 31), или максималния брой дни в годината (366 секции), или на броя на месеците в годината (12 единици). Втори данни правило в същия раздел попадат в определени интервали от време (цикъла).
В Oracle 11грама, нова забележителна способност за автоматично създаване на секции, използващи при създаването на една маса INTERVAL фраза (този подход се нарича интервал за разделяне на интервал за разделяне). След това, когато се създаде раздел за период от време, като се използва Range екип фраза Интервал създаде разделена таблица ще бъде:
където INTERVAL фраза (INTERVAL "1" МЕСЕЦ) показва, че секцията ще бъде създаден автоматично всеки месец (на същата фраза може да бъде под формата на интервала на (NUMTOYMINTERVAL (1. "месец"). За разделянето на ден използват израза интервала (INTERVAL "1" ДЕН .), а данните - интервала (интервал '1' годината), когато автоматично създаване на секции Range интервални стойности с помощта на израза интервал командата създаване маса е под формата:
където отношение интервала (1000) определя начина на автоматично създаване през 1000 раздел ISN ценности.
Трябва да се отбележи, че новите участъци са създадени в процеса на въвеждане на данни. Трябва също да се има предвид, че новото име, автоматично се създава раздел ще изглежда SYS_PNNNNN, например, SYS_P28981. В този случай, когато разделянето интервал не е необходимо да се създаде последния раздел стойности по-малки (MAXVALUE). в противен случай ORA-14761 грешка.
Ето защо, в Oracle 11 грама в Създаване на създаване на разделена таблица значително по-малък брой линии, както и създаването на нов раздел на Oracle се грижи за своевременно.
СПИСЪК ключ за делене списък
Разделяне в списъка се използва, ако е възможно да се посочи конкретен списък с дискретни стойности на колоната, на която се разпада на части. Разделяне на командата LIST, за да се създаде определен метод за разделяне СПИСЪК (ПРЕГРАДИ по списък), разделящ ключ, както и имената на разделите, които зададете една или повече дискретни стойности.
недвижими колона partid (тип номер) може да бъде въведена вместо виртуалната колона, пълна с входните линии в таблицата. В предишния вариант се използва ефективно в таблиците с разделите 366 и 12 на последния с почистване отрязък, тъй като информацията се съхранява в таблици по-малко от една година. Предимството на този подход е, че можете да създавате нови секции не трябва да, тъй като пространството за таблици на старите участъци на месечните бързо освобождава от пресечен.
Забележка. Ако трябва да се изчисти част на таблицата пространство, след това да използва командата компресия се свие или MOVE (премести в пространство за таблици):
Други стандартни опции метод СПИСЪК разделяне изложени в различни източници.
Hash разделяне HASH
Като общо правило, ако не може да се разделя с интервал от време или от списъка, а след това използвайте heshsektsionirovanie на базата на хеш функция. В този случай, редовете на таблицата са разпределени равномерно между секциите на базата на вътрешни алгоритми хеширане Oracle. В този случай уникална стойност от колона в таблицата, по които разделянето, за по-добро разпределение на дяловете на данните. първичен ключ или уникален колона (и) е добра хеш бутона. Oracle препоръчва N брой секции като силата на 2, т.е. N = 2,4,8,16,32 и т.н. В този случай добавяне или премахване на някои хеш пренаписване раздел причинява всички данни в друга секция. Помислете за разделяне на таблици indeksnoorganizovannoy LISTIN на пример HASH. Целта на масата за разделяне HASH беше да се постигне значително намаляване на броя на ключалки, които възникват в тази таблица. Тази цел бе успешно приложена за сметка на таблицата на дяловете на 16 секции (фразата прегради 16), където ключовият разделяне извършва TASKISN колона. Командата за създаване на таблицата е:
Трябва да се отбележи, че ако един ключ се използва като колона дял, който имат много неравномерно разпределение на стойностите на колоната (уникалност малка), след прилагането на хеш разделяне не е целесъобразно. Броят на секциите не е от значение, тъй като всички стойности на ключ колона "падат" в една или две секции.
Забележка. Вижте размера на секции в УС на всички по-горе методи могат да бъдат за:
композитен разделяне
Когато съставния разделяне в раздела са подраздели Въпреки това, в версии преди Oracle 11гр смесва разделяне допускат само по метод обхват за секцията, и методи за HASH или списък към подраздел. В Oracle 11g версии на секциите на методи, подсекции са значително разширена и сега е възможно да се извърши комбинирана разделяне в следните комбинации: Range-планина, Range хеша. Range-Списък, Списък на динамичния обхват, Списък-Hash или Уст-List. Трябва да се отбележи, че когато един композитен данни разделяне е физическото съхранение в подраздели и секциите Payuta действал, само като логически контейнери.
Вземем примера на една маса смесен разделяне AIF.PAY_ORD_RECORD плащания с маса за разделяне на метод секции RANGE и подраздел на метод LIST. ключови разделителни секции да излиза на PAY_DATA колона (дата тип), ключов разделяне подраздел подава колона STATUS (тип номер), получавайки три стойности: 0. 1,2. Команда за създаване на разделена таблица в Oracle 11грама с секциониране от месец ще бъде:
Система за разделяне (система за разделяне)
Въведена в Oracle единайсетграма и обикновено се прилага към таблици, които не могат да бъдат разделени чрез други методи. При този метод, се управлява Oracle, всеки ред от таблицата, в която да се постави точка. За този метод, просто трябва да напишете името на секциите, например, раздел P1, P2, RH:
Вижте таблицата в секцията дял е на разположение при поискване:
Вижте метода на разделяне, това е системата, при поискване:
Трябва да се отбележи, че е необходимо да се коригира за въвеждане на данни в таблицата, в допълнение към името на таблицата, посочете името на друг сегмент, в противен случай тя ще ORA-14701 грешка. Също така за бърз пренос на данни извличане на заявлението посочва името на сегмента.
Забележка. Таблица разделяне на маса може да се подложи не само себе си, но също така и индекси на масата. Благодарение на силата на звука и съществено значение за индексите на разделителни ще бъдат обсъдени във втората част. Там ще научите повече за функциите на прехода от неразделени таблици за големи обем разделени таблици, включително свързани с такива ситуации характеристики на поведението индекси, тригери, синоними и т.н. тези таблици.
- Разделяне повишава ефективността на таблиците и индексите, което позволява да се решат проблемите, споменати в самото начало.
- Важна стъпка е да се определи разделящ ключ разделяне. В Oracle 11грама е възможно да се използва виртуална колона като разделящ ключ. Ако не можете да идентифицирате разделящ ключ трябва да обмисли възможността за използване метод HASH или системен дял.
- Изборът на метод за разделяне се определя до голяма степен от избора на разделящ ключ, както и броя на методи за разделяне значително разширена в Oracle 11гр.
- Важното е да се избере подход, таблицата на дяловете до създаването на нов раздел. В статията се предлага три подхода: развитието на процедурите за автоматично създаване на секции се извършва периодично от работа, следния подход - е да се използва разделяне на цикъла или използването на интервал за разделяне.
- Разделяне на масата позволява, в допълнение към разделяне на масата на секции, за да създаде вътре в секцията има подраздел с редица комбинации Oracle единадесет гр сечение подраздел техники значително разширени.
Обсъдете тази статия