Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
 Re: Партиционирование таблицы  [new]
Aliona
Member

Откуда: Питер
Сообщений: 4023
Объясните, что делать с индексами.
Создаю новую таблицу с одной партицией, обмениваюсь партицией со старой таблицей.
Потом, в некотором удалённом будущем, буду расщеплять большую партицию на мелкие.
Но пока мне надо создать индексы, 2 из них непартиционированные, с ними все понятно, я их просто создаю,
А 3 индекса партиционированные. Как мне их создавать , сразу партиционировать на много партиций или созать одну партицию , а потом её расщеплять на мелкие, одновременно с расщеплением партиции самой таблицы?
6 апр 06, 15:31    [2532357]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Aliona
Объясните, что делать с индексами.

Вопрос немного более сложен.
Надо проанализировать имеющиеся индексы, запросы и решить, можно ли индексы сделать локальными. Если можно, то надо делать.
Для глобальных индексов необходимо провести отдельное исследование с целью определения выигрышной стратегии секционирования.
Несекционированный же индекс на секционированной таблице - это что-то из фильмов ужасов.
6 апр 06, 15:36    [2532391]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
Aliona
Member

Откуда: Питер
Сообщений: 4023
или я запуталась а определениях или ....
У меня есть 2 индекса, в которые не входит поле, по которому секционируется таблица, их точно секционировать нельзя.
Они глобальные или какие? Что с ними делать?
Есть 3 индекса с полем секционирования. Их секционировать или?
Хотела их сделатьлокальными и секционировать.

Анализ индексов и запросов не в моей компетенуии. У нас на это есть целая армия программистов. Я им выдала списов из 20-30 лишних индексов, которые дублируют друг друга, они сказали, что индексы им нужны, я к ним больше не пристаю.
6 апр 06, 15:57    [2532548]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
Aliona
Member

Откуда: Питер
Сообщений: 4023
ещё поясню,секционирование проводится не для повышения производительности, а для переведения нетокорых данных в read-only, чтобы их не бэкапировать, а то нехватает дискового пространства, чтобы включить archivelog.
6 апр 06, 16:02    [2532580]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Aliona
или я запуталась а определениях или ....

Ну где же Elic???
:)
6 апр 06, 16:20    [2532710]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
Aliona
Member

Откуда: Питер
Сообщений: 4023
не поняла шутки юмора :(
6 апр 06, 16:33    [2532800]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Aliona
не поняла шутки юмора :(

Вы взялись за дело, требующее не только технологического окна, но и серьезной подготовки.
Желательно все-таки ознакомиться с документацией и определиться со стратегией индексирования, приемлемой для Ваших условий.
Если Вы собираетесь переводить TS в readonly, то ИМХО ваш выбор - локальные индексы.
Очень важен и выбор ключа секционирования - он не только должен присутствовать во всех запросах к секционированной таблице, но и характер ограничений, накладываемых на наго в запросах, должен позволять oracle исключать ненужные разделы ("partition pruning").
Боюсь, без помощи разработчиков ничего хорошего у Вас не выйдет :(
В любом случае, хочу напомнить про первое правило оптимизации: не навреди.
6 апр 06, 16:41    [2532860]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
Aliona
Member

Откуда: Питер
Сообщений: 4023
Я за это дело не сама взялась, а получила задание от главного администратора и главного разработкика. Взять исходную таблицу и исходными индексаии и партиционировать её, и индексы. Только они предлагают это сделать импортом-экспортом, как было описано в первом моём сообщении. И всё это уже мной проделано на резервном сервере, давным-давно, разработчики с ним работают и не жалуются на производительность. Так что не надо без причины меня мокать головой в унитаз.

Что делать с индексами пока я буду делать excange и split partition у таблицы?
6 апр 06, 17:03    [2533032]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Aliona
Так что не надо без причины меня мокать головой в унитаз.
Пусть оправдываются виноватые :)
Aliona

Что делать с индексами пока я буду делать excange и split partition у таблицы?

Для exchange индексы все должны быть построены и валидны.
При split с локальными делать ничего не надо, глобальные секционируются по своей собственной стратегии.
6 апр 06, 17:06    [2533060]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
Aliona
Member

Откуда: Питер
Сообщений: 4023
andrey_anonymous
Для exchange индексы все должны быть построены и валидны.
При split с локальными делать ничего не надо, глобальные секционируются по своей собственной стратегии.

Не поняла.
если я делаю alter table exchange partition, что происходит с индексами?
6 апр 06, 17:22    [2533181]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
Aliona
Member

Откуда: Питер
Сообщений: 4023
andrey_anonymous
Несекционированный же индекс на секционированной таблице - это что-то из фильмов ужасов.

Из документации по Оракл 8i
автор
You can mix partitioned and nonpartitioned indexes with partitioned and nonpartitioned tables:

A partitioned table can have partitioned and/or nonpartitioned indexes.

A nonpartitioned table can have partitioned and/or nonpartitioned B-tree indexes


Огромное спасибо scela и mcureenab за доходчивые объяснения, теперь хоть знаю, что искаь в документации.
Из того-что написал Андрей-аноним не поняла ни слова, видимо не доросла ещё, зато дала ему возможность покрасоваться своими знаниями.
6 апр 06, 17:42    [2533329]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Aliona
автор
You can mix

Разумеется, You can. Но это не означает, что так следует поступать.
Просто задумайтесь как оно будет работать.
По поводу красоваться...
Ну как бы Вам сказать, я всего лишь пытаюсь предостеречь Вас от ошибок.
Слишком просто оказаться очень крайним.
С другой стороны, часть людей предпочитает постигать все экспериментально, так что вперед :)
6 апр 06, 17:52    [2533398]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
ёпс
Guest
andrey_anonymous
Несекционированный же индекс на секционированной таблице - это что-то из фильмов ужасов.

Гы-ы-ы-ы-ы...
6 апр 06, 17:58    [2533441]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
Aliona
Member

Откуда: Питер
Сообщений: 4023
Ещё раз повторю, что на одном сервере у меня это уже всё работает, причем программисты утверждают, что работает быстрее, чем было.

Прочитала в документации, что придётся перестраивать все индексы и глобальные и локальные после каждого split partition у таблицы, так что похоже мероприятие затянется на долго, как кто-то уже говорил.
Так что, видимо, придется перестроить всё разом.
6 апр 06, 19:03    [2533729]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
scela
Member

Откуда: Москва
Сообщений: 565
Aliona
Ещё раз повторю, что на одном сервере у меня это уже всё работает, причем программисты утверждают, что работает быстрее, чем было.

Возможно.
Тут есть несколько подводных камней - например, параметр parallel у таблички иль индекса может сыграть злую шутку.

Aliona

Прочитала в документации, что придётся перестраивать все индексы и глобальные и локальные после каждого split partition у таблицы, так что похоже мероприятие затянется на долго, как кто-то уже говорил.
Так что, видимо, придется перестроить всё разом.

ссылочку можно на доку, где сказало о перестройке всех локальных индексов ? :)

Про split:
Упрощенно, индекс содержит значение и rowid, где енто значение лежит.
раз rowid не меняется, то и индекс остается валидным.
посему простой вывод - при split нужно перестроить все глобальные индексы и те локальные, которые жили в split-ных секциях.
Например, так:
ALTER TABLE T MODIFY PARTITION PMAX REBUILD UNUSABLE LOCAL INDEXES;

Про глобальные индексы:
Штука кошмарная, но тем не менее встречается в жизни.
Посему надо выяснить у разработчиков, зачем оно и можно ли его в секционированный перевести.

Aliona

если я делаю alter table exchange partition, что происходит с индексами?

Смотря с какими. в секционной табле: глобальные упадут. локальные в сторонке - будут жить.

Aliona

Огромное спасибо ...

да заходи :)
7 апр 06, 09:46    [2534738]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
@Alex
Member

Откуда:
Сообщений: 145
Могу предложить еще одно направление. Не знаю характера работы аппликации и БД, размеров сегментов данных, скорости вашей аппаратуры, но модет быть подойдет такой варинат:

- Создаете таблицу разбитую на секции и индексы ( кроме первичного ключа)
- зливаете те данные которые котовятся к только для чтения.
- Планируете время X. если например в таблице не бывает упдейтов или делетов за вчерашний день, то во время X, блокируете исходную таблицу заливаете последнюю порцию данных за сегодня. Индексы уже готовы.
- Далее переименовываете старую таблицу и старые индексы.
- Переименовываете новую таблицу и индексы.
- Первичный ключ к сожалению на старой таблице придется убить на новой создать.
- раздаете права, создаете триггеры на новoй ( если надо)
- перекомпилируете INVALID'ы

Но в принципе Вам на месте виднее.

Далее, не для саморисовки ради, хочу поддержать тех уважаемых форумчан которые рекомендуют присутствовать при этом действе. В час X может быть по разному. Учитывая то что раздачу прав и перекомпиляцию INVALID'ов надо будет делать в любом случае, велика вероятносьт DDL и DML блокировок. В результате чего БД простоит всю ночь и уторм будет откат при всеобщем простое.
Как бы хорошо не был подготовлен скрипт и тестовый комплекс, он все равно отличен от условий эксплуатации боевой БД
7 апр 06, 10:46    [2535064]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
Aliona
Member

Откуда: Питер
Сообщений: 4023
то что присутствовать при выполнении скриптов придётся, я уже поняла.
Тем более что начальство мне пару отгульчиков дало, так что я вроде морально созрела иногда поработать в нерабочее время.

В документации по перестройке локалного индекса так и написано, что после split партиции надо перестраивать индекс этой партиции и так 8 раз, поэтому я и решила сделать 8 сплитов в одином скрипте, чтобы 8 раз не перестраивать индексы самой большой партиции
7 апр 06, 15:21    [2537069]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
scela
Member

Откуда: Москва
Сообщений: 565
Aliona
то что присутствовать при выполнении скриптов придётся, я уже поняла.
Тем более что начальство мне пару отгульчиков дало, так что я вроде морально созрела иногда поработать в нерабочее время.

Если есть удаленный доступ, то необязательно. :)
вообще можно начать выполнять скрипт рано утром через cron
Придешь на работу - а уже все сделано:)

Aliona

В документации по перестройке локалного индекса так и написано, что после split партиции надо перестраивать индекс этой партиции

Ты делишь секцию на 2 части - в обоих частях индексы будут unusable.
Следовательно - перестраивать надо индексы в обеих секциях.

Aliona

и так 8 раз, поэтому я и решила сделать 8 сплитов в одином скрипте, чтобы 8 раз не перестраивать индексы самой большой партиции

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

ну и на последок:
можно сотворить малость не так - быстрее. Но это при условии, что старые данные гарантированно не будут меняться.
Ты делишь таблу на 8 частей. Ок.
Подготовь заранее секции с данными (TMP1,TMP2..)- построй на них индексы, которые будут локальные в дальнейшем.
и:

Alter table PART_TABLE exchange partition BIG_PART with table SIMPLE;
drop table SIMPLE;
rename PART_TABLE to SIMPLE;
Итого, сейчас первая часть сделана.
Alter table SIMPLE exchange partition PART01 with table TMP1 including indexes;
Alter table SIMPLE exchange partition PART02 with table TMP2 including indexes;
...
Сейчас имеем таблицу SIMPLE, в которой записи в секциях 1...7 дублируют
записи из BIG_PART.
И останеться только удалить лишние данные из это большой секции и перестроить глобальные...
но опять же --
Но это при условии, что старые данные гарантированно не будут меняться

Удачи :)
7 апр 06, 15:42    [2537208]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
scela
Сейчас имеем таблицу SIMPLE, в которой записи в секциях 1...7 дублируют записи из BIG_PART.

Дублируют??? А как насчет ключа секционирования?
7 апр 06, 15:46    [2537229]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
scela

Поясните пожалуйста свою мысль:
create table ane_test(part_key number, value number)
/
Table created

insert into ane_test(part_key, value) select rownum, rownum*11 from dual connect by level < 10;
9 rows inserted

commit;
Commit complete

create table ane_test_p(part_key number, value number)
partition by range(part_key)(
 partition ane_test_p1 values less than (1)
,partition ane_test_p3 values less than (3)
,partition ane_test_p5 values less than (5)
,partition ane_test_p7 values less than (7)
,partition ane_test_p9 values less than (9)
,partition ane_test_BIG_PART values less than (maxvalue)
)
/
Table created

Alter table ane_test_p exchange partition ane_test_BIG_PART with table ane_test;

Alter table ane_test_p exchange partition ane_test_BIG_PART with table ane_test

ORA-14099: all rows in table do not qualify for specified partition
7 апр 06, 16:05    [2537350]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
Aliona
Member

Откуда: Питер
Сообщений: 4023
Oracle 8.1.7 Conception
Мне не понятен индекс во второй строчке этой таблицы, Local Nonprefixed ,
разработчик сказал, что такого тоже не знает.

К сообщению приложен файл. Размер - 0Kb
7 апр 06, 16:07    [2537363]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
scela
Member

Откуда: Москва
Сообщений: 565
andrey_anonymous

Патаму что нельзя делать много дел одновременно.

безусловно ты прав. Это я пункты перепутал - сначала удалить из основной, а потом менять.
хотя что б логи не генерить - проще залочить основную таблу и select into PART_TABLE from SRC_TABLE where "Тока данные, отсутствующие в других секциях".
7 апр 06, 16:12    [2537390]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Aliona
Oracle 8.1.7 Conception
Мне не понятен индекс во второй строчке этой таблицы, Local Nonprefixed ,
разработчик сказал, что такого тоже не знает.

А что именно непонятно?
Не включили ключ секционирования в начало списка индексируемых атрибутов - получили local non-prefixed...
7 апр 06, 16:13    [2537393]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
scela
andrey_anonymous

безусловно ты прав. Это я пункты перепутал - сначала удалить из основной, а потом менять.
хотя что б логи не генерить - проще залочить основную таблу и select into PART_TABLE from SRC_TABLE where "Тока данные, отсутствующие в других секциях".

Это как? TMP1,2,3... все одно придется заполнить.
Тогда уж проще (продолжение примера)

insert into ane_test_p select * from ane_test;
9 rows inserted
7 апр 06, 16:16    [2537426]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование таблицы  [new]
scela
Member

Откуда: Москва
Сообщений: 565
andrey_anonymous

Это как? TMP1,2,3... все одно придется заполнить.

Да. Но это можно сделать заранее - я и написал подготовить таблички и в путь.
7 апр 06, 16:25    [2537497]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / Oracle Ответить