powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как заставить выбирать только из определенной партиции?
32 сообщений из 32, показаны все 2 страниц
Как заставить выбирать только из определенной партиции?
    #32501853
Animal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Существует таблица разбитая на партиции по годам
как заставить Оракл выбирать только из конкретной партиции не указывая в селекте явно период?

Oracle 9.2.0.4
Win2000 Server
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32501864
Alexander Dubrovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не из головы :)
Срисовал пример.

SELECT * FROM sales_detail_data partition (sales_q1_99);
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32501884
Animal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все пора в отпуск
ну я ступил.

СПАСИБО огромное
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32501893
Animal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дополнительный вопрос

можно ли как-нибудь создать партицию в которую бы входили данные только за текущий месяц?
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32502015
raven13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем ранжирование по дате не устаривает?
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32502033
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно ли указать несколько определенных партиций?
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32502060
Mergen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что мешает организовать партицирование по месяцам?
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32502071
Alexander Dubrovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо то, что они сами не создаются автоматически там где нужно и когда нужно :)
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32502083
Фотография denm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА можно ли указать несколько определенных партиций?

Добавьте в запрос условие на ключ секционирования.

В доке ( 8.1.7 ) написано:

FROM Clause
query_table_expression_clause

The FROM clause lets you specify the table, view, materialized view, or partition from which data is selected, or a subquery that specifies the objects from which data is selected.

PARTITION (partition), SUBPARTITION (subpartition)

Specify the partition or subpartition from which you want to retrieve data. The partition parameter may be the name of the partition within table from which to retrieve data or a more complicated predicate restricting retrieval to just one partition of the table .

Кто-нибудь знает, что это за предикат в выражении PARTITION(...)?
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32502149
Animal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА что мешает организовать партицирование по месяцам?

Создавать партиции по месяцам как-то не очень хоЦЦа

На самом деле необходимы данные именно по текущему месяцу и остальные по годам.


Хотелось бы создать что-то типа
PARTITION LESS2004 VALUES LESS THAN (' 2002-01-01')

PARTITION LESS2004 VALUES LESS THAN (' 2003-01-01')

PARTITION LESS2004 VALUES LESS THAN (' 2004-01-01')

PARTITION LESS2004 VALUES LESS THAN (Last_Day(ADD_Month(sysdate,-1))+1)

PARTITION CUR_MON VALUES LESS THAN (MAXVALUE)
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32502307
Mergen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как вы собираетесь разруливать все это хозяйство? когда месяц закончится, что дальше? Можно создать партиции и сабпартиции.
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32502413
Alexander Dubrovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может это решить вообще в корне по другому?

Держать текущий месяц вообще в другой таблице, а сваливать по расписанию в партиционированный архив в конце?

Иначе прийдется вобще каждый месяц создавать новую партицию.
Или я чего-то не понимаю?

Кстати, какова цель партиционирования в вашем случае?
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32502438
Фотография denm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например, можно решить задачу так:

- создайте партицию на следующий месяц
- первого числа каждого месяца соединяйте все партиции от начала года до предыдущего месяца и добавляйте одну на следующий (легко делается скриптом из крона или джоба).
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32502447
Alexander Dubrovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как система перенесет объединение партиций?
Ее не сплющит?
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32502479
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, не стоит вообще завязываться на физическую структуру? Я бы за такие вещи в приложении известным образом кишки выпустилэ. Partition pruning не работает, что ли?
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32503624
Animal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИначе прийдется вобще каждый месяц создавать новую партицию.
Или я чего-то не понимаю?

В том то и дело что хотелось бы завязаться на SYSDATE

PARTITION LESS2004 VALUES LESS THAN (Last_Day(ADD_Month(sysdate ,-1))+1)

авторКстати, какова цель партиционирования в вашем случае?

Табель по всему предприятию. (> 6000 чел.)

авторДержать текущий месяц вообще в другой таблице, а сваливать по расписанию в партиционированный архив в конце?

Такой вариант тоже рассматривался. Но система разрабатывалась не нами, и прийдется очень много переписывать функционала.



авторМожет, не стоит вообще завязываться на физическую структуру? Я бы за такие вещи в приложении известным образом кишки выпустилэ. Partition pruning не работает, что ли?

Что вы имели ввиду?
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32503862
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имел в виду грязный длинный тупой кухонный нож, вонзаемый в пузо автора приложения за такие вещи :)

Зачем вводить в приложение логику непосредственной работы с партициями, если оптимизатор сам выберет нужные партиции, если в запросе есть дата и колонка с датой является (или входит первой в) ключом секционирования?
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32503866
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс. Насчёт "входит первой в" я погорячился. Входить может в любом месте, но все остальные колонки ключа также должны присутствовать в запросе.
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32508295
Animal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Tiger

Ясно.


А как насчет завизаться на системную дату?
Как создать партицию текущего месяца?
Ну неохота создавать партиции на каждый месяч.
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32508362
Зл0й
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так товарищ Скотт Тайгер, ножик уберите пожалуйста. Без фанатизма пожалуйста. Я как DBA вас конечно понимаю, даже сочувствую. Однако реальная система - это всегда компромисс.

Вам никогда не встречались execution plans при которых оракл сканирует все партиции, а не только ту где лежат искомые данные? Мне встречались. Таблица разбита по месяцам, ищу данные за янарь 2003 г. Оракл, зараза, сканирует с 1999 по 2004. А таблицы где в январской партиции валяются февральские данные вы не встречали? Я опять-таки встречал, так что Оракл не зря сканирует всю таблицу.

Так что, указывать партицию хоть и не элегантно, но приемлемо. Точно так же как диктовать оптимизатору план хинтами. Тоже завязка кода на "физическую реализацию" а именно -на имя индекса. А что делать, кому сейчас легко, при объемах баз измеряемых двузначными цифрами в терабайтах?
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32508487
Alexander Dubrovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин.

6000 счетов для оракла - это много???

Максимальное количество записей в таблице?
Железо: Количество дисков? Кол-во процессоров? Память?
Наблюдаются проблемы производительности? Какие?

Потом дальше будем разговаривать.

Я вообще возможно некопенгаген в этом вопросе, но я видел своими глазами, когда партиционированная таблица не только не давала выигрыша, а наоборот.

Спрашивается, а чем вызвано такое стремление к партиционированию вообще??? Не хватает места на одном носителе под таблспейс с этой таблицей????

Глупо это.

Нужно просто протрэйсить проблемные процедуры, оттюнить запросы тормозные и создать индексы грамотно и еще раз оттюнить :)

Потом уже можно по книжкам покопаться - нарыть запросиков, которые выявляют узкие места системы.

Если сервер по умолчанию настроен, то к бабке не ходи - область сортировки маленькая, буферкэш маленький, логбуфер наверняка маленький.

Но начать надо с того: "а чем собственно я сейчас недоволен?"

В противном случае с партициями родишь себе такой гиморой...

И вообще есть такая истина: тюнингом памяти, дисков, апгрэйдом железа можно добиться прироста производительности в 10-50%, а созданием необходимого индекса, удалением ненужного, оптимизацией кода можно добиться 100-1000% прироста производительности.

Так что для начала определитесь с целями ИМХО.
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32508507
Alexander Dubrovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В догонку.

Ну ладно, ты по крону в 00:00 1 числа месяца пускаешь sqlplus со скриптом который берет и создает новую партицию, отталкиваясь от текущей даты.
НО!

Кто будет эти партиции распределять по носителям (то бишь по таблспейсам) именно так, как это выгодно в плане производительности?

Или партиции все лежат на одном диске и нужны только для ограничения диапазона сканирования?
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32508550
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самая веселуха начинается, когда впопыхах кто-то добавит ещё одну партицию и весь супер-пупер алгоритм "я умнее CBO" летит к чёрту, а потом сиди и лови глюки. Оно, конечно, понятно насчёт "щетильнее надо", но такое вполне может быть.
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32508711
Animal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то СКОТТ
авторСамая веселуха начинается, когда впопыхах кто-то добавит ещё одну партицию и весь супер-пупер алгоритм "я умнее CBO" летит к чёрту, а потом сиди и лови глюки. Оно, конечно, понятно насчёт "щетильнее надо", но такое вполне может быть.

Согласен.

то Alexander Dubrovsky

автор6000 счетов для оракла - это много???

Вы про какие счета?


авторМаксимальное количество записей в таблице?
6000(чел)*365(дней)*3(года)=6570000 (это пока)

авторЖелезо: Количество дисков? Кол-во процессоров? Память?
Вот с этим худо.
5x72 дисков RAID5
4xXeon 900MHz
4GB

авторНаблюдаются проблемы производительности? Какие?
Что значит какие, естественно что долго выполняются запросы.


авторНужно просто протрэйсить проблемные процедуры, оттюнить запросы тормозные и создать индексы грамотно и еще раз оттюнить :)
Пробуем`с.

авторЕсли сервер по умолчанию настроен, то к бабке не ходи - область сортировки маленькая, буферкэш маленький, логбуфер наверняка маленький.
db_block_size=16384
db_file_multiblock_read_count=16
log_buffer = 3145728
db_block_buffers = 57600

sort_area_size =5242880
sort_area_retained_size = 1048576


авторВ противном случае с партициями родишь себе такой гиморой...
Например плиз.

авторИ вообще есть такая истина: тюнингом памяти, дисков, апгрэйдом железа можно добиться прироста производительности в 10-50%, а созданием необходимого индекса, удалением ненужного, оптимизацией кода можно добиться 100-1000% прироста производительности.
Абсолютно согласен
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32508750
Alexander Dubrovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
6000(чел)*365(дней)*3(года)=6570000 (это пока)

автор
Железо: Количество дисков? Кол-во процессоров? Память?

Вот с этим худо.
5x72 дисков RAID5
4xXeon 900MHz
4GB

автор
Наблюдаются проблемы производительности? Какие?

Что значит какие, естественно что долго выполняются запросы.




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

Тока вот где-то я читал, что после 1Мб сорт арии наступает насыщение.
Может я чего-то не того - поправьте.
Но это не суть.

Насчет RAID тут ща начнется :)
А зачем все в один райд? К чему партиции? Параллелизма никакого не получится путем.
Если бы хоть датафайлы на разных носителях....
Я должно быть опять не в тему :)

RAID5 вообще так себе решение - медленно работает.
Хочешь быстро - ставь страйп, страйп+миррор или вообще по отдельным носителям раскладывай датафайлы.

Ну да это видимо поздно делать уже...

Так может просто еще и запросы такие?

А насчет гимороя - просто путанница вот чего.
Чем больше всего, тем труднее управляется.
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32508758
Animal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторХм.
6 млн записей - это в общем то тьфу.
Процов выше крыши, памяти тоже.
С этим я и не спорю, я имел ввиду под словом худо это что винтов всего 5.


авторТока вот где-то я читал, что после 1Мб сорт арии наступает насыщение.
Невстречал. Если что кинь ссылку


авторНасчет RAID тут ща начнется :)
Во во я про тоже.

авторА зачем все в один райд?
Винтов мало

авторК чему партиции?
Уменьшить так сказать диапазон сканирования хотябы.

авторRAID5 вообще так себе решение - медленно работает.
Хочешь быстро - ставь страйп, страйп+миррор или вообще по отдельным носителям раскладывай датафайлы.
Собственно говоря в такой ситуации выхода другого небыло.



авторТак может просто еще и запросы такие?
Тяжелые не спорю, но уж сильно долго
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32508890
Alexander Dubrovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык на счет запросов то?
Тюнить не пробовали?
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #32509962
Animal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторДык на счет запросов то?
Тюнить не пробовали?

Дык, канэчна пробовали, в канечном результате получили так сказать убыстрение процентов на 15. Но это не спасло отца русской демократии.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как заставить выбирать только из определенной партиции?
    #39439922
Priehali
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица с помесячным ранжированием по дате (less than...)
Если делать к ней запрос типа
Код: plsql
1.
2.
3.
4.
select *
  from table1
 where doc_date between to_date('01012016', 'ddmmyyyy')
                               and to_date('01052016', 'ddmmyyyy')


То план показывает партишн пранинг.
Если же обращение к таблице идет внутри большого запроса и период вычисляется
подзапросом, то пранинг отваливается (по чем зря) и ответа не дождаться.

Снова делаем отдельно запрос
Код: plsql
1.
2.
3.
select *
  from table1
 where doc_date in (select dat from ...)


Где в подзапросе даты по сути того же периода что в первом варианте.
Снова пишет, что патишены подхватываются.
А если засунуть этот же запрос в большой запрос,
где table1 джойнится еще с пятью другими таблицами, то пранинг снова отваливается (но иногда рисует и хороший план)
Пробовал материализовать подзапросы с диапазоном дат - не помогает, работает нестабильно.
Еще попробую precompute_subquery, но не уверен, что поможет, да и не документирован вроде как.
Вопрос есть ли хинты, подсказывающие, что надо юзать например патишн рейндж скан, а не патишн лист all? Или может нюансы написания запросов, чтобы подхватывались патиции.
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #39439929
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Priehali,
Код: plsql
1.
2.
3.
4.
5.
select *
  from table1
where doc_date in (select dat from ...)
  and doc_date <= (select max(dat) from ...)
  and doc_date >= (select min(dat) from ...)



дополнительные условия не помогут ?
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #39439956
Priehali
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly_b, пробовал, не помогает.
...
Рейтинг: 0 / 0
Как заставить выбирать только из определенной партиции?
    #39440170
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Priehali,

О хоспаде, ты хоть в культурном обществе не называй прунинг пранингом а то люди не поймут.

Если хочется hash join с основной таблицей и range по ней, то должен примениться bloom filter.
В некоторых случаях с этим могут быть проблемы, так что показывай конкретный пример.

Извращения с precompute_subquery или материализацией это из области неадекватного.
...
Рейтинг: 0 / 0
32 сообщений из 32, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как заставить выбирать только из определенной партиции?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]